pax_global_header00006660000000000000000000000064125741700370014520gustar00rootroot0000000000000052 comment=238bd0e0f373ad449259ebd22745bc76068ed166 RSyntaxTextArea-2.5.8/000077500000000000000000000000001257417003700146025ustar00rootroot00000000000000RSyntaxTextArea-2.5.8/.classpath000066400000000000000000000014251257417003700165670ustar00rootroot00000000000000 RSyntaxTextArea-2.5.8/.gitignore000066400000000000000000000001251257417003700165700ustar00rootroot00000000000000ant-classes bin dist javadoc rsyntaxtextarea_*.zip *.java~ build .gradle /.settings/ RSyntaxTextArea-2.5.8/.project000066400000000000000000000010101257417003700162410ustar00rootroot00000000000000 RSyntaxTextArea org.eclipse.jdt.core.javabuilder org.springsource.ide.eclipse.gradle.core.nature org.eclipse.jdt.core.javanature org.eclipse.jdt.groovy.core.groovyNature RSyntaxTextArea-2.5.8/.settings/000077500000000000000000000000001257417003700165205ustar00rootroot00000000000000RSyntaxTextArea-2.5.8/.settings/gradle/000077500000000000000000000000001257417003700177565ustar00rootroot00000000000000RSyntaxTextArea-2.5.8/.settings/gradle/org.springsource.ide.eclipse.gradle.core.prefs000066400000000000000000000006661257417003700307070ustar00rootroot00000000000000#org.springsource.ide.eclipse.gradle.core.preferences.GradleProjectPreferences #Fri Apr 24 23:23:42 EDT 2015 build.family.org.gradle.tooling.model.eclipse.HierarchicalEclipseProject=; org.springsource.ide.eclipse.gradle.classpath.enableSorting=true org.springsource.ide.eclipse.gradle.classpath.jar.remap.gradle.to.maven=true org.springsource.ide.eclipse.gradle.linkedresources= org.springsource.ide.eclipse.gradle.rootprojectloc= RSyntaxTextArea-2.5.8/.settings/gradle/org.springsource.ide.eclipse.gradle.refresh.prefs000066400000000000000000000001741257417003700314070ustar00rootroot00000000000000#org.springsource.ide.eclipse.gradle.core.actions.GradleRefreshPreferences #Sat Jul 19 01:32:42 EDT 2014 enableDSLD=true RSyntaxTextArea-2.5.8/.travis.yml000066400000000000000000000007221257417003700167140ustar00rootroot00000000000000env: - DISPLAY=:99.0 # xvfb is required to simulate a windowing system for Swing GUI tests. # http://ecmendenhall.github.io/blog/blog/2013/05/28/two-travis-ci-solutions/ before_install: - "/bin/sh -e /etc/init.d/xvfb start" # Oldest JDK supported by Travis CI jdk: - openjdk6 script: - ./gradlew assemble -x signArchives -x uploadArchives - ./gradlew check # Update coverage info on coveralls.io after_success: - ./gradlew jacocoTestReport coveralls RSyntaxTextArea-2.5.8/README.md000066400000000000000000000101621257417003700160610ustar00rootroot00000000000000[![Build Status](https://travis-ci.org/bobbylight/RSyntaxTextArea.svg?branch=master)](https://travis-ci.org/bobbylight/RSyntaxTextArea) [![Coverage Status](https://coveralls.io/repos/bobbylight/RSyntaxTextArea/badge.svg)](https://coveralls.io/r/bobbylight/RSyntaxTextArea) RSyntaxTextArea is a customizable, syntax highlighting text component for Java Swing applications. Out of the box, it supports syntax highlighting for 40+ programming languages, code folding, search and replace, and has add-on libraries for code completion and spell checking. Syntax highlighting for additional languages [can be added](https://github.com/bobbylight/RSyntaxTextArea/wiki) via tools such as [JFlex](http://jflex.de). RSyntaxTextArea is available under a [modified BSD license](https://github.com/bobbylight/RSyntaxTextArea/blob/master/src/main/dist/RSyntaxTextArea.License.txt). For more information, visit [http://bobbylight.github.io/RSyntaxTextArea/](http://bobbylight.github.io/RSyntaxTextArea/). Available in the [Maven Central repository](http://search.maven.org/#search%7Cga%7C1%7Crsyntaxtextarea%20jar) (`com.fifesoft:rsyntaxtextarea:XXX`). # Building RSyntaxTextArea uses [Gradle](http://gradle.org/) to build. To compile, run all unit tests, and create the jar, run: ./gradlew build Note that RSTA only requires Java 5. To that end, the boot classpath will be set to accommodate this if a variable `java5CompileBootClasspath` is set to the location of `rt.jar` in a Java 5 JDK. This can be added to `/gradle.properties` if desired, to avoid diffs in the project's `gradle.properties`. When building with Java 8 or later, the `javadoc` task currently prints many warnings about Javadoc "issues." This is because [doclint](http://blog.joda.org/2014/02/turning-off-doclint-in-jdk-8-javadoc.html) is enabled by default in that release of Java. These warnings are harmless, and in a future release will be cleaned up. # Example Usage RSyntaxTextArea is simply a subclass of JTextComponent, so it can be dropped into any Swing application with ease. ```java import javax.swing.*; import org.fife.ui.rtextarea.*; import org.fife.ui.rsyntaxtextarea.*; public class TextEditorDemo extends JFrame { public TextEditorDemo() { JPanel cp = new JPanel(new BorderLayout()); RSyntaxTextArea textArea = new RSyntaxTextArea(20, 60); textArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA); textArea.setCodeFoldingEnabled(true); RTextScrollPane sp = new RTextScrollPane(textArea); cp.add(sp); setContentPane(cp); setTitle("Text Editor Demo"); setDefaultCloseOperation(EXIT_ON_CLOSE); pack(); setLocationRelativeTo(null); } public static void main(String[] args) { // Start all Swing applications on the EDT. SwingUtilities.invokeLater(new Runnable() { public void run() { new TextEditorDemo().setVisible(true); } }); } } ``` # Sister Projects RSyntaxTextArea provides syntax highlighting, code folding, and many other features out-of-the-box, but when building a code editor you often want to go further. Below is a list of small add-on libraries that add more complex functionality: * [AutoComplete](https://github.com/bobbylight/AutoComplete) - Adds code completion to RSyntaxTextArea (or any other JTextComponent). * [RSTALanguageSupport](https://github.com/bobbylight/RSTALanguageSupport) - Code completion for RSTA for the following languages: Java, JavaScript, HTML, PHP, JSP, Perl, C, Unix Shell. Built on both RSTA and AutoComplete. * [SpellChecker](https://github.com/bobbylight/SpellChecker) - Adds squiggle-underline spell checking to RSyntaxTextArea. * [RSTAUI](https://github.com/bobbylight/RSTAUI) - Common dialogs needed by text editing applications: Find, Replace, Go to Line, File Properties. # Getting Help * Add an issue on GitHub * Peruse [the wiki](https://github.com/bobbylight/RSyntaxTextArea/wiki) * Ask in the [project forum](http://fifesoft.com/forum/) * Check the project's [home page](http://bobbylight.github.io/RSyntaxTextArea/) RSyntaxTextArea-2.5.8/build.gradle000066400000000000000000000145311257417003700170650ustar00rootroot00000000000000['java', 'osgi', 'distribution', 'maven', 'signing'].each { apply plugin: it } // Jacoco and a coveralls upload plugin needed for publishing coverage results ['jacoco', 'com.github.kt3k.coveralls'].each { apply plugin: it } group = 'com.fifesoft' archivesBaseName = 'rsyntaxtextarea' dependencies { testCompile 'junit:junit:4.11' } // Regenerate local gradlew task wrapper(type: Wrapper) { gradleVersion = '2.0' } // Add coveralls plugin to this build's classpath buildscript { repositories { mavenCentral() } dependencies { classpath 'org.kt3k.gradle.plugin:coveralls-gradle-plugin:2.0.1' } } jacocoTestReport { reports { xml.enabled = true // coveralls plugin depends on xml format report html.enabled = true } } compileJava { sourceCompatibility javaVersion targetCompatibility javaVersion options.debug = true options.debugOptions.debugLevel = 'source,vars,lines' // Most folks will compile with the latest JDK available, but official builds // use a Java 5 JDK. Add this property to gradle.properties for boot classpath if (project.hasProperty('java5CompileBootClasspath')) { if (new File(java5CompileBootClasspath).isFile()) { println "Bootstrap classpath when compiling Java: ${java5CompileBootClasspath}" options.bootClasspath = java5CompileBootClasspath } else { println "Warning: Specified java5CompileBootClasspath does not exist: ${java5CompileBootClasspath}" } } options.compilerArgs << "-Xlint:deprecation" } ext.sharedManifest = manifest { attributes('Specification-Title': 'RSyntaxTextArea', 'Specification-Version': version, 'Implementation-Title': 'org.fife.ui', 'Implementation-Version': version, // Not sure why Require-Capability is not being added by the osgi plugin... 'Require-Capability': 'osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=' + javaVersion + '))"') } jar { manifest { from sharedManifest } } // We use "distributions" to create the zip files uploaded to SourceForge distributions { main { baseName = 'rsyntaxtextarea' contents { from { [ 'build/libs', 'distfiles' ] } rename 'RSyntaxTextArea-.*\\.jar', 'rsyntaxtextarea.jar' } } src { baseName = 'rsyntaxtextarea' } } distZip.classifier = null distZip.dependsOn jar srcDistZip.classifier = 'src' srcDistZip { from projectDir include 'src/**/*' include 'build.gradle' include '.classpath' include '.project' include 'gradle.properties' include 'gradle/**/*' include 'gradlew*' include 'README.md' include '.settings/**' } task buildSourceForgeZips << { println "Building zip files for SourceForge" } buildSourceForgeZips.dependsOn clean, jar, distZip, srcDistZip // Stuff to generate and upload Maven artifacts task javadocJar (type: Jar, dependsOn: javadoc) { manifest { from sharedManifest } classifier = 'javadoc' from javadoc.destinationDir } task sourceJar (type: Jar) { manifest { from sharedManifest } classifier = 'sources' from sourceSets.main.allSource } artifacts { archives jar, javadocJar, sourceJar } signing { // Don't require signing for e.g. ./gradlew install required { gradle.taskGraph.hasTask("uploadArchives") } sign configurations.archives } repositories { mavenCentral() } uploadArchives { repositories { mavenDeployer { beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) } if (project.hasProperty('upload') && Boolean.parseBoolean(upload)) { // gradlew -Pupload=true repository(url: 'https://oss.sonatype.org/service/local/staging/deploy/maven2/') { authentication(userName: ossrhUsername, password: ossrhPassword) } snapshotRepository(url: 'https://oss.sonatype.org/content/repositories/snapshots/') { authentication(userName: ossrhUsername, password: ossrhPassword) } } else { repository(url: 'file:///' + projectDir + '/../localMavenRepo') } pom { groupId = 'com.fifesoft' name = 'rsyntaxtextarea' project { parent { groupId 'org.sonatype.oss' artifactId 'oss-parent' version '7' relativePath '' } groupId 'com.fifesoft' artifactId 'rsyntaxtextarea' packaging 'jar' name 'rsyntaxtextarea' description 'RSyntaxTextArea is the syntax highlighting text editor for Swing applications. ' + 'Features include syntax highlighting for 40+ languages, code folding, code completion, ' + 'regex find and replace, macros, code templates, undo/redo, line numbering and bracket ' + 'matching.' inceptionYear '2003' url 'http://www.fifesoft.com/rsyntaxtextarea/' licenses { license { name 'Modified BSD License' url 'http://fifesoft.com/rsyntaxtextarea/RSyntaxTextArea.License.txt' distribution 'repo' } } scm { url 'https://github.com/bobbylight/RSyntaxTextArea' connection 'scm:git:git://github.com/bobbylight/RSyntaxTextArea' developerConnection 'scm:git:git@github.com:bobbylight/RSyntaxTextArea' if (!project.version.endsWith('-SNAPSHOT')) { tag project.version } } developers { developer { name 'Robert Futrell' url 'http://www.fifesoft.com' organization = 'Fifesoft' /* https://issues.gradle.org/browse/GRADLE-1200 */ organizationUrl 'http://www.fifesoft.com/' roles { role 'architect' role 'developer' } timezone '0' } } // Says to enforce 1.5 compatibility when building // Doesn't work as of Gradle 2.0 due to a Groovy bug; see // http://jira.codehaus.org/browse/GROOVY-7023 // For now, append it via XML directly /* build { plugins { plugin { artifactId 'maven-compiler-plugin' version '2.3.2' executions { execution { id 'default-compile' configuration { source '1.5' target '1.5' } } } } } } */ withXml { def pluginNode = asNode().appendNode('build').appendNode('plugins').appendNode('plugin') pluginNode.appendNode('artifactId', 'maven-compiler-plugin') pluginNode.appendNode('version', '2.3.2') def executionNode = pluginNode.appendNode('executions').appendNode('execution') executionNode.appendNode('id', 'default-compile') executionNode.appendNode('configuration').appendNode('source', '1.5'). parent().appendNode('target', '1.5') } } } } } } RSyntaxTextArea-2.5.8/gradle.properties000066400000000000000000000001661257417003700201610ustar00rootroot00000000000000# Note that Maven- and signing-related properties are in /gradle.properties javaVersion=1.5 version=2.5.8 RSyntaxTextArea-2.5.8/gradle/000077500000000000000000000000001257417003700160405ustar00rootroot00000000000000RSyntaxTextArea-2.5.8/gradle/wrapper/000077500000000000000000000000001257417003700175205ustar00rootroot00000000000000RSyntaxTextArea-2.5.8/gradle/wrapper/gradle-wrapper.jar000066400000000000000000001425751257417003700231500ustar00rootroot00000000000000PK SC META-INF/PK SC4=UMETA-INF/MANIFEST.MFMLK-. K-*ϳR03-IM+I, dZ)%b"i5PK SCorg/PK SC org/gradle/PK SCorg/gradle/wrapper/PK SChdf#org/gradle/wrapper/Download$1.class}M 0h5Z+v/ ׆p!.3̳{?~~&(P0MHa3e2&p lÐ|e;D-l ׽C!C"v=lrKOx RhO]!'"՞@yMB` !k>"APݶ-_}ɻDu_yks~ r[=*ek€a)? rg'U ewRĎw s'⥧Ǔ9JZ Y >HH,θ1Ppt1prUNN!;$ i}On->+ſC Of$#5;#*uJID)6j -5}+kY_1}h璥>C0EZQl\!@1JQ!NbN)R_p槩r'GڸS6[Kn0֢\V7pM^E\dMPK SCXs"org/gradle/wrapper/IDownload.classE 0  ^b AP^26J;t>;ɗ|{z~+%5O&WΔ(a_4[gR#!XbQVg={}1AYCX'R5c/J$S@pP\mKulPK SCHE*P 3org/gradle/wrapper/ExclusiveFileAccessManager.classVKpU=//2 "@`ȇ@ I'i{z=KJ0*KK˅.)7nrrcyݓ/w?{ޝ/xQT,Z#%mrDN8ĩ0JxgtYAhҬ/rcz0!%C0a I#ݍMNΩjPxcf@I2j:B>Y99+ d,h2V )(55Uu V/ KSz4C14JFj^)jGl5i#ՇFi-mVM_ ԯnť^w9O[f:gۚēaȈuU3>sNK;t`ʶ0CdXA OӤju#0A_9jGLYEm&tVm6De V (xNڪk yDk͹IQOI;P|voF3S|wu{ijM4iH/{j緊!uGKVVkcoZODJO/,nrv:ߡ m4VP[آ -ldAtW] FpnJAR4 YyՋSQ^ %/5RN출)_4!;W|qQ[SZotDbYvtQyE+ A~3w]ج@ >*5I(kQU%*bUsW*-/WĪr~%.XH`ӂ|HqhW.j:ٝPn1fɩ'q* FܗajVSoi8D+(ˮ6u#Jz P̰q0@OF Sp@TL׵u Ew#mp 01CiJO$b.H#oCs\P?&PUSto eMڷxEDž&bOʻV1t9ehۮB :!1> NHDxad@E_|RFDZa2QJ02Qc#70v_rV@#|ߊFI»_y-_8h!VɖΨ;nL!_(#n.:fX?o/X(C|GIx}ߠK]G#y9])4oNgDʩ $f&/CPK SCc`-org/gradle/wrapper/WrapperConfiguration.classn@g8N7Ρ--@[QU6@QB[I*ؑSDC!fN, ?y~:9w(w7͋fzusY.xCCF4Ĩ75%c0.w*&UVVqF IJrN kxB \»'/;'k00#IR,TkA i CeG4G۳B1p3r중2SL6 zl'K9lF#N,wEc"Ұ(v 6[+U32vٸfL;6bfDt,f&6nh4# T;j nID5/G'"皶EY(sJhfZ)Ԭ&Yv숔XH`8BVXnə"Rd`KQW8kKtedTgȄejrm)3.oer$K.uڡz9Gp]LY[pcxb٧ NRzFKKSA7sȧy+:2`ligh鰑qUܠt~`fVT;j:V03v; glcJusyI\\+ؘ_b?ڭbA">qHǸY|u*qSr*-=~PqKǏIAtK.XڮG&`ۊ5K 2c3EݾH}tױHk/u5kXlH"5 "M;|L^x|I;Y%79R, [rng}zlj2 t᳼w2iIa%EVFi.OoΔu9mX<VM{ 7J/Q7و 70_C<.ȿ&(r>)U>'K۱T/) nEh<AXBC4E%/ADo_݃>蓛='O/6.6my">FA_ ,b` ("TCj;'JT|p3Q}4}gx[C8AP"AB;&ꇈ.JziE\"&?nqAKO8:aN>GbF'-&=eh=q /ӋONOp 7gBC8\QJ Xzc^sw PK SCn q&org/gradle/wrapper/PathAssembler.classVcVؖmꦏdIqvu$]Jk=$LUG-ez 7l  lvi #)v)lW^{w#?pp=8U nH4{2:oX %1yfEaӑ &oa]ĆOg|i g "n?,^+"*kQ(a/Eu6/Wx(oG(+{>!#⮀ƊR,Ԗ[3trNU3SV,K<;61]/dgLKeM%]VR@E{3nيn/(eGofvlf~j_TeuR+F-<7~\+"k%Q$N9e՜S*g ٫4R e*kkQ1ʪB&:hTD'e{]+9¶1ꉷΜ" M`@eR&2Z$޴4 JV"A+vU[0x{C|EVHax[<(ފjYJIJe ,u15{#7ه7lh۵qyhST[S7캭tHw !Gh몝53:o:޶&kTyq*[h\ה \Qy$>!cd\c"~$#8'e|Stwz*c+t[Q;Z2~6?ω_j+ 8E>~#2f$>Il^"~'9'Y&^U@{BZ)jQxW PZEgopŸnUn\;Ig}׈dǖ3#9\gk&"q͏Cn"h$m2.Izq͊;q߉be%tVilro5qePzQ྾cF- 8тwgya,57;&In\7LdzmU}̼Ɠsߛ+ݵFx 1q֊M‰kiG$rΡD.l2ؙ[5[u /_TקYÇ"%K}QVm6iòՊGi],8}rϻvtQUVmHŽ0@2_ENt3s',4_Sn6#u# |O5 +{SwNm{H4xٌQsκz.\u#dq sM!~,O1b场G6BTlDx4+)H=VuA^ Rȷ@+pfin (7KRƭ&MANٸE o Qr`AŻswo.# e a؊L@"1 ƃ_׸ˈ"2VV#QcFaB`@cIog|bMl,$LZo>=9i3ިaAU :gVBan&{ @UKmZ;h,. mBFh.ܰA!cfʚ]}MT JDϪQJVtA%YȡnP>)ܣr/)/~*.nVkE=AB=*!vV ,)gګ9~*_PPS:!?926_VU>/yD(]ꖑYKr^~T ?!֯.pHn{u׎C+\_(KƦOd:y#w\"s +A˾,uA+կoyEk.'S.~vG/8He*v^U`$36b?D\vG9XS fM 8iUၩd@Q RyՈKi;He=jAqݸ8H j 3a Ƣzn,rvB.&% i<[XO撶ϿIjLɃɗM=zI3uWǀmfWUfpFbr.oEBݹM\T[Jd6x{C\X̾S#ޑd\FyRe[(yE*#OQ >;2upIMEs~ޘo‡TMᔖ2-?Ǒ9IJ>k?B? >Pܟ3B9.{_ux-T%)֭*r H%:#v oMt3E"i_%t*Nq\ɝs+Ǥ+N>м@J"" @e-/R8D-q( C[(:Ȧ3%g(@~[iPbP>6O+hWu0Y-RE9 y[r^/gF*&LkՑgK?+v9:Gr|>!aG2=xMER0K4ܲ@ᶗ-HexZ^y 7N/]y֕PZ#Gp]TOcN;Z5ܳZ ;r3z(z 'yRqz ̔{/G^0/6t7xp[ok?䟧Hm _[Jy_֜Gc88u iQ4R}bafH? nҟH\۝U;hDz1?xoK)/"UGZ*h/jx*"汈uZS[/䛧'isԱHՖʭ 2_]E.P/^KtޠڐRy P`l8rwCs3/U;p8vp$L5Ч3p3wFO;~+賎۫k_LSMQ|HTx{[*iiy<GH~X M i*/:ID~*I,`jqgߺWl p-g$<ϞH`HN0!hF4  'üBLClxpf}8"ʚk\#`P'npHd\\5&#X?|jEV8]n`F oyexȿ@''/ 'Ck~R+g vt>\@N~d *$mpq84dB``E2h=@/:ib֎tZ V]D@Gߛ-=X36Xǜ@K_ iOQykO\}aA|2W[̿e(Hk" fEl__sDl/A7 b9 'fE\ߤ/Q܏=RUk BfW6Q跥ԀIv5)۾UwKJ>ܕ^SUvӟ:_C-+B'/?]Xh+E }3a1!8k?r1-I{H?PK SCL -org/gradle/wrapper/BootstrapMainStarter.classVY[V=²l1pNSJ4 `:/FD,.iڗ6/|M/vd7w;s̽co/eqWF/f$/aVF+dü,aI1XzwMڴYV5#nͬI,_ m5F:-HO͌i:tV"0 ! a\~X@]T-B4 3L5HpO̎JTpP;"%5)%YҎ:l/O~1yn$۷5JьTL]f9dzByd.hNuT'[UzifJ9TV"܃ )xt\:JFvhؓDA| KAt'zEܪE=gϱ()xCM{T G >Ed4Ѕ׵m _+5rÏÏFyK7 wT92`fg̜ ԩ6 ڻ,R}5(Nimm;==荜+AU*tS(\z&+PUYȲ"Z?,S*O8TTp#]p7ZLgw)⾵,+̞;CנӺBͧ`Z%ܮqfLUE:jښq`>;|4{Dj6R\a(\K$"\&T)3զ@j1-2 X#5E|@-봋,:u;O`L!&;͡cԭ“?G1&1_҄7_&ƄM<'|@3LZ p0b CyJ&_1@$CҊC4}xWnM+vuon$"I&/OP1EѼtİyt,mbiory\ ˿+Z$|cqVv (Aq=:Mawxq1):L%>=ZYJDvPK SCE C (org/gradle/wrapper/WrapperExecutor.classXw`#Grqlg;e3KHBh<^XNRYd82H[hX-mInh @Kҽ.{M}wg\߻7xO~p 0^k¸-ZBkeua>7(nQ(`ob֑2E6KCwλP=27~>e ø'ΏQtX5-_3u_1+4ɝ0|!c|E/ Jŗe1+Q|_FT/5:׵eohpǖ#Cý#c bZgVMtlMWl-goղE] ]R> K HVT o<$̼nن^Pĵh>m/Sm64ޥ4NY{4+GvhD9n\FwNcB~Ӛ蜰LVci$:sCS40sdjiZ4h{ iSpEk*Ow.RU [oԸn Lk٭e9G-=YzQ` EPpJWAN;I fJ]> (-ҵ#beJӚgi \l[JN9HlۦLYX}2þDm9)4cTIyrQw{}f'tۏNE*hk}:)ȉUW[Adg]i>-?G%(!͚ " :hT|" FMaFdSy"xzqkU>oP)kNVRFߩsMv;71M0 ҕ-Dwh:DUן Ze[v۪4CA,gߕ!{>H1gSz{6;iLBKEuWr7r[9h蘄,f3 Y{)w*Lq"?ן#SH́D.NԮHVvu/+}gn=(Izު[ǣ%iPQ7<>FeU 󅷵2/3sTExK{-q-<)[ z|O`pVgłg6^2g$_?T"/K8_wQ_}Ɠ*@((l4Nנ9dj}bnfv,SIG(Ұt vrek TP"!e~,%v#2F {|ĉ/ISzQL*=KE.{2n*IM"iKOAnIePp6碼iVcгS9~ݓү)깴^aV~qU:/|% 8 @)a[q Ø&,z1cڤ|j! Wܹ;1z^DѧDmGАHAcCS^`4:e2Mc VLTw[ŝ3ܽUޙCh^r IFK3گXJ-g?랪{1܏xI.)^%:Fi%T@ϟ ‰6Mڅ|.) '5Nq `ih1p`(j9N0{p;&[ЀW0J OM4 :Rfػ_5űS-ޭPm>K= W>PK SCK_ +*org/gradle/wrapper/GradleWrapperMain.classX \00$d! dpVc (b@bld것9zjOaZ.T}[ofY7 ?.;Uᄊ0^' ިT.Vo6?n7oQpJ_*ފCE)%{ʹn= ޫ}~_@J|PIkp Wu^|HH؀|{Psr ?N9Q1|\'I£*ç|F**>y~|IWr ?&7|SrBfQ]|O:x@{g`}k#z8'&ƒKL (;?+Pa&GxQvv wG:GVw pE]#VX"f(ou$KC5R 3Gt+&E=K lDxFOOV g:M)@I5Ajm5O13'7x2inj\P,Ӵ;c-֭rFp95'ƥ ʣfm'mc?*c1sڎы,>9H^,\Rv,^XzXv9%]1K1#MJTҞ]ǢƼxrk͜?S]6(k  4#M."2Ab°݃~,+0iqƣ|BT(fİE<<NQ,#iў$O ,֝N2jR5bv́ϕrK_' ݤTy܈^^R-Cj 5܈4LVԹ.4?ܣ)R6Oһ?)[7]?OoGi }qhx !)D>Q*#eVylvGqSgV;G5 7j,L'u{=4X,I/PAU&is"1h뎢\!ׯ ~dB4Q)kb =((XX{ GD@T3ϥ*FrED*b&VZkZ 9FS/@*aǦ즔p9z6z@ jFz 1Vb>-eo5^]#2㺼XIn\rn-YX-ĕ2یgfr~NϚ$=bB93qo\.t{IDdof#m̜6~(M6zCy͓|nIC̸>ieu*0Qtzgwxr2Nf8aaO(R7x;5j=%z_MY(RE՘aXfOvz~6lOtnl4X? e|5G;5X엹AOta(EP;3x9skr9ˆ8W| 8qCbp,sW0G%&,G ג5!p,EfQwc3(k}i(A_C|u049TjqkiT- Өj-V%p,#N&ey7ߏm-7!86cU8of,氎 ֧q^Qq#|DM XFjڄЌKтN\Jl)Q ܁#h]䰫7CO Ev*ǭ0'Ř@ oHu)͞M[F0ȥGq Y6=B:<-(YG[aXc` 6͢,5,-!6Qe 5iGU~fnDI]T,=9RX1 ў[FMi4Ϡn_܊,?3pw`R}qA%=22mcM3yl\ƎQ+6V883TF]3ë(#3 \5̞t\YQ/‹y!~1Is~\}О`-(gd=X^ZDIä0lcch0DMoYYqrkJ e-*GqKF[yN1PP+'iIgqXQhN:K_/cqs=űYLaS˙; dXJ'K jH`4zC2DNlG> PK SC{x "org/gradle/wrapper/Install$1.classVWW=2!1(Z((ĵ(ZjDuHat wڽ}vE+~c m$@Bǒ[~wy_ \:f?7=PC><xrG(77}DBɓG:[ 8 V (dc' ޭ OiY(ԌZÊj!=]71mP VelӓNn l/薹6& EN]-$bpb Z"!pt4`&ԝfLr[(V<Mٙ>}=<+TӔv%$Kg`T+FΗ cp8p%zאg;ikefk>۔2lLb1sDDJr@ʧD(Ŷ,G`aÉ5K)73Q&}x243wLFyYzԜM- hʶ[)RLضVʎJy56QJf|t/x/t֪Xz ܄Z:LS7PqM5RW:e: o⬊ye]oCB҆Tn pNGX'ԇT|/T|T|o|Vy|? B'Mae܏B<'L8)~/>K*~e&vuL5KS/F&L[C|Fu&uVyice"?nOEWug]x5='_B{g`]bݯ%;IPLi)>ō-hS=iw/N9"KPodzzC밞7Ш %R8r "j %1xBUx/Q[Jk@SfƋtǒ!$R _Ge+iUԤ1 }!ԓTL| I X*捣b]Y~><%#8:# 4^Be֨b!RIcYq7*_b];{sLƱT** `# M)5_%.Uq{S,vݩp),jC٤dЕqK[[f A% R l"PS4 ianPoa`XD;Z>~l'C #S]~LEU+F^k%-؋m8,њ)·c;<<;Hla}$ IvPE#oD43ԧ7K`]N{7B7U2PK SCV7V8org/gradle/wrapper/PathAssembler$LocalDistribution.classR[KAftոh-I}VRP*(>`; Ⱥ&oP??Jzf BΜwy ` g0gexX6ъ9V}Gk^"Vy^rg:P]xC7s݉;ZSѢד:>EwߗWI*5]a1y|\t<<#y[*DS@B["=Z|TtQ‚}A|2S/ m;I`=.s9,瞹:!"Ģt:.ࢊEl%$Gqux(Ⲏ6\U K&/ 7i F[r߫RokxMw4|W4|_*~xCś*~ HYp& WA_cٕ'޲|lGAtf3gO+PR vLؖ뙖7oʢEu|ԩI+h3Ki(Ħ.тi-='o-aۼp\>[y︂Cm+N9h[b\\ Bjg¼* zywvF3W"ѓe`9&'k[#ْ\@jFfST|Aif.[ÜpUj@%tUDAfؔ 2 ̧9e ĒRFxʋ΍3%\2c/&tJŸW)sfރĈ5bL;ywSVydsY*J7jD慕ں:zIFFlQx.Y.;Y!foVc qGpr8]HIV[O ?Wp:mE/ Uko I347FZHGc4d*h]Y#=}T_p_qCMo^-VĈ*XUqqV KX|F.UY1*mb]峢sElpG1a#P3 Xo*7>h xMz8SY[;[p, U4uޗxP_?wyֵuWx'ŢY.$4t-|Fce=cXB\qwvA)y6a u$oDROjFzWQ{[-݆̊u^|톦ࡆڭ:}Sn61nӪ$WjVD4=r2h*Z|Ge([]"}ov&=$ܹY}\yBy9züQ?ְ~189g$q|+{x]@* F W8vCމ0^D0/P)0m)L ~] w+=DנfUhwNj>rЏclU(I>[o@ŁU in$S3x)΃<`? j֕i%`G2hf mFm_Et<\A,$I5u vƃt'C׵9Cq2Gon}geޭwaW1[|c=E>ZvF*{ CCCp\G_hV:n|x5=V[!e(WcqS(AbHQ4gx3KE"RzHB,_#7 eP.e7(E(1J+S\EL33s4j?YKjܭ׸[r]~+eaN0OA*s,?75<2c}>{tl?d0v@>B5hGVt&8΄t&3j\Mgt=<́53 |IZ? )kOg^>Y S8Y^YBuG 0 ] 4GtnhרGPK SCg8PN#gradle-wrapper-classpath.propertiesSO)IUHIM,R)MUpIMV04W04225Tpv Q0204*(JM.)M/JLIM**+MPK SCk]build-receipt.properties5n0 EwJCZ- YZt-dϯ&\ -.% U璁|LZ5L0&:sڋRl^ YH4Ʊ7Cg1:ZI[6 IlVY*ƒ5PN Go{>A'C%k-7pM_ c3ȍ F8PK SCorg/gradle/cli/PK SC`1org/gradle/cli/AbstractCommandLineConverter.classUmOA~^_8ˋXBR@E !I*iHxJW?o/%2N(3;733_ Qd`U(ָε <(EsHɴLJgV]gitd4q&{Fdm [70 ;cj6UΓSvt0}9|7ITVe\ C:]9VOBCL]X T 扠jʉjuaqPCA>ۡc!ʯhcv[ aNǦCP ArQbpq +d<q tWאX1reZu6]{ob|S):6\/\5ǫ'8R׍[/G8"Gd0LVǰ4Dy~>4u 9 8]Ώ!|7Rߠ} [CL!w 轔AEk$!ɸUFJFq ]ܦ=p%AMSOwF2DrF>\ Vu!)l."=q@(Pk3HRE,piWu.|9F0/?fxCDlnmMJ]k'iu#0BWՔ!f,By@wZ͕t!BI]#HI9|g|{ -|PK SCEG<org/gradle/cli/CommandLineParser$MissingOptionArgState.class]O`6d 2 d D%Ɖ&ճ5Sl;x~/$QHi``iҞyM?JXSCNE8IT<+Ji.(n1(ֶkX"ێnoBGwʖ(6l^7b4VEl>Y(k0{ KA CdݪS>pլ+^5dlոY!05(ݱ#ۍYRRMf;);hr(n6fndHZ :XذAD|ʽ)Kt<u=Dq ozsVb> iؐ2~fVC0RA Kа;.ᲆLFAp3̟ S0sM]˜zaT.\t?g\Q9 d'ȱ}r_"sy<] Tt6I$etD] J.6O\OQp=mIyF)$s?Pg ۸dJR+ wL9FBtoCӸ<=@QۧJw1iK0@eo>dwTٰ^t3^E3K5SpJ"'V/OPK SCV3A=org/gradle/cli/CommandLineParser$OptionStringComparator.classTAOAfeaBPT(Y "ibBlCi%. y/hb=q]WpUoX _8Ҫ;EcfH?߻RAG;j:[Sa9mXmd;2CgZIt$Bp!_kvkG#tGSRzQ_*K ahn"l*Q6Fڎ[n!5|n[v[TLHx5 r@t;OexLA&ƑeH_ͰtX[,^j1<41tah=BF=Y \ KaYdiZD* 7b jHG$(l/C>@Kl-[rg0Ƶs$y+w3$ho%EB:aBcGQjiLHyp;";q" %z9q<-Ms1IMA_[=~ 4KɨYrit\x,d̶I*|" f#[MBEznǘ PK SC# GK1org/gradle/cli/CommandLineArgumentException.classJ1O3Zm+Uו0tD23k*|(1IK-Y  2aEE9炧=OQzTqvK9fU v#tiˀFCb!ė*BE{2ȅ 9`)K,Ihh\x &J>p1YITةQcBW~ͿDcD y f@]tӻLA^%6uV18(c]3 2gy=ݴoa̝̩ kqv>PK SC=org/gradle/cli/CommandLineParser$KnownOptionParserState.classXkxe~dN%6m* 4枦MC4$*8)uf6iJ`l"7J ??ϙlnO|swnٽ_Ў؂VВщ1 ,$y /6//.ӧ$1!ሌ+qTj_ &L;$|[z|7؆~'?q'~̄? 㧌?ݼ#||q I_F0~I^=!WxiøK#Q Ix\@am# ̾ m{MS{@keZ<Fk56>k5;} W\!"H,e0гZ"ŷ;k)HKg+SsS6 Yp'4s5wsG 7-`Ꝇi]ꋓ/3 =_sfà@NJ.a!>J&gŴĠf!Mk (J-I+>?\ M'}n~%mֱjDwhΜ 7y!dBgy)+Pb^W5̪QB%[^ ũ۽.9K;/lᥓ 6`~i.`z\Pv۶v =`zlvWc.t+Đ@6e2iKpܜsoj]S-QMU]6]L5-2~ߡz,{ϰy*x 6U},Ͳ&mk܈qVVcnpJiVA RpCu^q(̡+ mN~`g%(x ~%eUFT5VuB% yGo⼂ xK`B])#mFuU/ؐQg8j\Oz|WX_𾄿 *UUW t,ucZ]׼$дBoz++FCrʆ1:oUGV9zzu?ZpgЫǨ;&=֒"hb8g?Ku`SF-gɺ@O.TޫCc!9-\ş`1n'@Q6Rߐ?n5ӧr6y9E$KY19fgc_{1dRo*$HAP KA5`we%+g .t9݇RM)D4J Ol Ѧ)H)ա)VV>IK!ш dqU!l2jţhh:QbK<-/ =Al}Y(y4*Y(Ñj4zY\2WX9\85%"AkOeo= NBOOax]YgoЏ/`l8zQKZiTM`$Vb0;wéW DuH{_PN(𔂢+y&+b6?1cINeIX{V,6Z7l5OzCgn~i& {fp9" AוiԜ_s ,6Ϣұ>ҐFia&$( m3hQ!oBt'?'\0@55)oqM1).x Oxw}]㔳Ôp)_2T)>/fJP=jAm%qMաi |uOJł S*LT[ ch^?0< )/ʱ pd| `(Kp }Qz~O1:$PK SCB7org/gradle/cli/CommandLineParser$OptionComparator.classUmOP~Q:oSD6A("8,.`2C2Yҵ?_dm9ؤ{^o|Pf%WDK aK"X$X5uO 6Pta;M fiR.Cz3lh׏4GlA.YMuuB,mԕi(kFs\ݙʡ2UG^!O 6E=}9A{gN)Ҧ>曖.^]S`{jHO~噎-pe}^^rJI=R7٠cSޒ{2iOcinی1^#r޲t1b7?4yvo=)L^)aFZ֜[c9*z'̼n$T BAa F&00 mGd6a4j3 C'/n{._VƵձ+1DX UR%H}4+.L_c=:"L32}F7>L`g%.dJ\)+QLgq.:K^dI׵{""¾j4e8 ț#u`@Ts䥓?|pP{fr mEhQr!"XOٯUVH/.\ 鋘6?9R?SͩUÕ@FcH:U1-NcjXc4Uy<blfq=PK SC"zZ &org/gradle/cli/CommandLineOption.classV[sV˱E  cP@HICEUGT\Y S¤tCg'C~GVdٲKΞ՞ow=m;0%c:6Lu`; fx%p -xK ܆*cAF>ꩂ4!#x,ƠpG(ߍ%qKFI{dY5~G*n4gXBǔ^4Ubkֿn ,[7'yBQbeI3%5r&u#q2Qy[wHHSYJWɬjJf@H7h[Ҭ,J8ڲ -7ܨq&nԝR1GC (ONT4{Zj̨.2jyi~\PSDz5,žcKBO}p,̮V!^ԜUmH(Q"lbQ-#a("Zrw6 ivΝ=w _|dŦmTҜ1d{mC);BNDfQkikɄaXq2ЯܵRB7"$(XAy/A7A#>;:|(F ͹=U&KcEZP|yq- S+·\U|HQS$dú݄31TMZ@wťK) sAChU0^]<. uʓGa(M"%z.업cg"W=d1fIٔd}F6,O).a9Ţ,se,~Bٿŋ#H r."Y,3❂Ĕh%aG1C Bրަd0vN_y)]}C[m#U mO]ծ7!VWT{z,jVT, AfDm dUO kjUj38QESV-J-墨l۱n`KFO{3FDe4uI\6%Bl5ܸ`e۠<3-ԡLԖ!J9v ]F(=75sٛ5}?{^?ꎹbxm%;sf횳hmNIxoM&?: C]G(سbqu_u|C7u| Wuo+H-ekg{nl]u?Tp{j.g-ٯ:bJǏc~NC: u *~8%sӽ(z,>`u(]tѼLQq :~ :~ D OV\#ZFg,~!3CwHEnZG$]hec9gڝfl;+}<p;/o'_ cuլ7[s_+a {0{&`vN7s0ċʼnrsqf&8 *BW?=qc4㽔(M(D:"cסRS-t*݂*Rإ蚹n[H(^ZHRqh,{DRTzØ۸ύ;{W"9:L!YDaL^X8Џq/!G=If11<&|x'#ې8 H1"G)\MRtqItboOH·Ĥľ5!ߑ? !1Z\c\웎{F]ʇS=6\w.8 Ti߸ #W%#'!yr#1S8S06|38-I")XZ V z'*=#7ppNPJGfFM*vX! Bg鴏 ]5HgUR(sKX d1߰6kGDg6+! \<$/$Ӟæ<~xQ~L%s@T}wCG4x̯.Psn)"{T@wX ˌ菜58o]$EZЈ/g"%1B-)i~G-QFBJFn^$mPK SCA5l| :org/gradle/cli/ProjectPropertiesCommandLineConverter.classKO@D|?Pâu#Q+$C;1m  JW&.(1D,9vo/[@yl汕G)v }FHWkwLS!]nY7ZK:̿cJDZRysV;H+-)nkS#cruLXgh|BjFYDΏ%L%񎅎*_?ֈ:("<ڄbJՍ ؊tf^*K ߵ XUVi01k p8wZ8T0g?PaΛm=C Ss | 1\Zq-}C_JEˉjE+ w'PK SCLIForg/gradle/cli/CommandLineParser$CaseInsensitiveStringComparator.classS]oA=3|lE'-_vK@JbB$jBfmvƿŗ`|G,L C{ι=wo<ORKz)(p@S ɦrTb' ; []wI_zǢoS$u>(>*A[Ue/3n3̎Hm ߗzck쉡-,N3U?ϗ^q e;~{*΅e gl͑HC9Y\Y,X f/Ggnb@HzCϢ/@͞;"j%4PGr-Jܩ7onn܁N258)Jeb;11_b7İ#j1lGד>@3ѓ$}nE`\D;vY>_HӚA\'ߜ,3! Adbg$3g Fp$!0y2d3#V"V&yA5n6bWTNT-bҕ$j@r9pQ"H#Oπ(D/H Z LC:a/?B1q#샓Ud"PK SCZVj(&org/gradle/cli/CommandLineParser.classZ{`\e?g^wMCv mC4I&ZBy&ĪA^\" (τAQDE]Wq]]ewEVv3yܒ?r{|}~}b~"D?<ޖǟ5z'DKO?=I +MhtTc*cfN٫S94TɁ28X!Q~:I4'B2i23]a%)BW@D[M:-"b #vmѩ?&omA>W鼕i|>1q+>fڶe3Mܗ&md4޳>g&T"q;mmV܎{B"rgw O ĝs̤m%Rfx;$} &L_TmvV=j 4w3kk|15sz4i;WuVw"ik|Ifʓ7aB`&%3v{̆T4b` E{f? }7䯮t>cfabS"Г4bVCg,ڐtS4n9Wf,h3SyJE՗:MYHGv4Ѡ%Ib$ӢhG4h1&ҲpD^r2Rك^7yWhKX݌t.|g`_&ܢRTR2J-)*x$9>V%mFywnl|f2pbVBKCK6Y4Xf'sm 4!ÝB~ū.3rk|Wkꪅ _#jIV3' -EgܐL&`'EiEuI2l`Fook o53|i|[aЊ2χkIܤe!LKBQI@>dŌi ﶺxj o`wҜLrBh|!Re??|8K|_;5נW>/؞=4 >,YoϏ%?!UUUꦺ Гd3޶gsF^`*jW1|`UյP hZoTUkbo<3)3vV-_CljƏ8##44k%|\ǺoXq%~R &4*ؗZ8{G? %s|NYEt[1.=/L[@ZōUMqbL}AbV f{R;Uexk" `̘AHs[%vX&ɋ3ԓLm܊\h $_ -@̡}\tyOΫq84LF3?o\|RA垉c-x/ &[)xua슝zO'UXc6M%n#隟Ԯ舐_Ԛ4F9eѤՕeH5t"R;#Ib_4pT7BDIkQ?Fa҆)bp:F4f8ybu0Bj)vz0=I^u4I1&Zg#YH[$Xs(PmS4q&=ePmaʲ t'»X}7p)&0/7J4 P07LSZF64n+}#4 $oaoь&}?DhA*YuvaUCtAʰshnS y °|p(+A@hƗo[Mg`StӤ`tCT :PQ P5p`z٩+y7iRKS0ZTx!:YƹMppN9H`\B7Vc2$.k*|] |zeu}0.\uixz Bvj#hYDɫ1y>MGͥ ,tt1KhvU:.z,zCһn@1F<\E KTJrټRp oA.s+t5@@~nf>BzL`P|*bU2y!=3&Td#E!*#l_2i[0 }+rP͢]@Ai7Ki~ƧF?CW/exaJ}P{h4mC-dT.1ʟGKst6ixɣ EHJ4AI.AE0i6$; i,RH_#Aޤ-.O/" \N/)2zz{<@?[U.O, `EW%eC8 8M:շ?P;΁~B5Q~6iX HIќgY=Puds<^CYgЃ[]= TlT;B O7&M(߹-"]y,!,Eϐk뀉7@oޤuﴁ~Dn{ȇHqT [>%To"cGŷi p-wH(FߐIGp=9::=]۪ڇT(,\J.LSDLx 5CҜΏ !6ev=Ie3 z+{ѩU+wGC>>Tr9yKM[̙4l)0c܃q v^>.xgaUz%} cat[釁PK SCWPi)3org/gradle/cli/CommandLineParser$AfterOptions.classO@ǿ׍ut  @ 1PC2]QVg(ߋHh El`Li Aэ/H쒪HʧaϠȑmEӼ0Ua 1 zBuq%mA~鈡TWaaX:`JEKXf.|qv)Vt$踁I*`g#gFo(mt#aă(|D }.^9omAtIŚi!O?.K5AqS5-sF(ڦ(IyY>Dʜ=;Q KL#2` Lqhä'%ȧۈ|1l~G*>B &B>*3Z}Ŀ3N8eD-6(y蝺1&BӢU#`8Bl>o<,#qgnv@T<r»;Ìu3cgM H[Ą}\[PPK SCE#! ;org/gradle/cli/AbstractPropertiesCommandLineConverter.classVWEMaò#6 -HI[jh TbÇ$KXvǻ㻯=}Pl46嘜3wΝ;3wϿ|+ "ޕЋۼIJXƊU{V$$ֱцنǛA|$ >nC›m$-"å*bGDeV5{]g捌БtuwiBI#ScW)ػ04l,k*KX|۲M%mF^5mM}Ep~@J՜aʪFy[3tӑrrlSӳd1]PmE˩sV\iCѲ GVA[SLpq"ZNadm[=ϺtQBlEOx -+yhMiY]^z9"T3D@TlP=\Wru7UrB5ʚOVJPउeҬy1Hi]w='-j]^&:izk/I4u ]ys6F}DQ:H3x6Ǜ-ܗc+ce MD<þa>à{ bfynS[DA(8ħ2>Cn  e|y(.1!Be'*Kk]e7}U+aE{޴6S%wHSiUMO=aߞuF^8!Y.j[i4,!2m.=35=WwbN@v"Rdi ?9h4  {j(Fn"cO~Զ8np^9a.fNd'92MX Ԧ@BHXвXBpٮ!g9jy@[Ӌ`A՛qZ-A~$G O T`UTAcɠjCq?Q-$9Jpa"u:w]B%tMa#pW%ݩ~rt~]?D'aq"|bSt}pshtWi6@omLaiM'-\ E8[knfir9xs{G D68q"𦛈%Icѧ)*%̻%,`υy 8r_PK SC ,org/gradle/cli/ParsedCommandLineOption.classS[OA-"\A(-ʊP1!iĤoC;Ylw- &JD}G.I|9|93|`+)dPPQL!B0冊I,-,&q[~器+䲤⾊ {lqWAW-+ b^ f~,Cz2$J^YA4_T[Wjls6)5fn2Gsy;+c&k_2U`V]Rm4=a[T.ipoSP0/DND=t=Z+jpS0? KOrbjrjd0ajWKp &N&7YָE4Wl/xY92,BS*jx<Iy2=4yt ZcUc2Υ[3sݟPz P!#TV1t*)WǂCZnM`,;Yh ްB2 p*C{n\PHi]`x|tlRvڭ!ESV S~0"eH?z陎 _qڶmbkn9`&[3!a,[xvPi7WsO\4e}Ic8AXw|ME2RAC) gag4¸% `E*7y2U5?0:(,0̝|h`Z+9hזN9C{ ` ^L1=DЮ3 FO*_OէN3ẙS'rI_+{ҳS;=d0.2AoHޝ!R) #B{4B=G^a)}vLg_kAgP ,1)G5d/'"KWȗ>](Z{x](. bPU?#LTCd7D!}eWz2C#yd`EXG-!\LY}9 Yp-"29 '[ ޛdPK SC$R<Y)org/gradle/cli/CommandLineConverter.class]K0Of5ZVP -gm m*Y:m^QbB).yO'?_p 6ps>'B"p`K1޳$OR⻵dJb#=|Cl8B X 2 kP Ʃ?(RY#vjMcb;'IJ8e+3,< _yF<58ٰQUk]5wFΖ5>qa^U֧?riEFs,Cp/?j^ 2,zi^~>,[=臐rbi 0 N;]MİWRIjF43G\yƍմZ}*dUf8I͔7{;M{ d? D}KPz:ktfBR,<TZ{}2k_&zPƂA^i䇏W{{}D4S/'v>|Lq12,>!(Έ->ٖ0]x``#+|1xчWZƄv~FhR9N@] CDž?pO#6Eqv 2l9CKM_6ȇC>N$1 !,:\VEG- w01#bg蜣Xp|,SWI>M(./!N?%$\ۂP PK SC;|9org/gradle/cli/SystemPropertiesCommandLineConverter.classJ@ثmjE5BDąR/P~ӑ$&BJW 'iAY3͜l "lYlE <& d@HgL{:rRs:C*X4NĬQ ۴;hZ3a ѽG!]Gv7S"5eb o}ɸGtFMz9y~X{()spL`7e.KV, TXxɢfDTEGPWJmh~49AjxѰ sh gԙn85].FԒs9Q΢*s/@Ug J*ce+s+1 $p6/t-,;h-.Z >kZPK SCS2org/gradle/cli/CommandLineParser$ParserState.classSn@}8qpR $MSn(HHQCor]9kq. q(Ĭbɞݙ7 !Ya7'xjiEȽ d"dًFaHb<1 yҏ\xhgPx/SXļX|'zL<#;s0pzx,HwH3]Bi, =T|1"Ih'B VSB>\d5˹+>Ya[Xz̜9ߙ=| e͐ih,lЋ!<0,!׌0&q^LDSqz덖GzSLNo$5]]R̼jz\5kax.ֿI*C ,nKe=GQr}A2_[9y+^dfu]59%Wjp(NoԔFdiK1ԎC;W"W}M"=+-SӳRIuKbfyJ=9UZ g `غ_=]wD26v͌:,І+|h\HCwl0UudEҍ=*p7c TU//YNn*rbP[sc|O11S OܫWQ"pΔLFҡ]K Yb-M5c- XQu*gKh9Sk4jE}S+J]<覿| qn|yNڻJgiB\QǒttdM&1ܢhh< /΅_ D! i׸!kiؕ6Ȗ^g+;cw⸋rssQqnG+I\"p\@?1 Qs.հ1kD')"mw<"z@'jE#cGZ&=_PK SCw(FDgradle-cli-classpath.propertiesSO)IUHIM,R)MUpIMV04W04224Qpv Q0204*(JM.)**+MPK SC AMETA-INF/PK SC4=U)META-INF/MANIFEST.MFPK SCAorg/PK SC Aorg/gradle/PK SCAorg/gradle/wrapper/PK SChdf#org/gradle/wrapper/Download$1.classPK SC[pDorg/gradle/wrapper/Download$SystemPropertiesProxyAuthenticator.classPK SCXs"vorg/gradle/wrapper/IDownload.classPK SCHE*P 3`org/gradle/wrapper/ExclusiveFileAccessManager.classPK SCc`- org/gradle/wrapper/WrapperConfiguration.classPK SCQ}i 0aorg/gradle/wrapper/SystemPropertiesHandler.classPK SCn q&org/gradle/wrapper/PathAssembler.classPK SC org/gradle/wrapper/Install.classPK SCL - *org/gradle/wrapper/BootstrapMainStarter.classPK SCE C (//org/gradle/wrapper/WrapperExecutor.classPK SCK_ +*9org/gradle/wrapper/GradleWrapperMain.classPK SC{x "Dorg/gradle/wrapper/Install$1.classPK SCV7V8GKorg/gradle/wrapper/PathAssembler$LocalDistribution.classPK SCۅ'9z !PMorg/gradle/wrapper/Download.classPK SCg8PN#Tgradle-wrapper-classpath.propertiesPK SCk]YUbuild-receipt.propertiesPK SCAYVorg/gradle/cli/PK SC`1Vorg/gradle/cli/AbstractCommandLineConverter.classPK SC2_e(Yorg/gradle/cli/CommandLineParser$1.classPK SCEG<Zorg/gradle/cli/CommandLineParser$MissingOptionArgState.classPK SCV3A=]org/gradle/cli/CommandLineParser$OptionStringComparator.classPK SC# GK1`org/gradle/cli/CommandLineArgumentException.classPK SC=+borg/gradle/cli/CommandLineParser$KnownOptionParserState.classPK SCB7Jjorg/gradle/cli/CommandLineParser$OptionComparator.classPK SCn?qmorg/gradle/cli/CommandLineParser$UnknownOptionParserState.classPK SC"zZ &porg/gradle/cli/CommandLineOption.classPK SC$ 8vorg/gradle/cli/CommandLineParser$OptionParserState.classPK SC#4P*&xorg/gradle/cli/ParsedCommandLine.classPK SCA5l| :org/gradle/cli/ProjectPropertiesCommandLineConverter.classPK SCLIFāorg/gradle/cli/CommandLineParser$CaseInsensitiveStringComparator.classPK SCZVj(&qorg/gradle/cli/CommandLineParser.classPK SCWPi)3org/gradle/cli/CommandLineParser$AfterOptions.classPK SC(3org/gradle/cli/CommandLineParser$OptionString.classPK SCE#! ;org/gradle/cli/AbstractPropertiesCommandLineConverter.classPK SC ,org/gradle/cli/ParsedCommandLineOption.classPK SC"=org/gradle/cli/CommandLineParser$OptionAwareParserState.classPK SC$R<Y)org/gradle/cli/CommandLineConverter.classPK SC4$ | <~org/gradle/cli/CommandLineParser$BeforeFirstSubCommand.classPK SC;|9¬org/gradle/cli/SystemPropertiesCommandLineConverter.classPK SCS2org/gradle/cli/CommandLineParser$ParserState.classPK SC~:; ;org/gradle/cli/CommandLineParser$AfterFirstSubCommand.classPK SCw(FD|gradle-cli-classpath.propertiesPK//hRSyntaxTextArea-2.5.8/gradle/wrapper/gradle-wrapper.properties000066400000000000000000000003531257417003700245530ustar00rootroot00000000000000#Fri Aug 15 22:24:22 EDT 2014 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=http\://services.gradle.org/distributions/gradle-2.0-bin.zip RSyntaxTextArea-2.5.8/gradlew000077500000000000000000000117301257417003700161570ustar00rootroot00000000000000#!/usr/bin/env bash ############################################################################## ## ## Gradle start up script for UN*X ## ############################################################################## # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS="" APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" warn ( ) { echo "$*" } die ( ) { echo echo "$*" echo exit 1 } # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false case "`uname`" in CYGWIN* ) cygwin=true ;; Darwin* ) darwin=true ;; MINGW* ) msys=true ;; esac # For Cygwin, ensure paths are in UNIX format before anything is touched. if $cygwin ; then [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` fi # Attempt to set APP_HOME # Resolve links: $0 may be a link PRG="$0" # Need this for relative symlinks. while [ -h "$PRG" ] ; do ls=`ls -ld "$PRG"` link=`expr "$ls" : '.*-> \(.*\)$'` if expr "$link" : '/.*' > /dev/null; then PRG="$link" else PRG=`dirname "$PRG"`"/$link" fi done SAVED="`pwd`" cd "`dirname \"$PRG\"`/" >&- APP_HOME="`pwd -P`" cd "$SAVED" >&- CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables JAVACMD="$JAVA_HOME/jre/sh/java" else JAVACMD="$JAVA_HOME/bin/java" fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else JAVACMD="java" which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi # Increase the maximum file descriptors if we can. if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then MAX_FD="$MAX_FD_LIMIT" fi ulimit -n $MAX_FD if [ $? -ne 0 ] ; then warn "Could not set maximum file descriptor limit: $MAX_FD" fi else warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" fi fi # For Darwin, add options to specify how the application appears in the dock if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi # For Cygwin, switch paths to Windows format before running java if $cygwin ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` # We build the pattern for arguments to be converted via cygpath ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` SEP="" for dir in $ROOTDIRSRAW ; do ROOTDIRS="$ROOTDIRS$SEP$dir" SEP="|" done OURCYGPATTERN="(^($ROOTDIRS))" # Add a user-defined pattern to the cygpath arguments if [ "$GRADLE_CYGPATTERN" != "" ] ; then OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" fi # Now convert the arguments - kludge to limit ourselves to /bin/sh i=0 for arg in "$@" ; do CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` else eval `echo args$i`="\"$arg\"" fi i=$((i+1)) done case $i in (0) set -- ;; (1) set -- "$args0" ;; (2) set -- "$args0" "$args1" ;; (3) set -- "$args0" "$args1" "$args2" ;; (4) set -- "$args0" "$args1" "$args2" "$args3" ;; (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules function splitJvmOpts() { JVM_OPTS=("$@") } eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" RSyntaxTextArea-2.5.8/gradlew.bat000066400000000000000000000045441257417003700167260ustar00rootroot00000000000000@if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @rem @rem ########################################################################## @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. set DEFAULT_JVM_OPTS= set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if "%ERRORLEVEL%" == "0" goto init echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. echo. echo Please set the JAVA_HOME variable in your environment to match the echo location of your Java installation. goto fail :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto init echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% echo. echo Please set the JAVA_HOME variable in your environment to match the echo location of your Java installation. goto fail :init @rem Get command-line arguments, handling Windowz variants if not "%OS%" == "Windows_NT" goto win9xME_args if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. set CMD_LINE_ARGS= set _SKIP=2 :win9xME_args_slurp if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* goto execute :4NT_args @rem Get arguments from the 4NT Shell from JP Software set CMD_LINE_ARGS=%$ :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% :end @rem End local scope for the variables with windows NT shell if "%ERRORLEVEL%"=="0" goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 exit /b 1 :mainEnd if "%OS%"=="Windows_NT" endlocal :omega RSyntaxTextArea-2.5.8/src/000077500000000000000000000000001257417003700153715ustar00rootroot00000000000000RSyntaxTextArea-2.5.8/src/main/000077500000000000000000000000001257417003700163155ustar00rootroot00000000000000RSyntaxTextArea-2.5.8/src/main/dist/000077500000000000000000000000001257417003700172605ustar00rootroot00000000000000RSyntaxTextArea-2.5.8/src/main/dist/RSyntaxTextArea.License.txt000066400000000000000000000027531257417003700244570ustar00rootroot00000000000000Copyright (c) 2012, Robert Futrell All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.RSyntaxTextArea-2.5.8/src/main/dist/readme.txt000066400000000000000000000044411257417003700212610ustar00rootroot00000000000000RSyntaxTextArea Readme ---------------------- Please contact me if you are using RSyntaxTextArea in your project! I like to know when people are finding it useful. Please send mail to: robert -at- fifesoft dot com. * About RSyntaxTextArea RSyntaxTextArea is a syntax highlighting text component, written in Swing. It allows applications to easily embed syntax highlighting for most common programming languages. Most other standard programmer's editor features are built-in: auto-indent, bracket matching, undo/redo, etc. Auto-completion is available as an add-on library (see http://fifesoft.com/autocomplete). * License RSyntaxTextArea is licensed under a modified BSD license. Please see the included RSyntaxTextArea.License.txt file. * Compiling RSyntaxTextArea compiles with Gradle. To compile the source, run all unit tests, and create the distribution zip file: cd RSyntaxTextArea gradlew build * Feedback I hope you find RSyntaxTextArea useful. Bug reports, feature requests, and just general questions are always welcome. Ways you can submit feedback: * http://forum.fifesoft.com (preferred) Has a forum for RSyntaxTextArea and related projects, where you can ask questions and get feedback quickly. * https://github.com/bobbylight/RSyntaxTextArea Add a bug or enhancement request, peruse the Wiki, etc. * Thanks Translations: * Arabic: Mawaheb, Linostar * Chinese: Terrance, peter_barnes, Sunquan, sonyichi, zvest * Chinese (Traditional): kin Por Fok, liou xiao * Dutch: Roel, Sebastiaan, lovepuppy * French: Pat, PivWan * German: Domenic, bikerpete * Hungarian: Zityi, flatron * Indonesian: azis, Sonny * Italian: Luca, stepagweb * Japanese: Josh, izumi, tomoM * Korean: Changkyoon sbrownii * Polish: Chris, Maciej Mrug * Portuguese (Brazil): Pat, Marcos Parmeggiani, Leandro * Russian: Nadiya, Vladimir * Spanish: Leonardo, phrodo, daloporhecho * Turkish: Cahit, Burak RSyntaxTextArea-2.5.8/src/main/java/000077500000000000000000000000001257417003700172365ustar00rootroot00000000000000RSyntaxTextArea-2.5.8/src/main/java/org/000077500000000000000000000000001257417003700200255ustar00rootroot00000000000000RSyntaxTextArea-2.5.8/src/main/java/org/fife/000077500000000000000000000000001257417003700207365ustar00rootroot00000000000000RSyntaxTextArea-2.5.8/src/main/java/org/fife/io/000077500000000000000000000000001257417003700213455ustar00rootroot00000000000000RSyntaxTextArea-2.5.8/src/main/java/org/fife/io/DocumentReader.java000066400000000000000000000114521257417003700251140ustar00rootroot00000000000000/* * 02/24/2004 * * DocumentReader.java - A reader for javax.swing.text.Document * objects. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.io; import java.io.Reader; import javax.swing.text.BadLocationException; import javax.swing.text.Document; import javax.swing.text.Segment; /** * A Reader for javax.swing.text.Document objects. * * @author Robert Futrell * @version 1.0 */ public class DocumentReader extends Reader { /** * The stream's position in the document. */ private long position; /** * A remembered position in the document. */ private long mark; /** * The document we're working on. */ private Document document; /** * Used for fast character access. */ private Segment segment; /** * Constructor. * * @param document The document we're 'reading'. */ public DocumentReader(Document document) { position = 0; mark = -1; this.document = document; this.segment = new Segment(); } /** * This currently does nothing... */ @Override public void close() { } /** * Marks the present position in the stream. Subsequent calls to * reset() will reposition the stream to this point. * * @param readAheadLimit Ignored. */ @Override public void mark(int readAheadLimit) { mark = position; } /** * Tells whether this reader supports the mark operation. * This always returns true for DocumentReader. */ @Override public boolean markSupported() { return true; } /** * Reads the single character at the current position in the document. */ @Override public int read() { if(position>=document.getLength()) { return -1; // Read past end of document. } try { document.getText((int)position,1, segment); position++; return segment.array[segment.offset]; } catch (BadLocationException ble) { /* Should never happen?? */ ble.printStackTrace(); return -1; } } /** * Read array.length characters from the beginning * of the document into array. * * @param array The array to read characters into. * @return The number of characters read. */ @Override public int read(char array[]) { return read(array, 0, array.length); } /** * Reads characters into a portion of an array. * * @param cbuf The destination buffer. * @param off Offset at which to start storing characters. * @param len Maximum number of characters to read. * @return The number of characters read, or -1 if the * end of the stream (document) has been reached. */ @Override public int read(char cbuf[], int off, int len) { int k; if(position>=document.getLength()) { return -1; // Read past end of document. } k = len; if((position+k)>=document.getLength()) k = document.getLength() - (int)position; if(off + k >= cbuf.length) k = cbuf.length - off; try { document.getText((int)position, k, segment); position += k; System.arraycopy(segment.array,segment.offset, cbuf,off, k); return k; } catch (BadLocationException ble) { /* Should never happen ? */ return -1; } } /** * Tells whether this reader is ready to be read without * blocking for input. DocumentReader will * always return true. * * @return true if the next read operation will * return without blocking. */ @Override public boolean ready() { return true; } /** * Resets the stream. If the stream has been marked, then attempt to * reposition it at the mark. If the stream has not been marked, then * move it to the beginning of the document. */ @Override public void reset() { if(mark==-1) { position = 0; } else { position = mark; mark = -1; } } /** * Skips characters. This will not 'skip' past the end of the document. * * @param n The number of characters to skip. * @return The number of characters actually skipped. */ @Override public long skip(long n) { if (position+n<=document.getLength()) { position += n; return n; } long temp = position; position = document.getLength(); return document.getLength() - temp; } /** * Move to the specified position in the document. If pos * is greater than the document's length, the stream's position is moved * to the end of the document. * * @param pos The position in the document to move to. */ public void seek(long pos) { position = Math.min(pos, document.getLength()); } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/io/UnicodeReader.java000066400000000000000000000205531257417003700247260ustar00rootroot00000000000000/* * 09/23/2004 * * UnicodeReader.java - A reader for Unicode input streams that is capable of * discerning which particular encoding is being used via the BOM. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.io; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.IOException; import java.io.PushbackInputStream; import java.io.Reader; /** * A reader capable of identifying Unicode streams by their BOMs. This class * will recognize the following encodings: *
    *
  • UTF-8 *
  • UTF-16LE *
  • UTF-16BE *
  • UTF-32LE *
  • UTF-32BE *
* If the stream is not found to be any of the above, then a default encoding * is used for reading. The user can specify this default encoding, or a system * default will be used.

* * For optimum performance, it is recommended that you wrap all instances of * UnicodeReader with a java.io.BufferedReader.

* * This class is mostly ripped off from the workaround in the description of * Java Bug 4508058. * * @author Robert Futrell * @version 0.9 */ public class UnicodeReader extends Reader { /** * The input stream from which we're really reading. */ private InputStreamReader internalIn = null; /** * The encoding being used. We keep our own instead of using the string * returned by java.io.InputStreamReader since that class * does not return user-friendly names. */ private String encoding; /** * The size of a BOM. */ private static final int BOM_SIZE = 4; /** * This utility constructor is here because you will usually use a * UnicodeReader on files.

* Creates a reader using the encoding specified by the BOM in the file; * if there is no recognized BOM, then a system default encoding is used. * * @param file The file from which you want to read. * @throws IOException If an error occurs when checking for/reading the * BOM. * @throws FileNotFoundException If the file does not exist, is a * directory, or cannot be opened for reading. * @throws SecurityException If a security manager exists and its * checkRead method denies read access to the file. */ public UnicodeReader(String file) throws IOException, FileNotFoundException, SecurityException { this(new File(file)); } /** * This utility constructor is here because you will usually use a * UnicodeReader on files.

* Creates a reader using the encoding specified by the BOM in the file; * if there is no recognized BOM, then a system default encoding is used. * * @param file The file from which you want to read. * @throws IOException If an error occurs when checking for/reading the * BOM. * @throws FileNotFoundException If the file does not exist, is a * directory, or cannot be opened for reading. * @throws SecurityException If a security manager exists and its * checkRead method denies read access to the file. */ public UnicodeReader(File file) throws IOException, FileNotFoundException, SecurityException { this(new FileInputStream(file)); } /** * This utility constructor is here because you will usually use a * UnicodeReader on files.

* Creates a reader using the encoding specified by the BOM in the file; * if there is no recognized BOM, then a specified default encoding is * used. * * @param file The file from which you want to read. * @param defaultEncoding The encoding to use if no BOM is found. If * this value is null, a system default is used. * @throws IOException If an error occurs when checking for/reading the * BOM. * @throws FileNotFoundException If the file does not exist, is a * directory, or cannot be opened for reading. * @throws SecurityException If a security manager exists and its * checkRead method denies read access to the file. */ public UnicodeReader(File file, String defaultEncoding) throws IOException, FileNotFoundException, SecurityException { this(new FileInputStream(file), defaultEncoding); } /** * Creates a reader using the encoding specified by the BOM in the file; * if there is no recognized BOM, then a system default encoding is used. * * @param in The input stream from which to read. * @throws IOException If an error occurs when checking for/reading the * BOM. */ public UnicodeReader(InputStream in) throws IOException { this(in, null); } /** * Creates a reader using the encoding specified by the BOM in the file; * if there is no recognized BOM, then defaultEncoding is * used. * * @param in The input stream from which to read. * @param defaultEncoding The encoding to use if no recognized BOM is * found. If this value is null, a system default * is used. * @throws IOException If an error occurs when checking for/reading the * BOM. */ public UnicodeReader(InputStream in, String defaultEncoding) throws IOException { init(in, defaultEncoding); } /** * Closes this reader. */ @Override public void close() throws IOException { internalIn.close(); } /** * Returns the encoding being used to read this input stream (i.e., the * encoding of the file). If a BOM was recognized, then the specific * Unicode type is returned; otherwise, either the default encoding passed * into the constructor or the system default is returned. * * @return The encoding of the stream. */ public String getEncoding() { return encoding; } /** * Read-ahead four bytes and check for BOM marks. Extra bytes are * unread back to the stream, only BOM bytes are skipped. * * @param defaultEncoding The encoding to use if no BOM was recognized. If * this value is null, then a system default is used. * @throws IOException If an error occurs when trying to read a BOM. */ protected void init(InputStream in, String defaultEncoding) throws IOException { PushbackInputStream tempIn = new PushbackInputStream(in, BOM_SIZE); byte bom[] = new byte[BOM_SIZE]; int n, unread; n = tempIn.read(bom, 0, bom.length); if ((bom[0]==(byte)0x00) && (bom[1]==(byte)0x00) && (bom[2]==(byte)0xFE) && (bom[3]==(byte)0xFF)) { encoding = "UTF-32BE"; unread = n - 4; } else if (n==BOM_SIZE && // Last 2 bytes are 0; could be an empty UTF-16 (bom[0]==(byte)0xFF) && (bom[1]==(byte)0xFE) && (bom[2]==(byte)0x00) && (bom[3]==(byte)0x00)) { encoding = "UTF-32LE"; unread = n - 4; } else if ((bom[0]==(byte)0xEF) && (bom[1]==(byte)0xBB) && (bom[2]==(byte)0xBF)) { encoding = "UTF-8"; unread = n - 3; } else if ((bom[0]==(byte)0xFE) && (bom[1] == (byte)0xFF)) { encoding = "UTF-16BE"; unread = n - 2; } else if ((bom[0]==(byte)0xFF) && (bom[1]== (byte)0xFE)) { encoding = "UTF-16LE"; unread = n - 2; } else { // Unicode BOM mark not found, unread all bytes encoding = defaultEncoding; unread = n; } if (unread > 0) tempIn.unread(bom, (n - unread), unread); else if (unread < -1) tempIn.unread(bom, 0, 0); // Use given encoding if (encoding == null) { internalIn = new InputStreamReader(tempIn); encoding = internalIn.getEncoding(); // Get the default. } else { internalIn = new InputStreamReader(tempIn, encoding); } } /** * Read characters into a portion of an array. This method will block until * some input is available, an I/O error occurs, or the end of the stream * is reached. * * @param cbuf The buffer into which to read. * @param off The offset at which to start storing characters. * @param len The maximum number of characters to read. * * @return The number of characters read, or -1 if the end * of the stream has been reached. */ @Override public int read(char[] cbuf, int off, int len) throws IOException { return internalIn.read(cbuf, off, len); } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/io/UnicodeWriter.java000066400000000000000000000170751257417003700250050ustar00rootroot00000000000000/* * 09/24/2004 * * UnicodeWriter.java - Writes Unicode output with the proper BOM. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.io; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.io.Writer; /** * Writes Unicode text to an output stream. If the specified encoding is a * Unicode, then the text is preceded by the proper Unicode BOM. If it is any * other encoding, this class behaves just like OutputStreamWriter. * This class is here because Java's OutputStreamWriter apparently * doesn't believe in writing BOMs. *

* * For optimum performance, it is recommended that you wrap all instances of * UnicodeWriter with a java.io.BufferedWriter. * * @author Robert Futrell * @version 0.7 */ public class UnicodeWriter extends Writer { /** * If this system property evaluates to "false", ignoring * case, files written out as UTF-8 will not have a BOM written for them. * Otherwise (even if the property is not set), UTF-8 files will have a * BOM written. */ public static final String PROPERTY_WRITE_UTF8_BOM = "UnicodeWriter.writeUtf8BOM"; /** * The writer actually doing the writing. */ private OutputStreamWriter internalOut; private static final byte[] UTF8_BOM = new byte[] { (byte)0xEF, (byte)0xBB, (byte)0xBF }; private static final byte[] UTF16LE_BOM = new byte[] { (byte)0xFF, (byte)0xFE }; private static final byte[] UTF16BE_BOM = new byte[] { (byte)0xFE, (byte)0xFF }; private static final byte[] UTF32LE_BOM = new byte[] { (byte)0xFF, (byte)0xFE, (byte)0x00, (byte)0x00 }; private static final byte[] UTF32BE_BOM = new byte[] { (byte)0x00, (byte)0x00, (byte)0xFE, (byte)0xFF }; /** * This is a utility constructor since the vast majority of the time, this * class will be used to write Unicode files. * * @param fileName The file to which to write the Unicode output. * @param encoding The encoding to use. * @throws UnsupportedEncodingException If the specified encoding is not * supported. * @throws IOException If an IO exception occurs. */ public UnicodeWriter(String fileName, String encoding) throws UnsupportedEncodingException, IOException { this(new FileOutputStream(fileName), encoding); } /** * This is a utility constructor since the vast majority of the time, this * class will be used to write Unicode files. * * @param file The file to which to write the Unicode output. * @param encoding The encoding to use. * @throws UnsupportedEncodingException If the specified encoding is not * supported. * @throws IOException If an IO exception occurs. */ public UnicodeWriter(File file, String encoding) throws UnsupportedEncodingException, IOException { this(new FileOutputStream(file), encoding); } /** * Creates a new writer. * * @param out The output stream to write. * @param encoding The encoding to use. * @throws UnsupportedEncodingException If the specified encoding is not * supported. * @throws IOException If an IO exception occurs. */ public UnicodeWriter(OutputStream out, String encoding) throws UnsupportedEncodingException, IOException { init(out, encoding); } /** * Closes this writer. * * @throws IOException If an IO exception occurs. */ @Override public void close() throws IOException { internalOut.close(); } /** * Flushes the stream. * * @throws IOException If an IO exception occurs. */ @Override public void flush() throws IOException { internalOut.flush(); } /** * Returns the encoding being used to write this output stream (i.e., the * encoding of the file). * * @return The encoding of the stream. */ public String getEncoding() { return internalOut.getEncoding(); } /** * Returns whether UTF-8 files should have a BOM in them when written. * * @return Whether to write a BOM for UTF-8 files. * @see #setWriteUtf8BOM(boolean) * @see UnicodeWriter */ public static boolean getWriteUtf8BOM() { String prop = System.getProperty(PROPERTY_WRITE_UTF8_BOM); // We default to writing the BOM, for some reason. if (prop!=null && Boolean.valueOf(prop).equals(Boolean.FALSE)) { return false; } return true; } /** * Initializes the internal output stream and writes the BOM if the * specified encoding is a Unicode encoding. * * @param out The output stream we are writing. * @param encoding The encoding in which to write. * @throws UnsupportedEncodingException If the specified encoding isn't * supported. * @throws IOException If an I/O error occurs while writing a BOM. */ private void init(OutputStream out, String encoding) throws UnsupportedEncodingException, IOException { internalOut = new OutputStreamWriter(out, encoding); // Write the proper BOM if they specified a Unicode encoding. // NOTE: Creating an OutputStreamWriter with encoding "UTF-16" DOES // DOES write out the BOM; "UTF-16LE", "UTF-16BE", "UTF-32", "UTF-32LE" // and "UTF-32BE" don't. if ("UTF-8".equals(encoding)) { if (getWriteUtf8BOM()) { out.write(UTF8_BOM, 0, UTF8_BOM.length); } } else if ("UTF-16LE".equals(encoding)) { out.write(UTF16LE_BOM, 0, UTF16LE_BOM.length); } else if (/*"UTF-16".equals(encoding) || */"UTF-16BE".equals(encoding)) { out.write(UTF16BE_BOM, 0, UTF16BE_BOM.length); } else if ("UTF-32LE".equals(encoding)) { out.write(UTF32LE_BOM, 0, UTF32LE_BOM.length); } else if ("UTF-32".equals(encoding) || "UTF-32BE".equals(encoding)) { out.write(UTF32BE_BOM, 0, UTF32BE_BOM.length); } } /** * Sets whether UTF-8 files should have a BOM written in them. * * @param write Whether to write a BOM. * @see #getWriteUtf8BOM() * @see UnicodeWriter */ public static void setWriteUtf8BOM(boolean write) { System.setProperty(UnicodeWriter.PROPERTY_WRITE_UTF8_BOM, Boolean.toString(write)); } /** * Writes a portion of an array of characters. * * @param cbuf The buffer of characters. * @param off The offset from which to start writing characters. * @param len The number of characters to write. * @throws IOException If an I/O error occurs. */ @Override public void write(char[] cbuf, int off, int len) throws IOException { internalOut.write(cbuf, off, len); } /** * Writes a single character. * * @param c An integer specifying the character to write. * @throws IOException If an IO error occurs. */ @Override public void write(int c) throws IOException { internalOut.write(c); } /** * Writes a portion of a string. * * @param str The string from which to write. * @param off The offset from which to start writing characters. * @param len The number of characters to write. * @throws IOException If an IO error occurs. */ @Override public void write(String str, int off, int len) throws IOException { internalOut.write(str, off, len); } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/io/package.html000066400000000000000000000000731257417003700236260ustar00rootroot00000000000000 Utility I/O classes. RSyntaxTextArea-2.5.8/src/main/java/org/fife/print/000077500000000000000000000000001257417003700220725ustar00rootroot00000000000000RSyntaxTextArea-2.5.8/src/main/java/org/fife/print/RPrintUtilities.java000066400000000000000000000511731257417003700260560ustar00rootroot00000000000000/* * 11/14/2003 * * RPrintUtilities.java - A collection of static methods useful for printing * text from Swing text components. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.print; import javax.swing.text.BadLocationException; import javax.swing.text.Document; import javax.swing.text.Element; import javax.swing.text.Segment; import javax.swing.text.JTextComponent; import javax.swing.text.TabExpander; import javax.swing.text.Utilities; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.print.*; /** * A collection of static methods useful for printing text from Swing text components. * * @author Robert Futrell * @version 1.0 */ public abstract class RPrintUtilities { private static int currentDocLineNumber; // The line number in the document we are currently on. private static int numDocLines; // The number of lines in the current document. private static Element rootElement; // The first Element (line) in the current document. // The characters at which to break a line if implementing word wrap. private static final char [] breakChars = { ' ', '\t', ',', '.', ';', '?', '!' }; // These variables are 'global' because RPrintTabExpander uses them. private static int xOffset; // The x-offset (for the page margin) when printing. private static int tabSizeInSpaces; // The length of a tab, in spaces. private static FontMetrics fm; // The metrics of the font currently being used to print. /** * Returns the position closest to, but before, position maxCharsPerLine in * line of one of the chars in breakChars, or simply returns * maxCharsPerLine-1 if none of the breakChars comes before * that position. This position represents the logical line break for this java.lang.String * if it is being printed in a monospaced font when lines can only be maxCharsPerLine * characters long. * * @param line The text being printed. * @param maxCharsPerLine Only up-to this many characters from * line can be printed on one line. * @return The logical position at which to stop printing line * to simulate word wrap. */ private static int getLineBreakPoint(String line, final int maxCharsPerLine) { int breakPoint = -1; for (int i=0; i breakPoint) breakPoint = breakCharPos; } return (breakPoint==-1 ? maxCharsPerLine-1 : breakPoint); } /** * Prints a Document using a monospaced font, and does no word wrapping (ie, * words will wrap mid-word to the next line). This method is expected to be called from * Printable 'print(Graphics g)' functions. * * @param g The graphics context to write to. * @param doc The javax.swing.text.Document to print. * @param fontSize the point size to use for the monospaced font. * @param pageIndex The page number to print. * @param pageFormat The format to print the page with. * @param tabSize The number of spaces to expand tabs to. * * @see #printDocumentMonospacedWordWrap */ public static int printDocumentMonospaced(Graphics g, Document doc, int fontSize, int pageIndex, PageFormat pageFormat, int tabSize) { g.setColor(Color.BLACK); g.setFont(new Font("Monospaced", Font.PLAIN, fontSize)); // Initialize our static variables (these are used by our tab expander below). tabSizeInSpaces = tabSize; fm = g.getFontMetrics(); // Create our tab expander. //RPrintTabExpander tabExpander = new RPrintTabExpander(); // Get width and height of characters in this monospaced font. int fontWidth = fm.charWidth('w'); // Any character will do as font is monospaced. int fontHeight = fm.getHeight(); int MAX_CHARS_PER_LINE = (int)pageFormat.getImageableWidth() / fontWidth; int MAX_LINES_PER_PAGE = (int)pageFormat.getImageableHeight() / fontHeight; final int STARTING_LINE_NUMBER = MAX_LINES_PER_PAGE * pageIndex; // The (x,y) coordinate to print at (in pixels, not characters). // Since y is the baseline of where we'll start printing (not the top-left // corner), we offset it by the font's ascent ( + 1 just for good measure). xOffset = (int)pageFormat.getImageableX(); int y = (int)pageFormat.getImageableY() + fm.getAscent() + 1; // A counter to keep track of the number of lines that WOULD HAVE been // printed if we were printing all lines. int numPrintedLines = 0; // Keep going while there are more lines in the document. currentDocLineNumber = 0; // The line number of the document we're currently on. rootElement = doc.getDefaultRootElement(); // To shorten accesses in our loop. numDocLines = rootElement.getElementCount(); // The number of lines in our document. while (currentDocLineNumber -1) { int spacesNeeded = tabSizeInSpaces - (tabIndex % tabSizeInSpaces); String replacementString = ""; for (int i=0; i MAX_CHARS_PER_LINE) { numPrintedLines++; if (numPrintedLines > STARTING_LINE_NUMBER) { g.drawString(curLineString.substring(0,MAX_CHARS_PER_LINE), xOffset,y); y += fontHeight; if (numPrintedLines==STARTING_LINE_NUMBER+MAX_LINES_PER_PAGE) return Printable.PAGE_EXISTS; } curLineString = curLineString.substring(MAX_CHARS_PER_LINE, curLineString.length()); } currentDocLineNumber += 1; // We have printed one more line from the document. numPrintedLines++; if (numPrintedLines>STARTING_LINE_NUMBER) { g.drawString(curLineString, xOffset,y); y += fontHeight; if (numPrintedLines==STARTING_LINE_NUMBER+MAX_LINES_PER_PAGE) return Printable.PAGE_EXISTS; } } // Now, the whole document has been "printed." Decide if this page had any text on it or not. if (numPrintedLines > STARTING_LINE_NUMBER) return Printable.PAGE_EXISTS; return Printable.NO_SUCH_PAGE; } /** * Prints a Document using a monospaced font, word wrapping on * the characters ' ', '\t', '\n', ',', '.', and ';'. This method is * expected to be called from Printable 'print(Graphics g)' functions. * * @param g The graphics context to write to. * @param doc The javax.swing.text.Document to print. * @param fontSize the point size to use for the monospaced font. * @param pageIndex The page number to print. * @param pageFormat The format to print the page with. * @param tabSize The number of spaces to expand tabs to. * * @see #printDocumentMonospaced */ public static int printDocumentMonospacedWordWrap(Graphics g, Document doc, int fontSize, int pageIndex, PageFormat pageFormat, int tabSize) { g.setColor(Color.BLACK); g.setFont(new Font("Monospaced", Font.PLAIN, fontSize)); // Initialize our static variables (these are used by our tab expander below). tabSizeInSpaces = tabSize; fm = g.getFontMetrics(); // Create our tab expander. //RPrintTabExpander tabExpander = new RPrintTabExpander(); // Get width and height of characters in this monospaced font. int fontWidth = fm.charWidth('w'); // Any character will do here, since font is monospaced. int fontHeight = fm.getHeight(); int MAX_CHARS_PER_LINE = (int)pageFormat.getImageableWidth() / fontWidth; int MAX_LINES_PER_PAGE = (int)pageFormat.getImageableHeight() / fontHeight; final int STARTING_LINE_NUMBER = MAX_LINES_PER_PAGE * pageIndex; // The (x,y) coordinate to print at (in pixels, not characters). // Since y is the baseline of where we'll start printing (not the top-left // corner), we offset it by the font's ascent ( + 1 just for good measure). xOffset = (int)pageFormat.getImageableX(); int y = (int)pageFormat.getImageableY() + fm.getAscent() + 1; // A counter to keep track of the number of lines that WOULD HAVE been // printed if we were printing all lines. int numPrintedLines = 0; // Keep going while there are more lines in the document. currentDocLineNumber = 0; // The line number of the document we're currently on. rootElement = doc.getDefaultRootElement(); // To shorten accesses in our loop. numDocLines = rootElement.getElementCount(); // The number of lines in our document. while (currentDocLineNumber -1) { int spacesNeeded = tabSizeInSpaces - (tabIndex % tabSizeInSpaces); String replacementString = ""; for (int i=0; i MAX_CHARS_PER_LINE) { int breakPoint = getLineBreakPoint(curLineString, MAX_CHARS_PER_LINE) + 1; numPrintedLines++; if (numPrintedLines > STARTING_LINE_NUMBER) { g.drawString(curLineString.substring(0,breakPoint), xOffset,y); y += fontHeight; if (numPrintedLines==STARTING_LINE_NUMBER+MAX_LINES_PER_PAGE) return Printable.PAGE_EXISTS; } curLineString = curLineString.substring(breakPoint, curLineString.length()); } currentDocLineNumber += 1; // We have printed one more line from the document. numPrintedLines++; if (numPrintedLines>STARTING_LINE_NUMBER) { g.drawString(curLineString, xOffset,y); y += fontHeight; if (numPrintedLines==STARTING_LINE_NUMBER+MAX_LINES_PER_PAGE) return Printable.PAGE_EXISTS; } } // Now, the whole document has been "printed." Decide if this page had any text on it or not. if (numPrintedLines > STARTING_LINE_NUMBER) return Printable.PAGE_EXISTS; return Printable.NO_SUCH_PAGE; } /** * Prints a Document using the specified font, word wrapping * on the characters ' ', '\t', '\n', ',', '.', and ';'. This method is * expected to be called from Printable 'print(Graphics g)' functions. * * @param g The graphics context to write to. * @param textComponent The javax.swing.text.JTextComponent * whose text you're printing. * @param font The font to use for printing. If null, then * textComponent's font is used. * @param pageIndex The page number to print. * @param pageFormat The format to print the page with. * @param tabSize The number of spaces to convert tabs to. * */ public static int printDocumentWordWrap(Graphics g, JTextComponent textComponent, Font font, int pageIndex, PageFormat pageFormat, int tabSize) { // Initialize our graphics object. g.setColor(Color.BLACK); g.setFont(font!=null ? font : textComponent.getFont()); // Initialize our static variables (these are used by our tab expander below). tabSizeInSpaces = tabSize; fm = g.getFontMetrics(); int fontHeight = fm.getHeight(); final int LINE_LENGTH_IN_PIXELS = (int)pageFormat.getImageableWidth(); final int MAX_LINES_PER_PAGE = (int)pageFormat.getImageableHeight() / fontHeight; final int STARTING_LINE_NUMBER = MAX_LINES_PER_PAGE * pageIndex; // Create our tab expander. RPrintTabExpander tabExpander = new RPrintTabExpander(); // The (x,y) coordinate to print at (in pixels, not characters). // Since y is the baseline of where we'll start printing (not the top-left // corner), we offset it by the font's ascent ( + 1 just for good measure). xOffset = (int)pageFormat.getImageableX(); int y = (int)pageFormat.getImageableY() + fm.getAscent() + 1; // A counter to keep track of the number of lines that WOULD HAVE been // printed if we were printing all lines. int numPrintedLines = 0; // Keep going while there are more lines in the document. Document doc = textComponent.getDocument(); rootElement = doc.getDefaultRootElement(); numDocLines = rootElement.getElementCount(); // The number of lines in our document. currentDocLineNumber = 0; // The line number of the document we're currently on. int startingOffset = 0; // Used when a line is so long it has to be wrapped. while (currentDocLineNumber LINE_LENGTH_IN_PIXELS) { //System.err.println("'" + currentLineSeg + "' - " + currentLineLengthInPixels + "/" + LINE_LENGTH_IN_PIXELS); // Remove any spaces and/or tabs from the end of the segment (would cause problems if you left 'em). currentLineSeg = removeEndingWhitespace(currentLineSeg); // currentPos will be the last position in the current text of a "line break character." currentPos = -1; String currentLineString = currentLineSeg.toString(); for (int i=0; i-1 && pos>currentPos) // currentPos = pos; if (pos>0 && pos>currentPos & pos!=currentLineString.length()) currentPos = pos; } // If we didn't find a line break character, we'll simply break the line at // the last character that fits on a printed line. // So here, we set currentPos to be the position of the last character that fits // on the current printed line. if (currentPos == -1) { // Fix currentLineSeg so that it contains exactly enough text to fit in // LINE_LENGTH_IN_PIXELS pixels... currentPos = 0; do { currentPos++; try { doc.getText(currentLineStart+startingOffset, currentPos, currentLineSeg); } catch (BadLocationException ble) { System.err.println(ble); return Printable.NO_SUCH_PAGE; } currentLineLengthInPixels = Utilities. getTabbedTextWidth(currentLineSeg, fm, 0, tabExpander, 0); } while (currentLineLengthInPixels <= LINE_LENGTH_IN_PIXELS); currentPos--; } try { doc.getText((currentLineStart+startingOffset), currentPos, currentLineSeg); } catch (BadLocationException ble) { System.err.println("BadLocationException in print (a):"); System.err.println("==> currentLineStart: " + currentLineStart + "; startingOffset: " + startingOffset + "; currentPos: " + currentPos); System.err.println("==> Range: " + (currentLineStart+startingOffset) + " - " + (currentLineStart+startingOffset+currentPos)); ble.printStackTrace(); return Printable.NO_SUCH_PAGE; } currentLineLengthInPixels = Utilities.getTabbedTextWidth(currentLineSeg, fm, 0, tabExpander, 0); } // End of while (currentLineLengthInPixels > LINE_LENGTH_IN_PIXELS). startingOffset += currentPos; // Where to start (offset from line's start), since this line wraps. } // End of else. numPrintedLines++; if (numPrintedLines>STARTING_LINE_NUMBER) { //g.drawString(currentLineSeg.toString(), xOffset,y); Utilities.drawTabbedText(currentLineSeg, xOffset,y, g, tabExpander, 0); y += fontHeight; if (numPrintedLines==STARTING_LINE_NUMBER+MAX_LINES_PER_PAGE) return Printable.PAGE_EXISTS; } } // Now, the whole document has been "printed." Decide if this page had any text on it or not. if (numPrintedLines > STARTING_LINE_NUMBER) return Printable.PAGE_EXISTS; return Printable.NO_SUCH_PAGE; } /** * Removes any spaces or tabs from the end of the segment. * * @param segment The segment from which to remove tailing whitespace. * @return segment with trailing whitespace removed. */ private static Segment removeEndingWhitespace(Segment segment) { int toTrim = 0; char currentChar = segment.setIndex(segment.getEndIndex()-1); while ((currentChar==' ' || currentChar=='\t') && currentChar!=Segment.DONE) { toTrim++; currentChar = segment.previous(); } String stringVal = segment.toString(); String newStringVal = stringVal.substring(0,stringVal.length()-toTrim); return new Segment(newStringVal.toCharArray(), 0, newStringVal.length()); } /** * A tab expander for the document currently being printed with the * font being used for the printing. */ private static class RPrintTabExpander implements TabExpander { RPrintTabExpander() { } public float nextTabStop(float x, int tabOffset) { if (tabSizeInSpaces == 0) return x; int tabSizeInPixels = tabSizeInSpaces * fm.charWidth(' '); int ntabs = (((int) x) - xOffset) / tabSizeInPixels; return xOffset + ((ntabs + 1) * tabSizeInPixels); } } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/print/package.html000066400000000000000000000001521257417003700243510ustar00rootroot00000000000000 Utility methods for printing text in a JTextComponent. RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/000077500000000000000000000000001257417003700213535ustar00rootroot00000000000000RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/000077500000000000000000000000001257417003700246215ustar00rootroot00000000000000RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/AbstractJFlexCTokenMaker.java000066400000000000000000000175461257417003700322610ustar00rootroot00000000000000/* * 01/25/2009 * * AbstractJFlexCTokenMaker.java - Base class for token makers that use curly * braces to denote code blocks, such as C, C++, Java, Perl, etc. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.awt.event.ActionEvent; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.Action; import javax.swing.UIManager; import javax.swing.text.BadLocationException; import org.fife.ui.rtextarea.RTextArea; /** * Base class for JFlex-based token makers using C-style syntax. This class * knows how to: * *

    *
  • Auto-indent after opening braces and parens *
  • Automatically close multi-line and documentation comments *
* * @author Robert Futrell * @version 1.0 */ public abstract class AbstractJFlexCTokenMaker extends AbstractJFlexTokenMaker { private final Action INSERT_BREAK_ACTION; private static final Pattern MLC_PATTERN = Pattern.compile("([ \\t]*)(/?[\\*]+)([ \\t]*)"); protected AbstractJFlexCTokenMaker() { INSERT_BREAK_ACTION = createInsertBreakAction(); } /** * Creates and returns the action to use when the user inserts a newline. * The default implementation intelligently closes multi-line comments. * Subclasses can override. * * @return The action. * @see #getInsertBreakAction() */ protected Action createInsertBreakAction() { return new CStyleInsertBreakAction(); } /** * Returns true always as C-style languages use curly braces * to denote code blocks. * * @return true always. */ @Override public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { return true; } /** * Returns an action to handle "insert break" key presses (i.e. Enter). * An action is returned that handles newlines differently in multi-line * comments. * * @return The action. */ @Override public Action getInsertBreakAction() { return INSERT_BREAK_ACTION; } /** * {@inheritDoc} */ @Override public boolean getMarkOccurrencesOfTokenType(int type) { return type==Token.IDENTIFIER || type==Token.FUNCTION; } /** * {@inheritDoc} */ @Override public boolean getShouldIndentNextLineAfter(Token t) { if (t!=null && t.length()==1) { char ch = t.charAt(0); return ch=='{' || ch=='('; } return false; } /** * Returns whether a given token is an internal token type that represents * an MLC or documentation comment continuing on to the next line. This is * done by languages such as JavaScript that are a little more verbose * than necessary so that their code can be copy-and-pasted into other * TokenMakers that use them as nested languages (such as * HTML, JSP, etc.). * * @param t The token to check. This cannot be null. * @return Whether the token is an internal token representing the end of * a line for an MLC/doc comment continuing on to the next line. */ private boolean isInternalEolTokenForMLCs(Token t) { int type = t.getType(); if (type<0) { type = getClosestStandardTokenTypeForInternalType(type); return type==TokenTypes.COMMENT_MULTILINE || type==TokenTypes.COMMENT_DOCUMENTATION; } return false; } /** * Action that knows how to special-case inserting a newline in a * multi-line comment for languages like C and Java. */ protected class CStyleInsertBreakAction extends RSyntaxTextAreaEditorKit.InsertBreakAction { @Override public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { if (!textArea.isEditable() || !textArea.isEnabled()) { UIManager.getLookAndFeel().provideErrorFeedback(textArea); return; } RSyntaxTextArea rsta = (RSyntaxTextArea)getTextComponent(e); RSyntaxDocument doc = (RSyntaxDocument)rsta.getDocument(); int line = textArea.getCaretLineNumber(); int type = doc.getLastTokenTypeOnLine(line); if (type<0) { type = doc.getClosestStandardTokenTypeForInternalType(type); } // Only in MLC's should we try this if (type==Token.COMMENT_DOCUMENTATION || type==Token.COMMENT_MULTILINE) { insertBreakInMLC(e, rsta, line); } else { handleInsertBreak(rsta, true); } } /** * Returns whether the MLC token containing offs appears * to have a "nested" comment (i.e., contains "/*" * somewhere inside of it). This implies that it is likely a "new" MLC * and needs to be closed. While not foolproof, this is usually good * enough of a sign. * * @param textArea * @param line * @param offs * @return Whether a comment appears to be nested inside this one. */ private boolean appearsNested(RSyntaxTextArea textArea, int line, int offs) { final int firstLine = line; // Remember the line we start at. while (line=start && dotalmost could * be factored out into this class, but cannot because they reference JFlex * variables that we cannot access from this class. * * @author Robert Futrell * @version 0.1 */ public abstract class AbstractJFlexTokenMaker extends TokenMakerBase { protected Segment s; protected int start; // Just for states. protected int offsetShift; // As parser always starts at 0, but our line doesn't. /** * Declared here so we can define overloads that refer to this method. * * @param newState The new JFlex state to enter. */ public abstract void yybegin(int newState); /** * Starts a new JFlex state and changes the current language index. * * @param state The new JFlex state to enter. * @param languageIndex The new language index. */ protected void yybegin(int state, int languageIndex) { yybegin(state); setLanguageIndex(languageIndex); } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/AbstractTokenMaker.java000066400000000000000000000032531257417003700312130ustar00rootroot00000000000000/* * 11/07/2004 * * AbstractTokenMaker.java - An abstract implementation of TokenMaker. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; /** * An abstract implementation of the * {@link org.fife.ui.rsyntaxtextarea.TokenMaker} interface. It should * be overridden for every language for which you want to provide * syntax highlighting.

* * @see Token * * @author Robert Futrell * @version 0.2 */ public abstract class AbstractTokenMaker extends TokenMakerBase { /** * Hash table of words to highlight and what token type they are. * The keys are the words to highlight, and their values are the * token types, for example, Token.RESERVED_WORD or * Token.FUNCTION. */ protected TokenMap wordsToHighlight; /** * Constructor. */ public AbstractTokenMaker() { wordsToHighlight = getWordsToHighlight(); } /** * Returns the words to highlight for this programming language. * * @return A TokenMap containing the words to highlight for * this programming language. */ public abstract TokenMap getWordsToHighlight(); /** * Removes the token last added from the linked list of tokens. The * programmer should never have to call this directly; it can be called * by subclasses of TokenMaker if necessary. */ public void removeLastToken() { if (previousToken==null) { firstToken = currentToken = null; } else { currentToken = previousToken; currentToken.setNextToken(null); } } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/AbstractTokenMakerFactory.java000066400000000000000000000066161257417003700325510ustar00rootroot00000000000000/* * 12/14/08 * * AbstractTokenMakerFactory.java - Base class for TokenMaker implementations. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.util.HashMap; import java.util.Map; import java.util.Set; /** * Base class for {@link TokenMakerFactory} implementations. A mapping from * language keys to the names of {@link TokenMaker} classes is stored. * * @author Robert Futrell * @version 1.0 */ public abstract class AbstractTokenMakerFactory extends TokenMakerFactory { /** * A mapping from keys to the names of {@link TokenMaker} implementation * class names. When {@link #getTokenMaker(String)} is called with a key * defined in this map, a TokenMaker of the corresponding type * is returned. */ private Map tokenMakerMap; /** * Constructor. */ protected AbstractTokenMakerFactory() { tokenMakerMap = new HashMap(); initTokenMakerMap(); } /** * Returns a {@link TokenMaker} for the specified key. * * @param key The key. * @return The corresponding TokenMaker, or null * if none matches the specified key. */ @Override protected TokenMaker getTokenMakerImpl(String key) { TokenMakerCreator tmc = (TokenMakerCreator)tokenMakerMap.get(key); if (tmc!=null) { try { return tmc.create(); } catch (RuntimeException re) { // FindBugs throw re; } catch (Exception e) { e.printStackTrace(); } } return null; } /** * Populates the mapping from keys to instances of * TokenMakerCreators. Subclasses should override this method * and call one of the putMapping overloads to register * {@link TokenMaker}s for syntax constants. * * @see #putMapping(String, String) * @see #putMapping(String, String, ClassLoader) */ protected abstract void initTokenMakerMap(); /** * {@inheritDoc} */ @Override public Set keySet() { return tokenMakerMap.keySet(); } /** * Adds a mapping from a key to a TokenMaker implementation * class name. * * @param key The key. * @param className The TokenMaker class name. * @see #putMapping(String, String, ClassLoader) */ public void putMapping(String key, String className) { putMapping(key, className, null); } /** * Adds a mapping from a key to a TokenMaker implementation * class name. * * @param key The key. * @param className The TokenMaker class name. * @param cl The class loader to use when loading the class. * @see #putMapping(String, String) */ public void putMapping(String key, String className, ClassLoader cl) { tokenMakerMap.put(key, new TokenMakerCreator(className, cl)); } /** * Wrapper that handles the creation of TokenMaker instances. */ private static class TokenMakerCreator { private String className; private ClassLoader cl; public TokenMakerCreator(String className, ClassLoader cl) { this.className = className; this.cl = cl!=null ? cl : getClass().getClassLoader(); } public TokenMaker create() throws Exception { return (TokenMaker)Class.forName(className, true, cl).newInstance(); } } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/ActiveLineRangeEvent.java000066400000000000000000000026441257417003700314740ustar00rootroot00000000000000/* * 02/06/2011 * * ActiveLineRangeEvent.java - Notifies listeners of an "active line range" * change in an RSyntaxTextArea. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.util.EventObject; /** * The event fired by {@link RSyntaxTextArea}s when the active line range * changes. * * @author Robert Futrell * @version 1.0 */ public class ActiveLineRangeEvent extends EventObject { private int min; private int max; /** * Constructor. * * @param source The text area. * @param min The first line in the active line range, or * -1 if the line range is being cleared. * @param max The last line in the active line range, or * -1 if the line range is being cleared. */ public ActiveLineRangeEvent(RSyntaxTextArea source, int min, int max) { super(source); this.min = min; this.max = max; } /** * Returns the last line in the active line range. * * @return The last line, or -1 if the range is being * cleared. * @see #getMin() */ public int getMax() { return max; } /** * Returns the first line in the active line range. * * @return The first line, or -1 if the range is being * cleared. * @see #getMax() */ public int getMin() { return min; } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/ActiveLineRangeListener.java000066400000000000000000000027051257417003700321760ustar00rootroot00000000000000/* * 02/06/2011 * * ActiveLineRangeListener.java - Listens for "active line range" changes * in an RSyntaxTextArea. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.util.EventListener; /** * Listens for "active line range" events from an RSyntaxTextArea. * If a text area contains some semantic knowledge of the programming language * being edited, it may broadcast {@link ActiveLineRangeEvent}s whenever the * caret moves into a new "block" of code. Listeners can listen for these * events and respond accordingly.

* * See the RSTALanguageSupport project at * http://fifesoft.com for some * LanguageSupport implementations that may broadcast these * events. Note that if an RSTA/LanguageSupport does not support broadcasting * these events, the listener will simply never receive any notifications. * * @author Robert Futrell * @version 1.0 */ public interface ActiveLineRangeListener extends EventListener { /** * Called whenever the "active line range" changes. * * @param e Information about the line range change. If there is no longer * an "active line range," the "minimum" and "maximum" line values * should both be -1. */ public void activeLineRangeChanged(ActiveLineRangeEvent e); }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/CodeTemplateManager.java000066400000000000000000000254631257417003700313370ustar00rootroot00000000000000/* * 02/21/2005 * * CodeTemplateManager.java - manages code templates. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.beans.XMLDecoder; import java.beans.XMLEncoder; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.Serializable; import java.util.*; import javax.swing.text.BadLocationException; import javax.swing.text.Document; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.templates.CodeTemplate; /** * Manages "code templates."

* * All methods in this class are synchronized for thread safety, but as a * best practice, you should probably only modify the templates known to a * CodeTemplateManager on the EDT. Modifying a * CodeTemplate retrieved from a CodeTemplateManager * while not on the EDT could cause problems.

* * For more flexible boilerplate code insertion, consider using the * TemplateCompletion * class in the * AutoComplete * add-on library. * * @author Robert Futrell * @version 1.0 */ public class CodeTemplateManager { private int maxTemplateIDLength; private List templates; private Segment s; private TemplateComparator comparator; private File directory; /** * Constructor. */ public CodeTemplateManager() { s = new Segment(); comparator = new TemplateComparator(); templates = new ArrayList(); } /** * Registers the specified template with this template manager. * * @param template The template to register. * @throws IllegalArgumentException If template is * null. * @see #removeTemplate(CodeTemplate) * @see #removeTemplate(String) */ public synchronized void addTemplate(CodeTemplate template) { if (template==null) { throw new IllegalArgumentException("template cannot be null"); } templates.add(template); sortTemplates(); } /** * Returns the template that should be inserted at the current caret * position, assuming the trigger character was pressed. * * @param textArea The text area that's getting text inserted into it. * @return A template that should be inserted, if appropriate, or * null if no template should be inserted. */ public synchronized CodeTemplate getTemplate(RSyntaxTextArea textArea) { int caretPos = textArea.getCaretPosition(); int charsToGet = Math.min(caretPos, maxTemplateIDLength); try { Document doc = textArea.getDocument(); doc.getText(caretPos-charsToGet, charsToGet, s); @SuppressWarnings("unchecked") int index = Collections.binarySearch(templates, s, comparator); return index>=0 ? (CodeTemplate)templates.get(index) : null; } catch (BadLocationException ble) { ble.printStackTrace(); throw new InternalError("Error in CodeTemplateManager"); } } /** * Returns the number of templates this manager knows about. * * @return The template count. */ public synchronized int getTemplateCount() { return templates.size(); } /** * Returns the templates currently available. * * @return The templates available. */ public synchronized CodeTemplate[] getTemplates() { CodeTemplate[] temp = new CodeTemplate[templates.size()]; return templates.toArray(temp); } /** * Returns whether the specified character is a valid character for a * CodeTemplate id. * * @param ch The character to check. * @return Whether the character is a valid template character. */ public static final boolean isValidChar(char ch) { return RSyntaxUtilities.isLetterOrDigit(ch) || ch=='_'; } /** * Returns the specified code template. * * @param template The template to remove. * @return true if the template was removed, false * if the template was not in this template manager. * @throws IllegalArgumentException If template is * null. * @see #removeTemplate(String) * @see #addTemplate(CodeTemplate) */ public synchronized boolean removeTemplate(CodeTemplate template) { if (template==null) { throw new IllegalArgumentException("template cannot be null"); } // TODO: Do a binary search return templates.remove(template); } /** * Returns the code template with the specified id. * * @param id The id to check for. * @return The code template that was removed, or null if * there was no template with the specified ID. * @throws IllegalArgumentException If id is null. * @see #removeTemplate(CodeTemplate) * @see #addTemplate(CodeTemplate) */ public synchronized CodeTemplate removeTemplate(String id) { if (id==null) { throw new IllegalArgumentException("id cannot be null"); } // TODO: Do a binary search for (Iterator i=templates.iterator(); i.hasNext(); ) { CodeTemplate template = i.next(); if (id.equals(template.getID())) { i.remove(); return template; } } return null; } /** * Replaces the current set of available templates with the ones * specified. * * @param newTemplates The new set of templates. Note that we will * be taking a shallow copy of these and sorting them. */ public synchronized void replaceTemplates(CodeTemplate[] newTemplates) { templates.clear(); if (newTemplates!=null) { for (int i=0; i-1 if the specified directory does not exist. */ public synchronized int setTemplateDirectory(File dir) { if (dir!=null && dir.isDirectory()) { this.directory = dir; File[] files = dir.listFiles(new XMLFileFilter()); int newCount = files==null ? 0 : files.length; int oldCount = templates.size(); List temp = new ArrayList(oldCount+newCount); temp.addAll(templates); for (int i=0; i i=templates.iterator(); i.hasNext(); ) { CodeTemplate temp = i.next(); if (temp==null || temp.getID()==null) { i.remove(); } else { maxTemplateIDLength = Math.max(maxTemplateIDLength, temp.getID().length()); } } Collections.sort(templates); } /** * A comparator that takes a CodeTemplate as its first * parameter and a Segment as its second, and knows * to compare the template's ID to the segment's text. */ @SuppressWarnings("rawtypes") private static class TemplateComparator implements Comparator, Serializable{ public int compare(Object template, Object segment) { // Get template start index (0) and length. CodeTemplate t = (CodeTemplate)template; final char[] templateArray = t.getID().toCharArray(); int i = 0; int len1 = templateArray.length; // Find "token" part of segment and get its offset and length. Segment s = (Segment)segment; char[] segArray = s.array; int len2 = s.count; int j = s.offset + len2 - 1; while (j>=s.offset && isValidChar(segArray[j])) { j--; } j++; int segShift = j - s.offset; len2 -= segShift; int n = Math.min(len1, len2); while (n-- != 0) { char c1 = templateArray[i++]; char c2 = segArray[j++]; if (c1 != c2) return c1 - c2; } return len1 - len2; } } /** * A file filter that accepts only XML files. */ private static class XMLFileFilter implements FileFilter { public boolean accept(File f) { return f.getName().toLowerCase().endsWith(".xml"); } } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/DefaultOccurrenceMarker.java000066400000000000000000000054701257417003700322310ustar00rootroot00000000000000/* * 03/09/2013 * * DefaultOccurrenceMarker - Marks occurrences of the current token for most * languages. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import javax.swing.text.BadLocationException; import javax.swing.text.Caret; import org.fife.ui.rtextarea.SmartHighlightPainter; /** * The default implementation of {@link OccurrenceMarker}. It goes through * the document and marks all instances of the specified token. * * @author Robert Futrell * @version 1.0 */ class DefaultOccurrenceMarker implements OccurrenceMarker { /** * {@inheritDoc} */ public Token getTokenToMark(RSyntaxTextArea textArea) { // Get the token at the caret position. int line = textArea.getCaretLineNumber(); Token tokenList = textArea.getTokenListForLine(line); Caret c = textArea.getCaret(); int dot = c.getDot(); Token t = RSyntaxUtilities.getTokenAtOffset(tokenList, dot); if (t==null /* EOL */ || !isValidType(textArea, t) || RSyntaxUtilities.isNonWordChar(t)) { // Try to the "left" of the caret. dot--; try { if (dot>=textArea.getLineStartOffset(line)) { t = RSyntaxUtilities.getTokenAtOffset(tokenList, dot); } } catch (BadLocationException ble) { ble.printStackTrace(); // Never happens } } return t; } /** * {@inheritDoc} */ public boolean isValidType(RSyntaxTextArea textArea, Token t) { return textArea.getMarkOccurrencesOfTokenType(t.getType()); } /** * {@inheritDoc} */ public void markOccurrences(RSyntaxDocument doc, Token t, RSyntaxTextAreaHighlighter h, SmartHighlightPainter p) { markOccurrencesOfToken(doc, t, h, p); } /** * Highlights all instances of tokens identical to t in the * specified document. * * @param doc The document. * @param t The document whose relevant occurrences should be marked. * @param h The highlighter to add the highlights to. * @param p The painter for the highlights. */ public static final void markOccurrencesOfToken(RSyntaxDocument doc, Token t, RSyntaxTextAreaHighlighter h, SmartHighlightPainter p) { char[] lexeme = t.getLexeme().toCharArray(); int type = t.getType(); int lineCount = doc.getDefaultRootElement().getElementCount(); for (int i=0; icreateToken is called. Instead, it internally keeps a stack of * available already-created tokens. When more tokens are needed to properly * display a line, more tokens are added to the available stack. This saves * from needless repetitive memory allocation. However, it makes it IMPERATIVE * that users call resetTokenList when creating a new token list so * that the token maker can keep an accurate list of available tokens.

* * NOTE: This class should only be used by {@link TokenMaker}; nobody else * needs it! * * @author Robert Futrell * @version 0.1 */ class DefaultTokenFactory implements TokenFactory { private int size; private int increment; private TokenImpl[] tokenList; private int currentFreeToken; protected static final int DEFAULT_START_SIZE = 30; protected static final int DEFAULT_INCREMENT = 10; /** * Constructor. */ public DefaultTokenFactory() { this(DEFAULT_START_SIZE, DEFAULT_INCREMENT); } /** * Constructor. * * @param size The initial number of tokens in this factory. * @param increment How many tokens to increment by when the stack gets * empty. */ public DefaultTokenFactory(int size, int increment) { this.size = size; this.increment = increment; this.currentFreeToken = 0; // Give us some tokens to initially work with. tokenList = new TokenImpl[size]; for (int i=0; iTokenMaker every time a token list is generated for * a new line so the tokens can be reused. */ public void resetAllTokens() { currentFreeToken = 0; } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/DefaultTokenMakerFactory.java000066400000000000000000000065331257417003700323700ustar00rootroot00000000000000/* * 12/14/2008 * * DefaultTokenMakerFactory.java - The default TokenMaker factory. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; /** * The default implementation of TokenMakerFactory. This factory * can create {@link TokenMaker}s for all languages known to * {@link RSyntaxTextArea}. * * @author Robert Futrell * @version 1.0 */ class DefaultTokenMakerFactory extends AbstractTokenMakerFactory implements SyntaxConstants { /** * {@inheritDoc} */ @Override protected void initTokenMakerMap() { String pkg = "org.fife.ui.rsyntaxtextarea.modes."; putMapping(SYNTAX_STYLE_NONE, pkg + "PlainTextTokenMaker"); putMapping(SYNTAX_STYLE_ACTIONSCRIPT, pkg + "ActionScriptTokenMaker"); putMapping(SYNTAX_STYLE_ASSEMBLER_X86, pkg + "AssemblerX86TokenMaker"); putMapping(SYNTAX_STYLE_BBCODE, pkg + "BBCodeTokenMaker"); putMapping(SYNTAX_STYLE_C, pkg + "CTokenMaker"); putMapping(SYNTAX_STYLE_CLOJURE, pkg + "ClojureTokenMaker"); putMapping(SYNTAX_STYLE_CPLUSPLUS, pkg + "CPlusPlusTokenMaker"); putMapping(SYNTAX_STYLE_CSHARP, pkg + "CSharpTokenMaker"); putMapping(SYNTAX_STYLE_CSS, pkg + "CSSTokenMaker"); putMapping(SYNTAX_STYLE_D, pkg + "DTokenMaker"); putMapping(SYNTAX_STYLE_DART, pkg + "DartTokenMaker"); putMapping(SYNTAX_STYLE_DELPHI, pkg + "DelphiTokenMaker"); putMapping(SYNTAX_STYLE_DTD, pkg + "DtdTokenMaker"); putMapping(SYNTAX_STYLE_FORTRAN, pkg + "FortranTokenMaker"); putMapping(SYNTAX_STYLE_GROOVY, pkg + "GroovyTokenMaker"); putMapping(SYNTAX_STYLE_HTACCESS, pkg + "HtaccessTokenMaker"); putMapping(SYNTAX_STYLE_HTML, pkg + "HTMLTokenMaker"); putMapping(SYNTAX_STYLE_JAVA, pkg + "JavaTokenMaker"); putMapping(SYNTAX_STYLE_JAVASCRIPT, pkg + "JavaScriptTokenMaker"); putMapping(SYNTAX_STYLE_JSHINTRC, pkg + "JshintrcTokenMaker"); putMapping(SYNTAX_STYLE_JSON, pkg + "JsonTokenMaker"); putMapping(SYNTAX_STYLE_JSP, pkg + "JSPTokenMaker"); putMapping(SYNTAX_STYLE_LATEX, pkg + "LatexTokenMaker"); putMapping(SYNTAX_STYLE_LESS, pkg + "LessTokenMaker"); putMapping(SYNTAX_STYLE_LISP, pkg + "LispTokenMaker"); putMapping(SYNTAX_STYLE_LUA, pkg + "LuaTokenMaker"); putMapping(SYNTAX_STYLE_MAKEFILE, pkg + "MakefileTokenMaker"); putMapping(SYNTAX_STYLE_MXML, pkg + "MxmlTokenMaker"); putMapping(SYNTAX_STYLE_NSIS, pkg + "NSISTokenMaker"); putMapping(SYNTAX_STYLE_PERL, pkg + "PerlTokenMaker"); putMapping(SYNTAX_STYLE_PHP, pkg + "PHPTokenMaker"); putMapping(SYNTAX_STYLE_PROPERTIES_FILE,pkg + "PropertiesFileTokenMaker"); putMapping(SYNTAX_STYLE_PYTHON, pkg + "PythonTokenMaker"); putMapping(SYNTAX_STYLE_RUBY, pkg + "RubyTokenMaker"); putMapping(SYNTAX_STYLE_SAS, pkg + "SASTokenMaker"); putMapping(SYNTAX_STYLE_SCALA, pkg + "ScalaTokenMaker"); putMapping(SYNTAX_STYLE_SQL, pkg + "SQLTokenMaker"); putMapping(SYNTAX_STYLE_TCL, pkg + "TclTokenMaker"); putMapping(SYNTAX_STYLE_UNIX_SHELL, pkg + "UnixShellTokenMaker"); putMapping(SYNTAX_STYLE_VISUAL_BASIC, pkg + "VisualBasicTokenMaker"); putMapping(SYNTAX_STYLE_WINDOWS_BATCH, pkg + "WindowsBatchTokenMaker"); putMapping(SYNTAX_STYLE_XML, pkg + "XMLTokenMaker"); } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/DefaultTokenPainter.java000066400000000000000000000201261257417003700313750ustar00rootroot00000000000000/* * 03/16/2013 * * DefaultTokenPainter - Standard implementation of a token painter. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.awt.Color; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.geom.Rectangle2D; import javax.swing.text.TabExpander; /** * Standard implementation of a token painter. * * @author Robert Futrell * @version 1.0 */ class DefaultTokenPainter implements TokenPainter { /** * Rectangle used for filling token backgrounds. */ private Rectangle2D.Float bgRect; /** * Micro-optimization; buffer used to compute tab width. If the width is * correct it's not re-allocated, to prevent lots of very small garbage. * Only used when painting tab lines. */ private static char[] tabBuf; public DefaultTokenPainter() { bgRect = new Rectangle2D.Float(); } /** * {@inheritDoc} */ public final float paint(Token token, Graphics2D g, float x, float y, RSyntaxTextArea host, TabExpander e) { return paint(token, g, x,y, host, e, 0); } /** * {@inheritDoc} */ public float paint(Token token, Graphics2D g, float x, float y, RSyntaxTextArea host, TabExpander e, float clipStart) { return paintImpl(token, g, x, y, host, e, clipStart, false, false); } /** * {@inheritDoc} */ public float paint(Token token, Graphics2D g, float x, float y, RSyntaxTextArea host, TabExpander e, float clipStart, boolean paintBG) { return paintImpl(token, g, x, y, host, e, clipStart, !paintBG, false); } /** * Paints the background of a token. * * @param x The x-coordinate of the token. * @param y The y-coordinate of the token. * @param width The width of the token (actually, the width of the part of * the token to paint). * @param height The height of the token. * @param g The graphics context with which to paint. * @param fontAscent The ascent of the token's font. * @param host The text area. * @param color The color with which to paint. */ protected void paintBackground(float x, float y, float width, float height, Graphics2D g, int fontAscent, RSyntaxTextArea host, Color color) { g.setColor(color); bgRect.setRect(x,y-fontAscent, width,height); //g.fill(bgRect); g.fillRect((int)x, (int)(y-fontAscent), (int)width, (int)height); } /** * Does the dirty-work of actually painting the token. */ protected float paintImpl(Token token, Graphics2D g, float x, float y, RSyntaxTextArea host, TabExpander e, float clipStart, boolean selected, boolean useSTC) { int origX = (int)x; int textOffs = token.getTextOffset(); char[] text = token.getTextArray(); int end = textOffs + token.length(); float nextX = x; int flushLen = 0; int flushIndex = textOffs; Color fg = useSTC ? host.getSelectedTextColor() : host.getForegroundForToken(token); Color bg = selected ? null : host.getBackgroundForToken(token); g.setFont(host.getFontForTokenType(token.getType())); FontMetrics fm = host.getFontMetricsForTokenType(token.getType()); for (int i=textOffs; i 0) { g.setColor(fg); g.drawChars(text, flushIndex, flushLen, (int)x,(int)y); flushLen = 0; } flushIndex = i + 1; x = nextX; break; default: flushLen += 1; break; } } nextX = x+fm.charsWidth(text, flushIndex,flushLen); java.awt.Rectangle r = host.getMatchRectangle(); if (flushLen>0 && nextX>=clipStart) { if (bg!=null) { paintBackground(x,y, nextX-x,fm.getHeight(), g, fm.getAscent(), host, bg); } if (token.length()==1 && r!=null && r.x==x) { ((RSyntaxTextAreaUI)host.getUI()).paintMatchedBracketImpl(g, host, r); } g.setColor(fg); g.drawChars(text, flushIndex, flushLen, (int)x,(int)y); } if (host.getUnderlineForToken(token)) { g.setColor(fg); int y2 = (int)(y+1); g.drawLine(origX,y2, (int)nextX,y2); } // Don't check if it's whitespace - some TokenMakers may return types // other than Token.WHITESPACE for spaces (such as Token.IDENTIFIER). // This also allows us to paint tab lines for MLC's. if (host.getPaintTabLines() && origX==host.getMargin().left) {// && isWhitespace()) { paintTabLines(token, origX, (int)y, (int)nextX, g, e, host); } return nextX; } /** * {@inheritDoc} */ public float paintSelected(Token token, Graphics2D g, float x, float y, RSyntaxTextArea host, TabExpander e, boolean useSTC) { return paintSelected(token, g, x, y, host, e, 0, useSTC); } /** * {@inheritDoc} */ public float paintSelected(Token token, Graphics2D g, float x, float y, RSyntaxTextArea host, TabExpander e, float clipStart, boolean useSTC) { return paintImpl(token, g, x, y, host, e, clipStart, true, useSTC); } /** * Paints dotted "tab" lines; that is, lines that show where your caret * would go to on the line if you hit "tab". This visual effect is usually * done in the leading whitespace token(s) of lines. * * @param token The token to render. * @param x The starting x-offset of this token. It is assumed that this * is the left margin of the text area (may be non-zero due to * insets), since tab lines are only painted for leading whitespace. * @param y The baseline where this token was painted. * @param endX The ending x-offset of this token. * @param g The graphics context. * @param e Used to expand tabs. * @param host The text area. */ protected void paintTabLines(Token token, int x, int y, int endX, Graphics2D g, TabExpander e, RSyntaxTextArea host) { // We allow tab lines to be painted in more than just Token.WHITESPACE, // i.e. for MLC's and Token.IDENTIFIERS (for TokenMakers that return // whitespace as identifiers for performance). But we only paint tab // lines for the leading whitespace in the token. So, if this isn't a // WHITESPACE token, figure out the leading whitespace's length. if (token.getType()!=Token.WHITESPACE) { int offs = 0; for (; offs0) { // Only paint on even y-pixels to prevent doubling up between lines y0++; } // TODO: Go to endX (inclusive) if this token is last token in the line Token next = token.getNextToken(); if (next==null || !next.isPaintable()) { endX++; } while (x0 { private int startOffs; private int endOffs; /** * Constructor. * * @param startOffs The starting offset in the document, inclusive. * @param endOffs The ending offset in the document, exclusive. * @throws IllegalArgumentException If endOffs is less than * startOffs, or either argument is less than zero. */ public DocumentRange(int startOffs, int endOffs) { set(startOffs, endOffs); } /** * Compares this document range to another. * * @param other Another document range. * @return How the two should be sorted relative to each other. */ public int compareTo(DocumentRange other) { if (other==null) { return 1; } int diff = startOffs - other.startOffs; if (diff!=0) { return diff; } return endOffs - other.endOffs; } /** * Returns whether this document range is equal to another one. * * @param other Another object, presumably a document range. * @return Whether other is also a document range, and equal * to this one. */ @Override public boolean equals(Object other) { if (other==this) { return true; } if (other instanceof DocumentRange) { return this.compareTo((DocumentRange)other)==0; } return false; } /** * Gets the end offset of the range. * * @return The end offset. * @see #getStartOffset() */ public int getEndOffset() { return endOffs; } /** * Gets the starting offset of the range. * * @return The starting offset. * @see #getEndOffset() */ public int getStartOffset() { return startOffs; } /** * Overridden simply as a best practice, since {@link #equals(Object)} is * overridden. * * @return The hash code for this object. */ @Override public int hashCode() { return startOffs + endOffs; } /** * Returns whether this document range has zero length. This can happen, * for example, with regex searches of forms like * "foo|", where the right-hand sub-expression matches empty * strings. * * @return Whether this document range has zero length. */ public boolean isZeroLength() { return startOffs == endOffs; } /** * Sets the document range. * * @param start The new start value, inclusive. * @param end The new end value, exclusive. * @throws IllegalArgumentException If end is less than * start, or either argument is less than zero. */ public void set(int start, int end) { if (start<0 || end<0) { throw new IllegalArgumentException ( "start and end must be >= 0 (" + start + "-" + end + ")"); } if (end * * ErrorStrips display ParserNotices from * {@link Parser}s. Currently, the only way to get lines flagged in this * component is to register a Parser on an RSyntaxTextArea and * return ParserNotices for each line to display an icon for. * The severity of each notice must be at least the threshold set by * {@link #setLevelThreshold(org.fife.ui.rsyntaxtextarea.parser.ParserNotice.Level)} * to be displayed in this error strip. The default threshold is * {@link org.fife.ui.rsyntaxtextarea.parser.ParserNotice.Level#WARNING}.

* * An ErrorStrip can be added to a UI like so: *

 * textArea = createTextArea();
 * textArea.addParser(new MyParser(textArea)); // Identifies lines to display
 * scrollPane = new RTextScrollPane(textArea, true);
 * ErrorStrip es = new ErrorStrip(textArea);
 * JPanel temp = new JPanel(new BorderLayout());
 * temp.add(scrollPane);
 * temp.add(es, BorderLayout.LINE_END);
 * 
* * @author Robert Futrell * @version 0.5 */ /* * Possible improvements: * 1. Handle marked occurrence changes & "mark all" changes separately from * parser changes. For each property change, call a method that removes * the notices being reloaded from the Markers (removing any Markers that * are now "empty"). */ public class ErrorStrip extends JPanel { /** * The text area. */ private RSyntaxTextArea textArea; /** * Listens for events in this component. */ private Listener listener; /** * Whether "marked occurrences" in the text area should be shown in this * error strip. */ private boolean showMarkedOccurrences; /** * Whether markers for "mark all" highlights should be shown in this * error strip. */ private boolean showMarkAll; /** * Mapping of colors to brighter colors. This is kept to prevent * unnecessary creation of the same Colors over and over. */ private Map brighterColors; /** * Only notices of this severity (or worse) will be displayed in this * error strip. */ private ParserNotice.Level levelThreshold; /** * Whether the caret marker's location should be rendered. */ private boolean followCaret; /** * The color to use for the caret marker. */ private Color caretMarkerColor; /** * Where we paint the caret marker. */ private int caretLineY; /** * The last location of the caret marker. */ private int lastLineY; /** * The preferred width of this component. */ private static final int PREFERRED_WIDTH = 14; private static final String MSG = "org.fife.ui.rsyntaxtextarea.ErrorStrip"; private static final ResourceBundle msg = ResourceBundle.getBundle(MSG); /** * Constructor. * * @param textArea The text area we are examining. */ public ErrorStrip(RSyntaxTextArea textArea) { this.textArea = textArea; listener = new Listener(); ToolTipManager.sharedInstance().registerComponent(this); setLayout(null); // Manually layout Markers as they can overlap addMouseListener(listener); setShowMarkedOccurrences(true); setShowMarkAll(true); setLevelThreshold(ParserNotice.Level.WARNING); setFollowCaret(true); setCaretMarkerColor(Color.BLACK); } /** * Overridden so we only start listening for parser notices when this * component (and presumably the text area) are visible. */ @Override public void addNotify() { super.addNotify(); textArea.addCaretListener(listener); textArea.addPropertyChangeListener( RSyntaxTextArea.PARSER_NOTICES_PROPERTY, listener); textArea.addPropertyChangeListener( RSyntaxTextArea.MARK_OCCURRENCES_PROPERTY, listener); textArea.addPropertyChangeListener( RSyntaxTextArea.MARKED_OCCURRENCES_CHANGED_PROPERTY, listener); textArea.addPropertyChangeListener( RSyntaxTextArea.MARK_ALL_OCCURRENCES_CHANGED_PROPERTY, listener); refreshMarkers(); } /** * Manually manages layout since this component uses no layout manager. */ @Override public void doLayout() { for (int i=0; i(5); // Usually small } Color brighter = brighterColors.get(c); if (brighter==null) { // Don't use c.brighter() as it doesn't work well for blue, and // also doesn't return something brighter "enough." int r = possiblyBrighter(c.getRed()); int g = possiblyBrighter(c.getGreen()); int b = possiblyBrighter(c.getBlue()); brighter = new Color(r, g, b); brighterColors.put(c, brighter); } return brighter; } /** * returns the color to use when painting the caret marker. * * @return The caret marker color. * @see #setCaretMarkerColor(Color) */ public Color getCaretMarkerColor() { return caretMarkerColor; } /** * Returns whether the caret's position should be drawn. * * @return Whether the caret's position should be drawn. * @see #setFollowCaret(boolean) */ public boolean getFollowCaret() { return followCaret; } /** * {@inheritDoc} */ @Override public Dimension getPreferredSize() { int height = textArea.getPreferredScrollableViewportSize().height; return new Dimension(PREFERRED_WIDTH, height); } /** * Returns the minimum severity a parser notice must be for it to be * displayed in this error strip. This will be one of the constants * defined in the ParserNotice class. * * @return The minimum severity. * @see #setLevelThreshold(org.fife.ui.rsyntaxtextarea.parser.ParserNotice.Level) */ public ParserNotice.Level getLevelThreshold() { return levelThreshold; } /** * Returns whether "mark all" highlights are shown in this error strip. * * @return Whether markers are shown for "mark all" highlights. * @see #setShowMarkAll(boolean) */ public boolean getShowMarkAll() { return showMarkAll; } /** * Returns whether marked occurrences are shown in this error strip. * * @return Whether marked occurrences are shown. * @see #setShowMarkedOccurrences(boolean) */ public boolean getShowMarkedOccurrences() { return showMarkedOccurrences; } /** * {@inheritDoc} */ @Override public String getToolTipText(MouseEvent e) { String text = null; int line = yToLine(e.getY()); if (line>-1) { text = msg.getString("Line"); text = MessageFormat.format(text, Integer.valueOf(line+1)); } return text; } /** * Returns the y-offset in this component corresponding to a line in the * text component. * * @param line The line. * @return The y-offset. * @see #yToLine(int) */ private int lineToY(int line) { int h = textArea.getVisibleRect().height; float lineCount = textArea.getLineCount(); return (int)(((line-1)/(lineCount-1)) * (h-2)); } /** * Overridden to (possibly) draw the caret's position. * * @param g The graphics context. */ @Override protected void paintComponent(Graphics g) { super.paintComponent(g); if (caretLineY>-1) { g.setColor(getCaretMarkerColor()); g.fillRect(0, caretLineY, getWidth(), 2); } } /** * Returns a possibly brighter component for a color. * * @param i An RGB component for a color (0-255). * @return A possibly brighter value for the component. */ private static final int possiblyBrighter(int i) { if (i<255) { i += (int)((255-i)*0.8f); } return i; } /** * Refreshes the markers displayed in this error strip. */ private void refreshMarkers() { removeAll(); // listener is removed in Marker.removeNotify() Map markerMap = new HashMap(); List notices = textArea.getParserNotices(); for (ParserNotice notice : notices) { if (notice.getLevel().isEqualToOrWorseThan(levelThreshold) || (notice instanceof TaskNotice)) { Integer key = Integer.valueOf(notice.getLine()); Marker m = markerMap.get(key); if (m==null) { m = new Marker(notice); m.addMouseListener(listener); markerMap.put(key, m); add(m); } else { m.addNotice(notice); } } } if (getShowMarkedOccurrences() && textArea.getMarkOccurrences()) { List occurrences = textArea.getMarkedOccurrences(); addMarkersForRanges(occurrences, markerMap, textArea.getMarkOccurrencesColor()); } if (getShowMarkAll() /*&& textArea.getMarkAll()*/) { Color markAllColor = textArea.getMarkAllHighlightColor(); List ranges = textArea.getMarkAllHighlightRanges(); addMarkersForRanges(ranges, markerMap, markAllColor); } revalidate(); repaint(); } /** * Adds markers for a list of ranges in the document. * * @param ranges The list of ranges in the document. * @param markerMap A mapping from line number to Marker. * @param color The color to use for the markers. */ private void addMarkersForRanges(List ranges, Map markerMap, Color color) { for (DocumentRange range : ranges) { int line = 0; try { line = textArea.getLineOfOffset(range.getStartOffset()); } catch (BadLocationException ble) { // Never happens continue; } ParserNotice notice = new MarkedOccurrenceNotice(range, color); Integer key = Integer.valueOf(line); Marker m = markerMap.get(key); if (m==null) { m = new Marker(notice); m.addMouseListener(listener); markerMap.put(key, m); add(m); } else { if (!m.containsMarkedOccurence()) { m.addNotice(notice); } } } } /** * {@inheritDoc} */ @Override public void removeNotify() { super.removeNotify(); textArea.removeCaretListener(listener); textArea.removePropertyChangeListener( RSyntaxTextArea.PARSER_NOTICES_PROPERTY, listener); textArea.removePropertyChangeListener( RSyntaxTextArea.MARK_OCCURRENCES_PROPERTY, listener); textArea.removePropertyChangeListener( RSyntaxTextArea.MARKED_OCCURRENCES_CHANGED_PROPERTY, listener); textArea.removePropertyChangeListener( RSyntaxTextArea.MARK_ALL_OCCURRENCES_CHANGED_PROPERTY, listener); } /** * Sets the color to use when painting the caret marker. * * @param color The new caret marker color. * @see #getCaretMarkerColor() */ public void setCaretMarkerColor(Color color) { if (color!=null) { caretMarkerColor = color; listener.caretUpdate(null); // Force repaint } } /** * Toggles whether the caret's current location should be drawn. * * @param follow Whether the caret's current location should be followed. * @see #getFollowCaret() */ public void setFollowCaret(boolean follow) { if (followCaret!=follow) { if (followCaret) { repaint(0,caretLineY, getWidth(),2); // Erase } caretLineY = -1; lastLineY = -1; followCaret = follow; listener.caretUpdate(null); // Possibly repaint } } /** * Sets the minimum severity a parser notice must be for it to be displayed * in this error strip. This should be one of the constants defined in * the ParserNotice class. The default value is * {@link org.fife.ui.rsyntaxtextarea.parser.ParserNotice.Level#WARNING}. * * @param level The new severity threshold. * @see #getLevelThreshold() * @see ParserNotice */ public void setLevelThreshold(ParserNotice.Level level) { levelThreshold = level; if (isDisplayable()) { refreshMarkers(); } } /** * Sets whether "mark all" highlights are shown in this error strip. * * @param show Whether to show markers for "mark all" highlights. * @see #getShowMarkAll() */ public void setShowMarkAll(boolean show) { if (show!=showMarkAll) { showMarkAll = show; if (isDisplayable()) { // Skip this when we're first created refreshMarkers(); } } } /** * Sets whether marked occurrences are shown in this error strip. * * @param show Whether to show marked occurrences. * @see #getShowMarkedOccurrences() */ public void setShowMarkedOccurrences(boolean show) { if (show!=showMarkedOccurrences) { showMarkedOccurrences = show; if (isDisplayable()) { // Skip this when we're first created refreshMarkers(); } } } /** * Returns the line in the text area corresponding to a y-offset in this * component. * * @param y The y-offset. * @return The line. * @see #lineToY(int) */ private final int yToLine(int y) { int line = -1; int h = textArea.getVisibleRect().height; if (y-1) { try { int offs = textArea.getLineStartOffset(line); textArea.setCaretPosition(offs); } catch (BadLocationException ble) { // Never happens UIManager.getLookAndFeel().provideErrorFeedback(textArea); } } } public void propertyChange(PropertyChangeEvent e) { String propName = e.getPropertyName(); // If they change whether marked occurrences are visible in editor if (RSyntaxTextArea.MARK_OCCURRENCES_PROPERTY.equals(propName)) { if (getShowMarkedOccurrences()) { refreshMarkers(); } } // If parser notices changed. // TODO: Don't update "mark all/occurrences" markers. else if (RSyntaxTextArea.PARSER_NOTICES_PROPERTY.equals(propName)) { refreshMarkers(); } // If marked occurrences changed. // TODO: Only update "mark occurrences" markers, not all of them. else if (RSyntaxTextArea.MARKED_OCCURRENCES_CHANGED_PROPERTY. equals(propName)) { if (getShowMarkedOccurrences()) { refreshMarkers(); } } // If "mark all" occurrences changed. // TODO: Only update "mark all" markers, not all of them. else if (RTextArea.MARK_ALL_OCCURRENCES_CHANGED_PROPERTY. equals(propName)) { if (getShowMarkAll()) { refreshMarkers(); } } } } /** * A notice that wraps a "marked occurrence." */ private class MarkedOccurrenceNotice implements ParserNotice { private DocumentRange range; private Color color; public MarkedOccurrenceNotice(DocumentRange range, Color color) { this.range = range; this.color = color; } public int compareTo(ParserNotice other) { return 0; // Value doesn't matter } public boolean containsPosition(int pos) { return pos>=range.getStartOffset() && pos notices; public Marker(ParserNotice notice) { notices = new ArrayList(1); // Usually just 1 addNotice(notice); setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); setSize(getPreferredSize()); ToolTipManager.sharedInstance().registerComponent(this); } public void addNotice(ParserNotice notice) { notices.add(notice); } public boolean containsMarkedOccurence() { boolean result = false; for (int i=0; i 1 StringBuilder sb = new StringBuilder(""); sb.append(msg.getString("MultipleMarkers")); sb.append("
"); for (int i=0; i"); } text = sb.toString(); } return text; } protected void mouseClicked(MouseEvent e) { ParserNotice pn = notices.get(0); int offs = pn.getOffset(); int len = pn.getLength(); if (offs>-1 && len>-1) { // These values are optional textArea.setSelectionStart(offs); textArea.setSelectionEnd(offs+len); } else { int line = pn.getLine(); try { offs = textArea.getLineStartOffset(line); textArea.setCaretPosition(offs); } catch (BadLocationException ble) { // Never happens UIManager.getLookAndFeel().provideErrorFeedback(textArea); } } } @Override protected void paintComponent(Graphics g) { // TODO: Give "priorities" and always pick color of a notice with // highest priority (e.g. parsing errors will usually be red). Color borderColor = getColor(); if (borderColor==null) { borderColor = Color.DARK_GRAY; } Color fillColor = getBrighterColor(borderColor); int w = getWidth(); int h = getHeight(); g.setColor(fillColor); g.fillRect(0,0, w,h); g.setColor(borderColor); g.drawRect(0,0, w-1,h-1); } @Override public void removeNotify() { super.removeNotify(); ToolTipManager.sharedInstance().unregisterComponent(this); removeMouseListener(listener); } public void updateLocation() { int line = notices.get(0).getLine(); int y = lineToY(line); setLocation(2, y); } } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/FileFileLocation.java000066400000000000000000000041621257417003700306370ustar00rootroot00000000000000/* * 11/13/2008 * * FileFileLocation.java - The location of a local file. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.IOException; import java.io.OutputStream; /** * The location of a local file. * * @author Robert Futrell * @version 1.0 */ class FileFileLocation extends FileLocation { /** * The file. This may or may not actually exist. */ private File file; /** * Constructor. * * @param file The local file. */ public FileFileLocation(File file) { try { // Useful on Windows and OS X. this.file = file.getCanonicalFile(); } catch (IOException ioe) { this.file = file; } } /** * {@inheritDoc} */ @Override protected long getActualLastModified() { return file.lastModified(); } /** * Returns the full path to the file. * * @return The full path to the file. * @see #getFileName() */ @Override public String getFileFullPath() { return file.getAbsolutePath(); } /** * {@inheritDoc} */ @Override public String getFileName() { return file.getName(); } /** * {@inheritDoc} */ @Override protected InputStream getInputStream() throws IOException { return new FileInputStream(file); } /** * {@inheritDoc} */ @Override protected OutputStream getOutputStream() throws IOException { return new FileOutputStream(file); } /** * Always returns true. * * @return true always. * @see #isLocalAndExists() */ @Override public boolean isLocal() { return true; } /** * Since file locations of this type are guaranteed to be local, this * method returns whether the file exists. * * @return Whether this local file actually exists. * @see #isLocal() */ @Override public boolean isLocalAndExists() { return file.exists(); } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/FileLocation.java000066400000000000000000000073051257417003700300410ustar00rootroot00000000000000/* * 11/13/2008 * * FileLocation.java - Holds the location of a local or remote file. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.io.File; import java.io.InputStream; import java.io.IOException; import java.io.OutputStream; import java.net.MalformedURLException; import java.net.URL; /** * Holds the location of a local or remote file. This provides a common way * to read, write, and check properties of both local and remote files. * * @author Robert Futrell * @version 1.0 */ public abstract class FileLocation { /** * Creates a {@link FileLocation} instance for the specified local file. * * @param fileFullPath The full path to a local file. * @return The file's location. */ public static FileLocation create(String fileFullPath) { if (fileFullPath.startsWith("http://") || fileFullPath.startsWith("https://") || fileFullPath.startsWith("ftp://")) { try { return new URLFileLocation(new URL(fileFullPath)); } catch (MalformedURLException mue) { throw new IllegalArgumentException( "Not a valid URL: " + fileFullPath, mue); } } return new FileFileLocation(new File(fileFullPath)); } /** * Creates a {@link FileLocation} instance for the specified local file. * * @param file A local file. * @return The file's location. */ public static FileLocation create(File file) { return new FileFileLocation(file); } /** * Creates a {@link FileLocation} instance for the specified file. * * @param url The URL of a file. * @return The file's location. */ public static FileLocation create(URL url) { if ("file".equalsIgnoreCase(url.getProtocol())) { return new FileFileLocation(new File(url.getPath())); } return new URLFileLocation(url); } /** * Returns the last time this file was modified, or * {@link TextEditorPane#LAST_MODIFIED_UNKNOWN} if this value cannot be * computed (such as for a remote file). * * @return The last time this file was modified. */ protected abstract long getActualLastModified(); /** * Returns the full path to the file. This will be stripped of * sensitive information such as passwords for remote files. * * @return The full path to the file. * @see #getFileName() */ public abstract String getFileFullPath(); /** * Returns the name of the file. * * @return The name of the file. * @see #getFileFullPath() */ public abstract String getFileName(); /** * Opens an input stream for reading from this file. * * @return The input stream. * @throws IOException If the file does not exist, or some other IO error * occurs. */ protected abstract InputStream getInputStream() throws IOException; /** * Opens an output stream for writing this file. * * @return An output stream. * @throws IOException If an IO error occurs. */ protected abstract OutputStream getOutputStream() throws IOException; /** * Returns whether this file location is a local file. * * @return Whether this is a local file. * @see #isLocalAndExists() */ public abstract boolean isLocal(); /** * Returns whether this file location is a local file that already * exists. * * @return Whether this file is local and actually exists. * @see #isLocal() */ public abstract boolean isLocalAndExists(); /** * Returns whether this file location is a remote location. * * @return Whether this is a remote file location. */ public boolean isRemote() { return !isLocal(); } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/FoldingAwareIconRowHeader.java000066400000000000000000000167371257417003700324560ustar00rootroot00000000000000/* * 03/07/2012 * * FoldingAwareIconRowHeader - Icon row header that paints itself correctly * even when code folding is enabled. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.awt.Color; import java.awt.Graphics; import java.awt.Point; import javax.swing.Icon; import javax.swing.text.BadLocationException; import javax.swing.text.Document; import javax.swing.text.Element; import org.fife.ui.rsyntaxtextarea.folding.FoldManager; import org.fife.ui.rtextarea.GutterIconInfo; import org.fife.ui.rtextarea.IconRowHeader; /** * A row header component that takes code folding into account when painting * itself. * * @author Robert Futrell * @version 1.0 */ public class FoldingAwareIconRowHeader extends IconRowHeader { /** * Constructor. * * @param textArea The parent text area. */ public FoldingAwareIconRowHeader(RSyntaxTextArea textArea) { super(textArea); } /** * {@inheritDoc} */ @Override protected void paintComponent(Graphics g) { // When line wrap is not enabled, take the faster code path. if (textArea==null) { return; } RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; FoldManager fm = rsta.getFoldManager(); if (!fm.isCodeFoldingSupportedAndEnabled()) { super.paintComponent(g); return; } visibleRect = g.getClipBounds(visibleRect); if (visibleRect==null) { // ??? visibleRect = getVisibleRect(); } //System.out.println("IconRowHeader repainting: " + visibleRect); if (visibleRect==null) { return; } paintBackgroundImpl(g, visibleRect); if (textArea.getLineWrap()) { paintComponentWrapped(g); return; } Document doc = textArea.getDocument(); Element root = doc.getDefaultRootElement(); textAreaInsets = textArea.getInsets(textAreaInsets); if (visibleRect.y-1 && activeLineRangeEnd>-1) { Color activeLineRangeColor = getActiveLineRangeColor(); g.setColor(activeLineRangeColor); try { int realY1 = rsta.yForLine(activeLineRangeStart); if (realY1>-1) { // Not in a collapsed fold... int y1 = realY1;//Math.max(y, realY1); int y2 = rsta.yForLine(activeLineRangeEnd); if (y2==-1) { // In a collapsed fold y2 = y1; } y2 += cellHeight - 1; if (y2visibleRect.y+visibleRect.height) { //System.out.println("... nothing to paint, bailing..."); return; } y1 = Math.max(y, realY1); y2 = Math.min(y2, visibleRect.y+visibleRect.height); //System.out.println(y1 + "... " + y2 + "; " + realY1 + ", " + visibleRect); int j = y1; while (j<=y2) { int yEnd = Math.min(y2, j+getWidth()); int xEnd = yEnd-j; g.drawLine(0,j, xEnd,yEnd); j += 2; } int i = 2; while (i=y && realY1=y && y2=0; i--) { // Last to first GutterIconInfo ti = getTrackingIcon(i); int offs = ti.getMarkedOffset(); if (offs>=0 && offs<=doc.getLength()) { int line = root.getElementIndex(offs); if (line<=lastLine && line>=topLine) { try { Icon icon = ti.getIcon(); if (icon!=null) { int lineY = rsta.yForLine(line); if (lineY>=y && lineY<=visibleRect.y+visibleRect.height) { int y2 = lineY + (cellHeight-icon.getIconHeight())/2; icon.paintIcon(this, g, 0, y2); lastLine = line-1; // Paint only 1 icon per line } } } catch (BadLocationException ble) { ble.printStackTrace(); // Never happens } } else if (line=0; i--) { // Last to first GutterIconInfo ti = getTrackingIcon(i); Icon icon = ti.getIcon(); if (icon!=null) { int iconH = icon.getIconHeight(); int offs = ti.getMarkedOffset(); if (offs>=0 && offs<=doc.getLength()) { int line = root.getElementIndex(offs); if (line<=lastLine && line>=topLine) { try { int lineY = rsta.yForLine(line); if (lineY<=bottomY && (lineY+iconH>=topY)) { int y2 = lineY + (cellHeight-iconH)/2; ti.getIcon().paintIcon(this, g, 0, y2); lastLine = line-1; // Paint only 1 icon per line } } catch (BadLocationException ble) { ble.printStackTrace(); // Never happens } } else if (line' }; private static final Set TAGS_REQUIRING_CLOSING = getRequiredClosingTags(); public static final Set getRequiredClosingTags() { final String[] tags = { "html", "head", "title", "style", "script", "noscript", "body", "section", "nav", "article", "aside", "h1", "h2", "h3", "h4", "h5", "h6", "header", "footer", "address", "pre", "dialog", "blockquote", "ol", "ul", "dl", "a", "q", "cite", "em", "strong", "small", "mark", "dfn", "abbr", "time", "progress", "meter", "code", "var", "samp", "kbd", "sub", "sup", "span", "i", "b", "bdo", "ruby", "rt", "rp", "ins", "del", "figure", "iframe", "object", "video", "audio", "canvas", "map", "table", "caption", "form", "fieldset", "label", "button", "select", "datalist", "textarea", "output", "details", "bb", "menu", "legend", "div", // Obsolete elements "acronym", "applet", "big", "blink", "center", "dir", "font", "frame", "frameset", "isindex", "listing", "marquee", "nobr", "noembed", "noframes", "plaintext", "s", "spacer", "strike", "tt", "u", "xmp", }; return new HashSet(Arrays.asList(tags)); } /** * If the caret is inside of a tag, this method returns the token * representing the tag name; otherwise, null is returned.

* * Currently, this method only checks for tag names on the same line as * the caret, for simplicity. In the future it could check prior lines * until the tag name is found. * * @param textArea The text area. * @param occurrenceMarker The occurrence marker. * @return The token to mark occurrences of. Note that, if the * specified occurrence marker identifies tokens other than * tag names, these other element types may be returned. */ public static final Token getTagNameTokenForCaretOffset( RSyntaxTextArea textArea, OccurrenceMarker occurrenceMarker) { // Get the tag name token. // For now, we only check for tags on the current line, for simplicity. int dot = textArea.getCaretPosition(); Token t = textArea.getTokenListForLine(textArea.getCaretLineNumber()); Token toMark = null; while (t!=null && t.isPaintable()) { if (t.getType()==Token.MARKUP_TAG_NAME) { toMark = t; } // Check for the token containing the caret before checking // if it's the close token. if (t.getEndOffset()==dot || t.containsPosition(dot)) { // Some languages, like PHP, mark functions/variables (PHP, // JavaScirpt) as well as HTML tags. if (occurrenceMarker.isValidType(textArea, t) && t.getType()!=Token.MARKUP_TAG_NAME) { return t; } if (t.containsPosition(dot)) { break; } } if (t.getType()==Token.MARKUP_TAG_DELIMITER) { if (t.isSingleChar('>') || t.is(TAG_SELF_CLOSE)) { toMark = null; } } t = t.getNextToken(); } return toMark; } /** * {@inheritDoc} */ public Token getTokenToMark(RSyntaxTextArea textArea) { return getTagNameTokenForCaretOffset(textArea, this); } /** * {@inheritDoc} */ public boolean isValidType(RSyntaxTextArea textArea, Token t) { return textArea.getMarkOccurrencesOfTokenType(t.getType()); } /** * {@inheritDoc} */ public void markOccurrences(RSyntaxDocument doc, Token t, RSyntaxTextAreaHighlighter h, SmartHighlightPainter p) { if (t.getType()!=Token.MARKUP_TAG_NAME) { DefaultOccurrenceMarker.markOccurrencesOfToken(doc, t, h, p); return; } String lexemeStr = t.getLexeme(); char[] lexeme = lexemeStr.toCharArray(); lexemeStr = lexemeStr.toLowerCase(); int tokenOffs = t.getOffset(); Element root = doc.getDefaultRootElement(); int lineCount = root.getElementCount(); int curLine = root.getElementIndex(t.getOffset()); int depth = 0; // For now, we only check for tags on the current line, for // simplicity. Tags spanning multiple lines aren't common anyway. boolean found = false; boolean forward = true; t = doc.getTokenListForLine(curLine); while (t!=null && t.isPaintable()) { if (t.getType()==Token.MARKUP_TAG_DELIMITER) { if (t.isSingleChar('<') && t.getOffset()+1==tokenOffs) { // Don't try to match a tag that is optionally closed (or // closing is forbidden entirely). if (TAGS_REQUIRING_CLOSING.contains(lexemeStr)) { found = true; } break; } else if (t.is(CLOSE_TAG_START) && t.getOffset()+2==tokenOffs) { // Searching backward, we assume we can find the opening // tag. Don't really care if it's valid or not. found = true; forward = false; break; } } t = t.getNextToken(); } if (!found) { return; } if (forward) { t = t.getNextToken().getNextToken(); do { while (t!=null && t.isPaintable()) { if (t.getType()==Token.MARKUP_TAG_DELIMITER) { if (t.is(CLOSE_TAG_START)) { Token match = t.getNextToken(); if (match!=null && match.is(lexeme)) { if (depth>0) { depth--; } else { try { int end = match.getOffset() + match.length(); h.addMarkedOccurrenceHighlight(match.getOffset(), end, p); end = tokenOffs + match.length(); h.addMarkedOccurrenceHighlight(tokenOffs, end, p); } catch (BadLocationException ble) { ble.printStackTrace(); // Never happens } return; // We're done! } } } else if (t.isSingleChar('<')) { t = t.getNextToken(); if (t!=null && t.is(lexeme)) { depth++; } } } t = t==null ? null : t.getNextToken(); } if (++curLine openCloses = new ArrayList(); boolean inPossibleMatch = false; t = doc.getTokenListForLine(curLine); final int endBefore = tokenOffs - 2; // Stop before "')) { inPossibleMatch = false; } else if (inPossibleMatch && t.is(TAG_SELF_CLOSE)) { openCloses.remove(openCloses.size()-1); inPossibleMatch = false; } else if (t.is(CLOSE_TAG_START)) { Token next = t.getNextToken(); if (next!=null) { // Invalid XML might not have a match if (next.is(lexeme)) { openCloses.add(new Entry(false, next)); } t = next; } } } t = t.getNextToken(); } for (int i=openCloses.size()-1; i>=0; i--) { Entry entry = openCloses.get(i); depth += entry.open ? -1 : 1; if (depth==-1) { try { Token match = entry.t; int end = match.getOffset() + match.length(); h.addMarkedOccurrenceHighlight(match.getOffset(), end, p); end = tokenOffs + match.length(); h.addMarkedOccurrenceHighlight(tokenOffs, end, p); } catch (BadLocationException ble) { ble.printStackTrace(); // Never happens } openCloses.clear(); return; } } openCloses.clear(); if (--curLine>=0) { t = doc.getTokenListForLine(curLine); } } while (curLine>=0); } } /** * Used internally when searching backward for a matching "open" tag. */ private static class Entry { public boolean open; public Token t; public Entry(boolean open, Token t) { this.open = open; this.t = t; } } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/LinkGenerator.java000066400000000000000000000034311257417003700302310ustar00rootroot00000000000000/* * 02/16/2012 * * Copyright (C) 2013 Robert Futrell * robert_futrell at users.sourceforge.net * http://fifesoft.com/rsyntaxtextarea * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; /** * Generates hyperlinks in a document. If one of these is installed on an * RSyntaxTextArea it is queried when the mouse is moved and * hyperlinks are enabled. If the user is not hovering over a "real" hyperlink * (e.g. "http://www.google.com"), the link generator is asked if a text region * at the mouse position should be considered a hyperlink. If so, a result * object is returned, describing exactly what region of text is the link, and * where it goes to.

* * This interface is typically used by applications providing advanced support * for programming languages, such as IDEs. For example, an implementation of * this class could identify the token under the mouse position as a "variable," * and the hyperlink returned would select the variable's declaration in the * document. * * @author Robert Futrell * @version 1.0 */ public interface LinkGenerator { /** * If a region of text under the mouse position should be considered a * hyperlink, a result object is returned. This object describes what * region of text is the link, and what action to perform if the link is * clicked. * * @param textArea The text component. * @param offs The offset in the document under the mouse position. * @return The link information, or null if no link is at the * specified offset. */ public LinkGeneratorResult isLinkAtOffset(RSyntaxTextArea textArea, int offs); }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/LinkGeneratorResult.java000066400000000000000000000030441257417003700314300ustar00rootroot00000000000000/* * 02/16/2012 * * Copyright (C) 2013 Robert Futrell * robert_futrell at users.sourceforge.net * http://fifesoft.com/rsyntaxtextarea * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import javax.swing.event.HyperlinkEvent; /** * A result object from a {@link LinkGenerator}. Implementations of this class * specify what action to execute when the user clicks on the "link" specified * by the LinkGenerator. Typically, this will do something like * select another region of text in the document (the declaration of the * variable at the mouse position), or open another file in the parent * application, etc. * * @author Robert Futrell * @version 1.0 * @see SelectRegionLinkGeneratorResult */ public interface LinkGeneratorResult { /** * Executes the action associated with this object. If the result is a * URL to open, a standard hyperlink event can be returned. Alternatively, * null can be returned and the action performed in this * method itself. * * @return The hyperlink event to broadcast from the text area, or * null if the action's behavior occurs in this method * directly. */ public HyperlinkEvent execute(); /** * Returns the starting offset of the link specified by the parent * LinkGenerator. * * @return The offset. */ public int getSourceOffset(); }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/MarkOccurrencesSupport.java000066400000000000000000000152531257417003700321550ustar00rootroot00000000000000/* * 01/06/2009 * * MarkOccurrencesSupport.java - Handles marking all occurrences of the * currently selected identifier in a text area. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Timer; import javax.swing.event.CaretEvent; import javax.swing.event.CaretListener; import javax.swing.text.Caret; import org.fife.ui.rtextarea.SmartHighlightPainter; /** * Marks all occurrences of the token at the current caret position, if it is * an identifier. * * @author Robert Futrell * @version 1.0 * @see OccurrenceMarker */ class MarkOccurrencesSupport implements CaretListener, ActionListener { private RSyntaxTextArea textArea; private Timer timer; private SmartHighlightPainter p; /** * The default color used to mark occurrences. */ public static final Color DEFAULT_COLOR = new Color(224, 224, 224); /** * The default delay. */ private static final int DEFAULT_DELAY_MS = 1000; /** * Constructor. Creates a listener with a 1 second delay. */ public MarkOccurrencesSupport() { this(DEFAULT_DELAY_MS); } /** * Constructor. * * @param delay The delay between when the caret last moves and when the * text should be scanned for matching occurrences. This should * be in milliseconds. */ public MarkOccurrencesSupport(int delay) { this(delay, DEFAULT_COLOR); } /** * Constructor. * * @param delay The delay between when the caret last moves and when the * text should be scanned for matching occurrences. This should * be in milliseconds. * @param color The color to use to mark the occurrences. This cannot be * null. */ public MarkOccurrencesSupport(int delay, Color color) { timer = new Timer(delay, this); timer.setRepeats(false); p = new SmartHighlightPainter(); setColor(color); } /** * Called after the caret has been moved and a fixed time delay has * elapsed. This locates and highlights all occurrences of the identifier * at the caret position, if any.

* * Callers should not call this method directly, but should rather prefer * {@link #doMarkOccurrences()} to mark occurrences. * * @param e The event. * @see #doMarkOccurrences() */ public void actionPerformed(ActionEvent e) { // Don't do anything if they are selecting text. Caret c = textArea.getCaret(); if (c.getDot()!=c.getMark()) { return; } RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); OccurrenceMarker occurrenceMarker = doc.getOccurrenceMarker(); boolean occurrencesChanged = false; if (occurrenceMarker!=null) { doc.readLock(); try { Token t = occurrenceMarker.getTokenToMark(textArea); if (t!=null && occurrenceMarker.isValidType(textArea, t) && !RSyntaxUtilities.isNonWordChar(t)) { clear(); RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter) textArea.getHighlighter(); occurrenceMarker.markOccurrences(doc, t, h, p); //textArea.repaint(); // TODO: Do a textArea.repaint() instead of repainting each // marker as it's added if count is huge occurrencesChanged = true; } } finally { doc.readUnlock(); //time = System.currentTimeMillis() - time; //System.out.println("MarkOccurrencesSupport took: " + time + " ms"); } } if (occurrencesChanged) { textArea.fireMarkedOccurrencesChanged(); } } /** * Called when the caret moves in the text area. * * @param e The event. */ public void caretUpdate(CaretEvent e) { timer.restart(); } /** * Removes all highlights added to the text area by this listener. */ void clear() { if (textArea!=null) { RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter) textArea.getHighlighter(); h.clearMarkOccurrencesHighlights(); } } /** * Immediately marks all occurrences of the token at the current caret * position. */ public void doMarkOccurrences() { timer.stop(); actionPerformed(null); } /** * Returns the color being used to mark occurrences. * * @return The color being used. * @see #setColor(Color) */ public Color getColor() { return (Color)p.getPaint(); } /** * Returns the delay, in milliseconds. * * @return The delay. * @see #setDelay(int) */ public int getDelay() { return timer.getDelay(); } /** * Returns whether a border is painted around marked occurrences. * * @return Whether a border is painted. * @see #setPaintBorder(boolean) * @see #getColor() */ public boolean getPaintBorder() { return p.getPaintBorder(); } /** * Installs this listener on a text area. If it is already installed on * another text area, it is uninstalled first. * * @param textArea The text area to install on. */ public void install(RSyntaxTextArea textArea) { if (this.textArea!=null) { uninstall(); } this.textArea = textArea; textArea.addCaretListener(this); if (textArea.getMarkOccurrencesColor()!=null) { setColor(textArea.getMarkOccurrencesColor()); } } /** * Sets the color to use when marking occurrences. * * @param color The color to use. * @see #getColor() * @see #setPaintBorder(boolean) */ public void setColor(Color color) { p.setPaint(color); if (textArea!=null) { clear(); caretUpdate(null); // Force a highlight repaint. } } /** * Sets the delay between the last caret position change and when the * text is scanned for matching identifiers. A delay is needed to prevent * repeated scanning while the user is typing. * * @param delay The new delay. * @see #getDelay() */ public void setDelay(int delay) { timer.setDelay(delay); } /** * Toggles whether a border is painted around marked highlights. * * @param paint Whether to paint a border. * @see #getPaintBorder() * @see #setColor(Color) */ public void setPaintBorder(boolean paint) { if (paint!=p.getPaintBorder()) { p.setPaintBorder(paint); if (textArea!=null) { textArea.repaint(); } } } /** * Uninstalls this listener from the current text area. Does nothing if * it not currently installed on any text area. * * @see #install(RSyntaxTextArea) */ public void uninstall() { if (textArea!=null) { clear(); textArea.removeCaretListener(this); } } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/OccurrenceMarker.java000066400000000000000000000036231257417003700307220ustar00rootroot00000000000000/* * 03/09/2013 * * OccurrenceMarker - Marks occurrences of the current token. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import org.fife.ui.rtextarea.SmartHighlightPainter; /** * An OccurrenceMarker is called when the caret stops moving after * a short period. If the current {@link TokenMaker} returns an instance of * this class, it is told to mark all occurrences of the identifier at the * caret position. * * @author Robert Futrell * @version 1.0 */ public interface OccurrenceMarker { /** * Returns the token to mark occurrences, of, provided it matches the * criteria put forth by {@link #isValidType(RSyntaxTextArea, Token)}. * For most languages, this method should return the token at the caret * position. * * @param textArea The text area. * @return The token to (possibly) mark occurrences of, or * null if none. */ public Token getTokenToMark(RSyntaxTextArea textArea); /** * Returns whether the specified token is a type that we can do a * "mark occurrences" of. Typically, this will delegate to * {@link RSyntaxTextArea#getMarkOccurrencesOfTokenType(int)}. * * @param textArea The text area. * @param t The token. * @return Whether we should mark all occurrences of this token. */ public boolean isValidType(RSyntaxTextArea textArea, Token t); /** * Called when occurrences of a token should be marked. * * @param doc The document. * @param t The document whose relevant occurrences should be marked. * @param h The highlighter to add the highlights to. * @param p The painter for the highlights. */ public void markOccurrences(RSyntaxDocument doc, Token t, RSyntaxTextAreaHighlighter h, SmartHighlightPainter p); }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/ParserManager.java000066400000000000000000000540461257417003700302240ustar00rootroot00000000000000/* * 09/26/2005 * * ParserManager.java - Manages the parsing of an RSyntaxTextArea's document, * if necessary. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.awt.Color; import java.awt.Point; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.net.URL; import java.security.AccessControlException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.swing.Timer; import javax.swing.ToolTipManager; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; import javax.swing.text.BadLocationException; import javax.swing.text.Document; import javax.swing.text.Element; import javax.swing.text.Position; import org.fife.ui.rsyntaxtextarea.focusabletip.FocusableTip; import org.fife.ui.rsyntaxtextarea.parser.ParseResult; import org.fife.ui.rsyntaxtextarea.parser.Parser; import org.fife.ui.rsyntaxtextarea.parser.ParserNotice; import org.fife.ui.rsyntaxtextarea.parser.ToolTipInfo; import org.fife.ui.rtextarea.RDocument; import org.fife.ui.rtextarea.RTextAreaHighlighter.HighlightInfo; /** * Manages running a parser object for an RSyntaxTextArea. * * @author Robert Futrell * @version 0.9 */ class ParserManager implements DocumentListener, ActionListener, HyperlinkListener, PropertyChangeListener { private RSyntaxTextArea textArea; private List parsers; private Timer timer; private boolean running; private Parser parserForTip; private Position firstOffsetModded; private Position lastOffsetModded; /** * Mapping of notices to their highlights in the editor. Can't use a Map * since parsers could return two ParserNotices that compare * equally via equals(). Real-world example: The Perl * compiler will return 2+ identical error messages if the same error is * committed in a single line more than once. */ private List noticeHighlightPairs; /** * Painter used to underline errors. */ private SquiggleUnderlineHighlightPainter parserErrorHighlightPainter = new SquiggleUnderlineHighlightPainter(Color.RED); /** * If this system property is set to true, debug messages * will be printed to stdout to help diagnose parsing issues. */ private static final String PROPERTY_DEBUG_PARSING = "rsta.debugParsing"; /** * Whether to print debug messages while running parsers. */ private static final boolean DEBUG_PARSING; /** * The default delay between the last key press and when the document * is parsed, in milliseconds. */ private static final int DEFAULT_DELAY_MS = 1250; /** * Constructor. * * @param textArea The text area whose document the parser will be * parsing. */ public ParserManager(RSyntaxTextArea textArea) { this(DEFAULT_DELAY_MS, textArea); } /** * Constructor. * * @param delay The delay between the last key press and when the document * is parsed. * @param textArea The text area whose document the parser will be * parsing. */ public ParserManager(int delay, RSyntaxTextArea textArea) { this.textArea = textArea; textArea.getDocument().addDocumentListener(this); textArea.addPropertyChangeListener("document", this); parsers = new ArrayList(1); // Usually small timer = new Timer(delay, this); timer.setRepeats(false); running = true; } /** * Called when the timer fires (e.g. it's time to parse the document). * * @param e The event. */ public void actionPerformed(ActionEvent e) { // Sanity check - should have >1 parser if event is fired. int parserCount = getParserCount(); if (parserCount==0) { return; } long begin = 0; if (DEBUG_PARSING) { begin = System.currentTimeMillis(); } RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); Element root = doc.getDefaultRootElement(); int firstLine = firstOffsetModded==null ? 0 : root.getElementIndex(firstOffsetModded.getOffset()); int lastLine = lastOffsetModded==null ? root.getElementCount()-1 : root.getElementIndex(lastOffsetModded.getOffset()); firstOffsetModded = lastOffsetModded = null; if (DEBUG_PARSING) { System.out.println("[DEBUG]: Minimum lines to parse: " + firstLine + "-" + lastLine); } String style = textArea.getSyntaxEditingStyle(); doc.readLock(); try { for (int i=0; inull, nothing * happens. * @see #getParser(int) * @see #removeParser(Parser) */ public void addParser(Parser parser) { if (parser!=null && !parsers.contains(parser)) { if (running) { timer.stop(); } parsers.add(parser); if (parsers.size()==1) { // Okay to call more than once. ToolTipManager.sharedInstance().registerComponent(textArea); } if (running) { timer.restart(); } } } /** * Adds highlights for a list of parser notices. Any current notices * from the same Parser, in the same parsed range, are removed. * * @param res The result of a parsing. * @see #clearParserNoticeHighlights() */ private void addParserNoticeHighlights(ParseResult res) { // Parsers are supposed to return at least empty ParseResults, but // we'll be defensive here. if (res==null) { return; } if (DEBUG_PARSING) { System.out.println("[DEBUG]: Adding parser notices from " + res.getParser()); } if (noticeHighlightPairs==null) { noticeHighlightPairs = new ArrayList(); } removeParserNotices(res); List notices = res.getNotices(); if (notices.size()>0) { // Guaranteed non-null RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter) textArea.getHighlighter(); for (ParserNotice notice : notices) { if (DEBUG_PARSING) { System.out.println("[DEBUG]: ... adding: " + notice); } try { HighlightInfo highlight = null; if (notice.getShowInEditor()) { highlight = h.addParserHighlight(notice, parserErrorHighlightPainter); } noticeHighlightPairs.add(new NoticeHighlightPair(notice, highlight)); } catch (BadLocationException ble) { // Never happens ble.printStackTrace(); } } } if (DEBUG_PARSING) { System.out.println("[DEBUG]: Done adding parser notices from " + res.getParser()); } } /** * Called when the document is modified. * * @param e The document event. */ public void changedUpdate(DocumentEvent e) { } private void clearParserNoticeHighlights() { RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter) textArea.getHighlighter(); if (h!=null) { h.clearParserHighlights(); } if (noticeHighlightPairs!=null) { noticeHighlightPairs.clear(); } } /** * Removes all parser notice highlights for a specific parser. * * @param parser The parser whose highlights to remove. */ private void clearParserNoticeHighlights(Parser parser) { RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter) textArea.getHighlighter(); if (h!=null) { h.clearParserHighlights(parser); } if (noticeHighlightPairs!=null) { for (Iterator i=noticeHighlightPairs.iterator(); i.hasNext(); ) { NoticeHighlightPair pair = i.next(); if (pair.notice.getParser()==parser) { i.remove(); } } } } /** * Removes all parsers and any highlights they have created. * * @see #addParser(Parser) */ public void clearParsers() { timer.stop(); clearParserNoticeHighlights(); parsers.clear(); textArea.fireParserNoticesChange(); } /** * Forces the given {@link Parser} to re-parse the content of this text * area.

* * This method can be useful when a Parser can be configured * as to what notices it returns. For example, if a Java language parser * can be configured to set whether no serialVersionUID is a warning, * error, or ignored, this method can be called after changing the expected * notice type to have the document re-parsed. * * @param parser The index of the Parser to re-run. * @see #getParser(int) */ public void forceReparsing(int parser) { Parser p = getParser(parser); RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); String style = textArea.getSyntaxEditingStyle(); doc.readLock(); try { if (p.isEnabled()) { ParseResult res = p.parse(doc, style); addParserNoticeHighlights(res); } else { clearParserNoticeHighlights(p); } textArea.fireParserNoticesChange(); } finally { doc.readUnlock(); } } /** * Returns the delay between the last "concurrent" edit and when the * document is re-parsed. * * @return The delay, in milliseconds. * @see #setDelay(int) */ public int getDelay() { return timer.getDelay(); } /** * Returns the specified parser. * * @param index The index of the parser. * @return The parser. * @see #getParserCount() * @see #addParser(Parser) * @see #removeParser(Parser) */ public Parser getParser(int index) { return parsers.get(index); } /** * Returns the number of registered parsers. * * @return The number of registered parsers. */ public int getParserCount() { return parsers.size(); } /** * Returns a list of the current parser notices for this text area. * This method (like most Swing methods) should only be called on the * EDT. * * @return The list of notices. This will be an empty list if there are * none. */ public List getParserNotices() { List notices = new ArrayList(); if (noticeHighlightPairs!=null) { for (NoticeHighlightPair pair : noticeHighlightPairs) { notices.add(pair.notice); } } return notices; } /** * Returns the tool tip to display for a mouse event at the given * location. This method is overridden to give a registered parser a * chance to display a tool tip (such as an error description when the * mouse is over an error highlight). * * @param e The mouse event. * @return The tool tip to display, and possibly a hyperlink event handler. */ public ToolTipInfo getToolTipText(MouseEvent e) { String tip = null; HyperlinkListener listener = null; parserForTip = null; Point p = e.getPoint(); // try { int pos = textArea.viewToModel(p); /* Highlighter.Highlight[] highlights = textArea.getHighlighter(). getHighlights(); for (int i=0; i=pos) { //return pnh.getMessage(); return textArea.getText(start, end-start); } //} } */ if (noticeHighlightPairs!=null) { for (NoticeHighlightPair pair : noticeHighlightPairs) { ParserNotice notice = pair.notice; if (noticeContainsPosition(notice, pos) && noticeContainsPointInView(notice, p)) { tip = notice.getToolTipText(); parserForTip = notice.getParser(); if (parserForTip instanceof HyperlinkListener) { listener = (HyperlinkListener)parserForTip; } break; } } } // } catch (BadLocationException ble) { // ble.printStackTrace(); // Should never happen. // } URL imageBase = parserForTip==null ? null : parserForTip.getImageBase(); return new ToolTipInfo(tip, listener, imageBase); } /** * Called when the document is modified. * * @param e The document event. */ public void handleDocumentEvent(DocumentEvent e) { if (running && parsers.size()>0) { timer.restart(); } } /** * Called when the user clicks a hyperlink in a {@link FocusableTip}. * * @param e The event. */ public void hyperlinkUpdate(HyperlinkEvent e) { if (parserForTip!=null && parserForTip.getHyperlinkListener()!=null) { parserForTip.getHyperlinkListener().linkClicked(textArea, e); } } /** * Called when the document is modified. * * @param e The document event. */ public void insertUpdate(DocumentEvent e) { // Keep track of the first and last offset modified. Some parsers are // smart and will only re-parse this section of the file. try { int offs = e.getOffset(); if (firstOffsetModded==null || offslastOffsetModded.getOffset()) { lastOffsetModded = e.getDocument().createPosition(offs); } } catch (BadLocationException ble) { ble.printStackTrace(); // Shouldn't happen } handleDocumentEvent(e); } /** * Returns whether a parser notice contains the specified offset. * * @param notice The notice. * @param offs The offset. * @return Whether the notice contains the offset. */ private final boolean noticeContainsPosition(ParserNotice notice, int offs){ if (notice.getKnowsOffsetAndLength()) { return notice.containsPosition(offs); } Document doc = textArea.getDocument(); Element root = doc.getDefaultRootElement(); int line = notice.getLine(); if (line<0) { // Defensive against possible bad user-defined notices. return false; } Element elem = root.getElement(line); return offs>=elem.getStartOffset() && offsviewToModel() returns the closest model * position, and the position doesn't necessarily contain the * point passed in as an argument, this method checks whether the point is * indeed contained in the view rectangle for the specified offset. * * @param notice The parser notice. * @param p The point possibly contained in the view range of the * parser notice. * @return Whether the parser notice actually contains the specified point * in the view. */ private final boolean noticeContainsPointInView(ParserNotice notice, Point p) { try { int start, end; if (notice.getKnowsOffsetAndLength()) { start = notice.getOffset(); end = start + notice.getLength() - 1; } else { Document doc = textArea.getDocument(); Element root = doc.getDefaultRootElement(); int line = notice.getLine(); // Defend against possible bad user-defined notices. if (line<0) { return false; } Element elem = root.getElement(line); start = elem.getStartOffset(); end = elem.getEndOffset() - 1; } Rectangle r1 = textArea.modelToView(start); Rectangle r2 = textArea.modelToView(end); if (r1.y!=r2.y) { // If the notice spans multiple lines, give them the benefit // of the doubt. This is only "wrong" if the user is in empty // space "to the right" of the error marker when it ends at the // end of a line anyway. return true; } r1.y--; // Be a tiny bit lenient. r1.height += 2; // Ditto return p.x>=r1.x && p.x<(r2.x+r2.width) && p.y>=r1.y && p.y<(r1.y+r1.height); } catch (BadLocationException ble) { // Never occurs // Give them the benefit of the doubt, should 99% of the time be // true anyway return true; } } /** * Called when a property we're interested in changes. * * @param e The property change event. */ public void propertyChange(PropertyChangeEvent e) { String name = e.getPropertyName(); if ("document".equals(name)) { // The document switched out from under us RDocument old = (RDocument)e.getOldValue(); if (old != null) { old.removeDocumentListener(this); } RDocument newDoc = (RDocument)e.getNewValue(); if (newDoc != null) { newDoc.addDocumentListener(this); } } } /** * Removes a parser. * * @param parser The parser to remove. * @return Whether the parser was found. * @see #addParser(Parser) * @see #getParser(int) */ public boolean removeParser(Parser parser) { removeParserNotices(parser); boolean removed = parsers.remove(parser); if (removed) { textArea.fireParserNoticesChange(); } return removed; } /** * Removes all parser notices (and clears highlights in the editor) from * a particular parser. * * @param parser The parser. */ private void removeParserNotices(Parser parser) { if (noticeHighlightPairs!=null) { RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter) textArea.getHighlighter(); for (Iterator i=noticeHighlightPairs.iterator(); i.hasNext(); ) { NoticeHighlightPair pair = i.next(); if (pair.notice.getParser()==parser && pair.highlight!=null) { h.removeParserHighlight(pair.highlight); i.remove(); } } } } /** * Removes any currently stored notices (and the corresponding highlights * from the editor) from the same Parser, and in the given line range, * as in the results. * * @param res The results. */ private void removeParserNotices(ParseResult res) { if (noticeHighlightPairs!=null) { RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter) textArea.getHighlighter(); for (Iterator i=noticeHighlightPairs.iterator(); i.hasNext(); ) { NoticeHighlightPair pair = i.next(); boolean removed = false; if (shouldRemoveNotice(pair.notice, res)) { if (pair.highlight!=null) { h.removeParserHighlight(pair.highlight); } i.remove(); removed = true; } if (DEBUG_PARSING) { String text = removed ? "[DEBUG]: ... notice removed: " : "[DEBUG]: ... notice not removed: "; System.out.println(text + pair.notice); } } } } /** * Called when the document is modified. * * @param e The document event. */ public void removeUpdate(DocumentEvent e) { // Keep track of the first and last offset modified. Some parsers are // smart and will only re-parse this section of the file. Note that // for removals, only the line at the removal start needs to be // re-parsed. try { int offs = e.getOffset(); if (firstOffsetModded==null || offslastOffsetModded.getOffset()) { lastOffsetModded = e.getDocument().createPosition(offs); } } catch (BadLocationException ble) { // Never happens ble.printStackTrace(); } handleDocumentEvent(e); } /** * Restarts parsing the document. * * @see #stopParsing() */ public void restartParsing() { timer.restart(); running = true; } /** * Sets the delay between the last "concurrent" edit and when the document * is re-parsed. * * @param millis The new delay, in milliseconds. This must be greater * than 0. * @see #getDelay() */ public void setDelay(int millis) { if (running) { timer.stop(); } timer.setInitialDelay(millis); timer.setDelay(millis); if (running) { timer.start(); } } /** * Returns whether a parser notice should be removed, based on a parse * result. * * @param notice The notice in question. * @param res The result. * @return Whether the notice should be removed. */ private final boolean shouldRemoveNotice(ParserNotice notice, ParseResult res) { if (DEBUG_PARSING) { System.out.println("[DEBUG]: ... ... shouldRemoveNotice " + notice + ": " + (notice.getParser()==res.getParser())); } // NOTE: We must currently remove all notices for the parser. Parser // implementors are required to parse the entire document each parsing // request, as RSTA is not yet sophisticated enough to determine the // minimum range of text to parse (and ParserNotices' locations aren't // updated when the Document is mutated, which would be a requirement // for this as well). // return same_parser && (in_reparsed_range || in_deleted_end_of_doc) return notice.getParser()==res.getParser(); } /** * Stops parsing the document. * * @see #restartParsing() */ public void stopParsing() { timer.stop(); running = false; } /** * Mapping of a parser notice to its highlight in the editor. */ private static class NoticeHighlightPair { public ParserNotice notice; public HighlightInfo highlight; public NoticeHighlightPair(ParserNotice notice, HighlightInfo highlight) { this.notice = notice; this.highlight = highlight; } } static { boolean debugParsing = false; try { debugParsing = Boolean.getBoolean(PROPERTY_DEBUG_PARSING); } catch (AccessControlException ace) { // Likely an applet's security manager. debugParsing = false; // FindBugs } DEBUG_PARSING = debugParsing; } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/PopupWindowDecorator.java000066400000000000000000000033271257417003700316270ustar00rootroot00000000000000/* * 01/11/2011 * * PopupWindowDecorator.java - Hook allowing hosting applications to decorate * JWindows created by the AutoComplete library. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import javax.swing.JWindow; /** * A hook allowing hosting applications to decorate JWindows created by the * AutoComplete library. For example, you could use the * JGoodies library to add drop shadows * to the windows. * * @author Robert Futrell * @version 1.0 */ public abstract class PopupWindowDecorator { /** * The singleton instance of this class. */ private static PopupWindowDecorator decorator; /** * Callback called whenever an appropriate JWindow is created by the * AutoComplete library. Implementations can decorate the window however * they see fit. * * @param window The newly-created window. */ public abstract void decorate(JWindow window); /** * Returns the singleton instance of this class. This should only be * called on the EDT. * * @return The singleton instance of this class, or null * for none. * @see #set(PopupWindowDecorator) */ public static PopupWindowDecorator get() { return decorator; } /** * Sets the singleton instance of this class. This should only be called * on the EDT. * * @param decorator The new instance of this class. This may be * null. * @see #get() */ public static void set(PopupWindowDecorator decorator) { PopupWindowDecorator.decorator = decorator; } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/RSTAView.java000066400000000000000000000036061257417003700270750ustar00rootroot00000000000000/* * 02/10/2009 * * RSTAView.java - An RSyntaxTextArea view. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.awt.Rectangle; import javax.swing.text.BadLocationException; /** * Utility methods for RSyntaxTextArea's views. * * @author Robert Futrell * @version 1.0 */ interface RSTAView { /** * Returns the y-coordinate of the specified line.

* * This method is quicker than using traditional * modelToView(int) calls, as the entire bounding box isn't * computed. * * @param alloc The area the text area can render into. * @param line The line number. * @return The y-coordinate of the top of the line, or -1 if * this text area doesn't yet have a positive size or the line is * hidden (i.e. from folding). * @throws BadLocationException If line isn't a valid line * number for this document. */ public int yForLine(Rectangle alloc, int line) throws BadLocationException; /** * Returns the y-coordinate of the line containing a specified offset.

* * This method is quicker than using traditional * modelToView(int) calls, as the entire bounding box isn't * computed. * * @param alloc The area the text area can render into. * @param offs The offset info the document. * @return The y-coordinate of the top of the offset, or -1 if * this text area doesn't yet have a positive size or the line is * hidden (i.e. from folding). * @throws BadLocationException If offs isn't a valid offset * into the document. */ public int yForLineContaining(Rectangle alloc, int offs) throws BadLocationException; }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxDocument.java000066400000000000000000000557661257417003700306160ustar00rootroot00000000000000/* * 10/16/2004 * * RSyntaxDocument.java - A document capable of syntax highlighting, used by * RSyntaxTextArea. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.awt.event.ActionEvent; import java.io.IOException; import java.io.ObjectInputStream; import java.util.Iterator; import javax.swing.Action; import javax.swing.event.*; import javax.swing.text.*; import org.fife.ui.rsyntaxtextarea.modes.AbstractMarkupTokenMaker; import org.fife.ui.rtextarea.RDocument; import org.fife.util.DynamicIntArray; /** * The document used by {@link org.fife.ui.rsyntaxtextarea.RSyntaxTextArea}. * This document is like javax.swing.text.PlainDocument except that * it also keeps track of syntax highlighting in the document. It has a "style" * attribute associated with it that determines how syntax highlighting is done * (i.e., what language is being highlighted).

* * Instances of RSyntaxTextArea will only accept instances of * RSyntaxDocument, since it is this document that keeps * track of syntax highlighting. All others will cause an exception to be * thrown.

* * To change the language being syntax highlighted at any time, you merely have * to call {@link #setSyntaxStyle}. Other than that, this document can be * treated like any other save one caveat: all DocumentEvents of * type CHANGE use their offset and length values to represent the * first and last lines, respectively, that have had their syntax coloring * change. This is really a hack to increase the speed of the painting code * and should really be corrected, but oh well. * * @author Robert Futrell * @version 1.0 */ public class RSyntaxDocument extends RDocument implements Iterable, SyntaxConstants { /** * Creates a {@link TokenMaker} appropriate for a given programming * language. */ private transient TokenMakerFactory tokenMakerFactory; /** * Splits text into tokens for the current programming language. */ private transient TokenMaker tokenMaker; /** * The current syntax style. Only cached to keep this class serializable. */ private String syntaxStyle; /** * Array of values representing the "last token type" on each line. This * is used in cases such as multi-line comments: if the previous line * ended with an (unclosed) multi-line comment, we can use this knowledge * and start the current line's syntax highlighting in multi-line comment * state. */ protected transient DynamicIntArray lastTokensOnLines; private transient int lastLine = -1; private transient Token cachedTokenList; private transient int useCacheCount = 0; private transient int tokenRetrievalCount = 0; private transient Segment s; /** * If this is set to true, debug information about how much * token caching is helping is printed to stdout. */ private static final boolean DEBUG_TOKEN_CACHING = false; /** * Constructs a plain text document. A default root element is created, * and the tab size set to 5. * * @param syntaxStyle The syntax highlighting scheme to use. */ public RSyntaxDocument(String syntaxStyle) { this(null, syntaxStyle); } /** * Constructs a plain text document. A default root element is created, * and the tab size set to 5. * * @param tmf The TokenMakerFactory for this document. If * this is null, a default factory is used. * @param syntaxStyle The syntax highlighting scheme to use. */ public RSyntaxDocument(TokenMakerFactory tmf, String syntaxStyle) { putProperty(tabSizeAttribute, Integer.valueOf(5)); lastTokensOnLines = new DynamicIntArray(400); lastTokensOnLines.add(Token.NULL); // Initial (empty) line. s = new Segment(); setTokenMakerFactory(tmf); setSyntaxStyle(syntaxStyle); } /** * Alerts all listeners to this document of an insertion. This is * overridden so we can update our syntax highlighting stuff.

* The syntax highlighting stuff has to be here instead of in * insertUpdate because insertUpdate is not * called by the undo/redo actions, but this method is. * * @param e The change. */ @Override protected void fireInsertUpdate(DocumentEvent e) { cachedTokenList = null; /* * Now that the text is actually inserted into the content and * element structure, we can update our token elements and "last * tokens on lines" structure. */ Element lineMap = getDefaultRootElement(); DocumentEvent.ElementChange change = e.getChange(lineMap); Element[] added = change==null ? null : change.getChildrenAdded(); int numLines = lineMap.getElementCount(); int line = lineMap.getElementIndex(e.getOffset()); int previousLine = line - 1; int previousTokenType = (previousLine>-1 ? lastTokensOnLines.get(previousLine) : Token.NULL); // If entire lines were added... if (added!=null && added.length>0) { Element[] removed = change.getChildrenRemoved(); int numRemoved = removed!=null ? removed.length : 0; int endBefore = line + added.length - numRemoved; //System.err.println("... adding lines: " + line + " - " + (endBefore-1)); //System.err.println("... ... added: " + added.length + ", removed:" + numRemoved); for (int i=line; i0). // Otherwise, text was inserted on a single line... else { // Update last tokens for lines below until they stop changing. updateLastTokensBelow(line, numLines, previousTokenType); } // End of else. // Let all listeners know about the insertion. super.fireInsertUpdate(e); } /** * This method is called AFTER the content has been inserted into the * document and the element structure has been updated.

* The syntax-highlighting updates need to be done here (as opposed to * an override of postRemoveUpdate) as this method is called * in response to undo/redo events, whereas postRemoveUpdate * is not.

* Now that the text is actually inserted into the content and element * structure, we can update our token elements and "last tokens on * lines" structure. * * @param chng The change that occurred. * @see #removeUpdate */ @Override protected void fireRemoveUpdate(DocumentEvent chng) { cachedTokenList = null; Element lineMap = getDefaultRootElement(); int numLines = lineMap.getElementCount(); DocumentEvent.ElementChange change = chng.getChange(lineMap); Element[] removed = change==null ? null : change.getChildrenRemoved(); // If entire lines were removed... if (removed!=null && removed.length>0) { int line = change.getIndex(); // First line entirely removed. int previousLine = line - 1; // Line before that. int previousTokenType = (previousLine>-1 ? lastTokensOnLines.get(previousLine) : Token.NULL); Element[] added = change.getChildrenAdded(); int numAdded = added==null ? 0 : added.length; // Remove the cached last-token values for the removed lines. int endBefore = line + removed.length - numAdded; //System.err.println("... removing lines: " + line + " - " + (endBefore-1)); //System.err.println("... added: " + numAdded + ", removed: " + removed.length); lastTokensOnLines.removeRange(line, endBefore); // Removing values for lines [line-(endBefore-1)]. //System.err.println("--------- lastTokensOnLines.size() == " + lastTokensOnLines.getSize()); // Update last tokens for lines below until they've stopped changing. updateLastTokensBelow(line, numLines, previousTokenType); } // End of if (removed!=null && removed.size()>0). // Otherwise, text was removed from just one line... else { int line = lineMap.getElementIndex(chng.getOffset()); if (line>=lastTokensOnLines.getSize()) return; // If we're editing the last line in a document... int previousLine = line - 1; int previousTokenType = (previousLine>-1 ? lastTokensOnLines.get(previousLine) : Token.NULL); //System.err.println("previousTokenType for line : " + previousLine + " is " + previousTokenType); // Update last tokens for lines below until they've stopped changing. updateLastTokensBelow(line, numLines, previousTokenType); } // Let all of our listeners know about the removal. super.fireRemoveUpdate(chng); } /** * Returns the closest {@link TokenTypes "standard" token type} for a given * "internal" token type (e.g. one whose value is < 0). * * @param type The token type. * @return The closest "standard" token type. If a mapping is not defined * for this language, then type is returned. */ public int getClosestStandardTokenTypeForInternalType(int type) { return tokenMaker.getClosestStandardTokenTypeForInternalType(type); } /** * Returns whether closing markup tags should be automatically completed. * This method only returns true if * {@link #getLanguageIsMarkup()} also returns true. * * @return Whether markup closing tags should be automatically completed. * @see #getLanguageIsMarkup() */ public boolean getCompleteMarkupCloseTags() { // TODO: Remove terrible dependency on AbstractMarkupTokenMaker return getLanguageIsMarkup() && ((AbstractMarkupTokenMaker)tokenMaker).getCompleteCloseTags(); } /** * Returns whether the current programming language uses curly braces * ('{' and '}') to denote code blocks. * * @param languageIndex The language index at the offset in question. * Since some TokenMakers effectively have nested * languages (such as JavaScript in HTML), this parameter tells the * TokenMaker what sub-language to look at. * @return Whether curly braces denote code blocks. */ public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { return tokenMaker.getCurlyBracesDenoteCodeBlocks(languageIndex); } /** * Returns whether the current language is a markup language, such as * HTML, XML or PHP. * * @return Whether the current language is a markup language. */ public boolean getLanguageIsMarkup() { return tokenMaker.isMarkupLanguage(); } /** * Returns the token type of the last token on the given line. * * @param line The line to inspect. * @return The token type of the last token on the specified line. If * the line is invalid, an exception is thrown. */ public int getLastTokenTypeOnLine(int line) { return lastTokensOnLines.get(line); } /** * Returns the text to place at the beginning and end of a * line to "comment" it in this programming language. * * @return The start and end strings to add to a line to "comment" * it out. A null value for either means there * is no string to add for that part. A value of * null for the array means this language * does not support commenting/uncommenting lines. */ public String[] getLineCommentStartAndEnd(int languageIndex) { return tokenMaker.getLineCommentStartAndEnd(languageIndex); } /** * Returns whether tokens of the specified type should have "mark * occurrences" enabled for the current programming language. * * @param type The token type. * @return Whether tokens of this type should have "mark occurrences" * enabled. */ boolean getMarkOccurrencesOfTokenType(int type) { return tokenMaker.getMarkOccurrencesOfTokenType(type); } /** * Returns the occurrence marker for the current language. * * @return The occurrence marker. */ OccurrenceMarker getOccurrenceMarker() { return tokenMaker.getOccurrenceMarker(); } /** * This method returns whether auto indentation should be done if Enter * is pressed at the end of the specified line. * * @param line The line to check. * @return Whether an extra indentation should be done. */ public boolean getShouldIndentNextLine(int line) { Token t = getTokenListForLine(line); t = t.getLastNonCommentNonWhitespaceToken(); return tokenMaker.getShouldIndentNextLineAfter(t); } /** * Returns the syntax style being used. * * @return The syntax style. * @see #setSyntaxStyle(String) */ public String getSyntaxStyle() { return syntaxStyle; } /** * Returns a token list for the specified segment of text representing * the specified line number. This method is basically a wrapper for * tokenMaker.getTokenList that takes into account the last * token on the previous line to assure token accuracy. * * @param line The line number of text in the document, * >= 0. * @return A token list representing the specified line. */ public final Token getTokenListForLine(int line) { tokenRetrievalCount++; if (line==lastLine && cachedTokenList!=null) { if (DEBUG_TOKEN_CACHING) { useCacheCount++; System.err.println("--- Using cached line; ratio now: " + useCacheCount + "/" + tokenRetrievalCount); } return cachedTokenList; } lastLine = line; Element map = getDefaultRootElement(); Element elem = map.getElement(line); int startOffset = elem.getStartOffset(); //int endOffset = (line==map.getElementCount()-1 ? elem.getEndOffset() - 1: // elem.getEndOffset() - 1); int endOffset = elem.getEndOffset() - 1; // Why always "-1"? try { getText(startOffset,endOffset-startOffset, s); } catch (BadLocationException ble) { ble.printStackTrace(); return null; } int initialTokenType = line==0 ? Token.NULL : getLastTokenTypeOnLine(line-1); //return tokenMaker.getTokenList(s, initialTokenType, startOffset); cachedTokenList = tokenMaker.getTokenList(s, initialTokenType, startOffset); return cachedTokenList; } boolean insertBreakSpecialHandling(ActionEvent e) { Action a = tokenMaker.getInsertBreakAction(); if (a!=null) { a.actionPerformed(e); return true; } return false; } /** * Returns whether a character could be part of an "identifier" token * in a specific language. This is used to identify such things as the * bounds of the "word" to select on double-clicking. * * @param languageIndex The language index the character was found in. * @param ch The character. * @return Whether the character could be part of an "identifier" token. */ public boolean isIdentifierChar(int languageIndex, char ch) { return tokenMaker.isIdentifierChar(languageIndex, ch); } /** * Returns an iterator over the paintable tokens in this document. Results * are undefined if this document is modified while the iterator is being * iterated through, so this should only be used on the EDT.

* * The remove() method of the returned iterator will throw * an UnsupportedOperationException. * * @return An iterator. */ public Iterator iterator() { return new TokenIterator(this); } /** * Deserializes a document. * * @param in The stream to read from. * @throws ClassNotFoundException * @throws IOException */ private void readObject(ObjectInputStream in) throws ClassNotFoundException, IOException { in.defaultReadObject(); // Install default TokenMakerFactory. To support custom TokenMakers, // both JVM's should install default TokenMakerFactories that support // the language they want to use beforehand. setTokenMakerFactory(null); // Handle other transient stuff this.s = new Segment(); int lineCount = getDefaultRootElement().getElementCount(); lastTokensOnLines = new DynamicIntArray(lineCount); setSyntaxStyle(syntaxStyle); // Actually install (transient) TokenMaker } /** * Makes our private Segment s point to the text in our * document referenced by the specified element. Note that * line MUST be a valid line number in the document. * * @param line The line number you want to get. */ private final void setSharedSegment(int line) { Element map = getDefaultRootElement(); //int numLines = map.getElementCount(); Element element = map.getElement(line); if (element==null) throw new InternalError("Invalid line number: " + line); int startOffset = element.getStartOffset(); //int endOffset = (line==numLines-1 ? // element.getEndOffset()-1 : element.getEndOffset() - 1); int endOffset = element.getEndOffset()-1; // Why always "-1"? try { getText(startOffset, endOffset-startOffset, s); } catch (BadLocationException ble) { throw new InternalError("Text range not in document: " + startOffset + "-" + endOffset); } } /** * Sets the syntax style being used for syntax highlighting in this * document. What styles are supported by a document is determined by its * {@link TokenMakerFactory}. By default, all RSyntaxDocuments * support all languages built into RSyntaxTextArea. * * @param styleKey The new style to use, such as * {@link SyntaxConstants#SYNTAX_STYLE_JAVA}. If this style is not * known or supported by this document, then * {@link SyntaxConstants#SYNTAX_STYLE_NONE} is used. * @see #setSyntaxStyle(TokenMaker) * @see #getSyntaxStyle() */ public void setSyntaxStyle(String styleKey) { tokenMaker = tokenMakerFactory.getTokenMaker(styleKey); updateSyntaxHighlightingInformation(); this.syntaxStyle = styleKey; } /** * Sets the syntax style being used for syntax highlighting in this * document. You should call this method if you've created a custom token * maker for a language not normally supported by * RSyntaxTextArea. * * @param tokenMaker The new token maker to use. * @see #setSyntaxStyle(String) */ public void setSyntaxStyle(TokenMaker tokenMaker) { this.tokenMaker = tokenMaker; updateSyntaxHighlightingInformation(); this.syntaxStyle = "text/unknown"; // TODO: Make me public? } /** * Sets the token maker factory used by this document. * * @param tmf The TokenMakerFactory for this document. If * this is null, a default factory is used. */ public void setTokenMakerFactory(TokenMakerFactory tmf) { tokenMakerFactory = tmf!=null ? tmf : TokenMakerFactory.getDefaultInstance(); } /** * Loops through the last-tokens-on-lines array from a specified point * onward, updating last-token values until they stop changing. This * should be called when lines are updated/inserted/removed, as doing * so may cause lines below to change color. * * @param line The first line to check for a change in last-token value. * @param numLines The number of lines in the document. * @param previousTokenType The last-token value of the line just before * line. * @return The last line that needs repainting. */ private int updateLastTokensBelow(int line, int numLines, int previousTokenType) { int firstLine = line; // Loop through all lines past our starting point. Update even the last // line's info, even though there aren't any lines after it that depend // on it changing for them to be changed, as its state may be used // elsewhere in the library. int end = numLines; //System.err.println("--- end==" + end + " (numLines==" + numLines + ")"); while (linefirstLine) { //System.err.println("... ... ... repainting lines " + firstLine + "-" + line); fireChangedUpdate(new DefaultDocumentEvent(firstLine, line, DocumentEvent.EventType.CHANGE)); } return line; } /** * Updates internal state information; e.g. the "last tokens on lines" * data. After this, a changed update is fired to let listeners know that * the document's structure has changed.

* * This is called internally whenever the syntax style changes. */ private void updateSyntaxHighlightingInformation() { // Reinitialize the "last token on each line" array. Note that since // the actual text in the document isn't changing, the number of lines // is the same. Element map = getDefaultRootElement(); int numLines = map.getElementCount(); int lastTokenType = Token.NULL; for (int i=0; iRTextArea that adds syntax highlighting * of certain programming languages to its list of features. Languages * currently supported include: * * * * * * *
*
    *
  • ActionScript *
  • Assembler (X86) *
  • BBCode *
  • C *
  • C++ *
  • CSS *
  • C# *
  • Clojure *
  • Dart *
  • Delphi *
  • DTD *
  • Fortran *
  • Groovy *
  • HTML *
  • htaccess *
  • Java *
  • JavaScript *
  • .jshintrc *
  • JSP *
*
*
    *
  • LaTeX *
  • Lisp *
  • Lua *
  • Make *
  • MXML *
  • NSIS *
  • Perl *
  • PHP *
  • Properties files *
  • Python *
  • Ruby *
  • SAS *
  • Scala *
  • SQL *
  • Tcl *
  • UNIX shell scripts *
  • Visual Basic *
  • Windows batch *
  • XML files *
*
* * Other added features include: *

    *
  • Code folding *
  • Bracket matching *
  • Auto-indentation *
  • Copy as RTF *
  • Clickable hyperlinks (if the language scanner being used supports it) *
  • A pluggable "parser" system that can be used to implement syntax * validation, spell checking, etc. *
* * It is recommended that you use an instance of * {@link org.fife.ui.rtextarea.RTextScrollPane} instead of a regular * JScrollPane as this class allows you to add line numbers and * bookmarks easily to your text area. * * @author Robert Futrell * @version 2.5.8 * @see TextEditorPane */ public class RSyntaxTextArea extends RTextArea implements SyntaxConstants { public static final String ANIMATE_BRACKET_MATCHING_PROPERTY = "RSTA.animateBracketMatching"; public static final String ANTIALIAS_PROPERTY = "RSTA.antiAlias"; public static final String AUTO_INDENT_PROPERTY = "RSTA.autoIndent"; public static final String BRACKET_MATCHING_PROPERTY = "RSTA.bracketMatching"; public static final String CLEAR_WHITESPACE_LINES_PROPERTY = "RSTA.clearWhitespaceLines"; public static final String CLOSE_CURLY_BRACES_PROPERTY = "RSTA.closeCurlyBraces"; public static final String CLOSE_MARKUP_TAGS_PROPERTY = "RSTA.closeMarkupTags"; public static final String CODE_FOLDING_PROPERTY = "RSTA.codeFolding"; public static final String EOL_VISIBLE_PROPERTY = "RSTA.eolMarkersVisible"; public static final String FOCUSABLE_TIPS_PROPERTY = "RSTA.focusableTips"; public static final String FRACTIONAL_FONTMETRICS_PROPERTY = "RSTA.fractionalFontMetrics"; public static final String HIGHLIGHT_SECONDARY_LANGUAGES_PROPERTY = "RSTA.highlightSecondaryLanguages"; public static final String HYPERLINKS_ENABLED_PROPERTY = "RSTA.hyperlinksEnabled"; public static final String MARK_OCCURRENCES_PROPERTY = "RSTA.markOccurrences"; public static final String MARKED_OCCURRENCES_CHANGED_PROPERTY = "RSTA.markedOccurrencesChanged"; public static final String PAINT_MATCHED_BRACKET_PAIR_PROPERTY = "RSTA.paintMatchedBracketPair"; public static final String PARSER_NOTICES_PROPERTY = "RSTA.parserNotices"; public static final String SYNTAX_SCHEME_PROPERTY = "RSTA.syntaxScheme"; public static final String SYNTAX_STYLE_PROPERTY = "RSTA.syntaxStyle"; public static final String TAB_LINE_COLOR_PROPERTY = "RSTA.tabLineColor"; public static final String TAB_LINES_PROPERTY = "RSTA.tabLines"; public static final String USE_SELECTED_TEXT_COLOR_PROPERTY = "RSTA.useSelectedTextColor"; public static final String VISIBLE_WHITESPACE_PROPERTY = "RSTA.visibleWhitespace"; private static final Color DEFAULT_BRACKET_MATCH_BG_COLOR = new Color(234,234,255); private static final Color DEFAULT_BRACKET_MATCH_BORDER_COLOR = new Color(0,0,128); private static final Color DEFAULT_SELECTION_COLOR = new Color(200,200,255); private static final String MSG = "org.fife.ui.rsyntaxtextarea.RSyntaxTextArea"; private JMenu foldingMenu; private static RecordableTextAction toggleCurrentFoldAction; private static RecordableTextAction collapseAllCommentFoldsAction; private static RecordableTextAction collapseAllFoldsAction; private static RecordableTextAction expandAllFoldsAction; /** The key for the syntax style to be highlighting. */ private String syntaxStyleKey; /** The colors used for syntax highlighting. */ private SyntaxScheme syntaxScheme; /** Handles code templates. */ private static CodeTemplateManager codeTemplateManager; /** Whether or not templates are enabled. */ private static boolean templatesEnabled; /** * The rectangle surrounding the "matched bracket" if bracket matching * is enabled. */ private Rectangle match; /** * The rectangle surrounding the current offset if both bracket matching and * "match both brackets" are enabled. */ private Rectangle dotRect; /** * Used to store the location of the bracket at the caret position (either * just before or just after it) and the location of its match. */ private Point bracketInfo; /** * Colors used for the "matched bracket" if bracket matching is enabled. */ private Color matchedBracketBGColor; private Color matchedBracketBorderColor; /** The location of the last matched bracket. */ private int lastBracketMatchPos; /** Whether or not bracket matching is enabled. */ private boolean bracketMatchingEnabled; /** Whether or not bracket matching is animated. */ private boolean animateBracketMatching; /** Whether both brackets are highlighted when bracket matching. */ private boolean paintMatchedBracketPair; private BracketMatchingTimer bracketRepaintTimer; private boolean metricsNeverRefreshed; /** * Whether or not auto-indent is on. */ private boolean autoIndentEnabled; /** * Whether curly braces should be closed on Enter key presses, (if the * current language supports it). */ private boolean closeCurlyBraces; /** * Whether closing markup tags should be automatically completed when * "</" is typed (if the current language is a markup * language). */ private boolean closeMarkupTags; /** * Whether or not lines with nothing but whitespace are "made empty." */ private boolean clearWhitespaceLines; /** Whether we are displaying visible whitespace (spaces and tabs). */ private boolean whitespaceVisible; /** Whether EOL markers should be visible at the end of each line. */ private boolean eolMarkersVisible; /** Whether tab lines are enabled. */ private boolean paintTabLines; /** The color to use when painting tab lines. */ private Color tabLineColor; /** * Whether hyperlinks are enabled (must be supported by the syntax * scheme being used). */ private boolean hyperlinksEnabled; /** The color to use when painting hyperlinks. */ private Color hyperlinkFG; /** * Mask used to determine if the correct key is being held down to scan * for hyperlinks (ctrl, meta, etc.). */ private int linkScanningMask; /** Whether secondary languages have their backgrounds colored. */ private boolean highlightSecondaryLanguages; /** Whether the "selected text" color should be used with selected text. */ private boolean useSelectedTextColor; /** Handles "mark occurrences" support. */ private MarkOccurrencesSupport markOccurrencesSupport; /** The color used to render "marked occurrences." */ private Color markOccurrencesColor; /** Whether a border should be painted around marked occurrences. */ private boolean paintMarkOccurrencesBorder; /** Metrics of the text area's font. */ private FontMetrics defaultFontMetrics; /** Manages running the parser. */ private ParserManager parserManager; private String cachedTip; /** Used to work around an issue with Apple JVMs. */ private Point cachedTipLoc; /** * Whether the editor is currently scanning for hyperlinks on mouse * movement. */ private boolean isScanningForLinks; private int hoveredOverLinkOffset; private LinkGenerator linkGenerator; private LinkGeneratorResult linkGeneratorResult; private int rhsCorrection; private FoldManager foldManager; /** Whether "focusable" tool tips are used instead of standard ones. */ private boolean useFocusableTips; /** The last focusable tip displayed. */ private FocusableTip focusableTip; /** Cached desktop anti-aliasing hints, if anti-aliasing is enabled. */ private Map aaHints; /** Renders tokens. */ private TokenPainter tokenPainter; private int lineHeight; // Height of a line of text; same for default, bold & italic. private int maxAscent; private boolean fractionalFontMetricsEnabled; private Color[] secondaryLanguageBackgrounds; /** * Constructor. */ public RSyntaxTextArea() { } /** * Constructor. * * @param doc The document for the editor. */ public RSyntaxTextArea(RSyntaxDocument doc) { super(doc); setSyntaxEditingStyle(doc.getSyntaxStyle()); } /** * Constructor. * * @param text The initial text to display. */ public RSyntaxTextArea(String text) { super(text); } /** * Constructor. * * @param rows The number of rows to display. * @param cols The number of columns to display. * @throws IllegalArgumentException If either rows or * cols is negative. */ public RSyntaxTextArea(int rows, int cols) { super(rows, cols); } /** * Constructor. * * @param text The initial text to display. * @param rows The number of rows to display. * @param cols The number of columns to display. * @throws IllegalArgumentException If either rows or * cols is negative. */ public RSyntaxTextArea(String text, int rows, int cols) { super(text, rows, cols); } /** * Constructor. * * @param doc The document for the editor. * @param text The initial text to display. * @param rows The number of rows to display. * @param cols The number of columns to display. * @throws IllegalArgumentException If either rows or * cols is negative. */ public RSyntaxTextArea(RSyntaxDocument doc, String text,int rows,int cols) { super(doc, text, rows, cols); } /** * Creates a new RSyntaxTextArea. * * @param textMode Either INSERT_MODE or * OVERWRITE_MODE. */ public RSyntaxTextArea(int textMode) { super(textMode); } /** * Adds an "active line range" listener to this text area. * * @param l The listener to add. * @see #removeActiveLineRangeListener(ActiveLineRangeListener) */ public void addActiveLineRangeListener(ActiveLineRangeListener l) { listenerList.add(ActiveLineRangeListener.class, l); } /** * Adds a hyperlink listener to this text area. * * @param l The listener to add. * @see #removeHyperlinkListener(HyperlinkListener) */ public void addHyperlinkListener(HyperlinkListener l) { listenerList.add(HyperlinkListener.class, l); } /** * Updates the font metrics the first time we're displayed. */ @Override public void addNotify() { super.addNotify(); // Some LookAndFeels (e.g. WebLaF) for some reason have a 0x0 parent // window initially (perhaps something to do with them fading in?), // which will cause an exception from getGraphics(), so we must be // careful here. if (metricsNeverRefreshed) { Window parent = SwingUtilities.getWindowAncestor(this); if (parent!=null && parent.getWidth()>0 && parent.getHeight()>0) { refreshFontMetrics(getGraphics2D(getGraphics())); metricsNeverRefreshed = false; } } // Re-start parsing if we were removed from one container and added // to another if (parserManager!=null) { parserManager.restartParsing(); } } /** * Adds the parser to "validate" the source code in this text area. This * can be anything from a spell checker to a "compiler" that verifies * source code. * * @param parser The new parser. A value of null will * do nothing. * @see #getParser(int) * @see #getParserCount() * @see #removeParser(Parser) */ public void addParser(Parser parser) { if (parserManager==null) { parserManager = new ParserManager(this); } parserManager.addParser(parser); } /** * Appends a submenu with code folding options to this text component's * popup menu. * * @param popup The popup menu to append to. * @see #createPopupMenu() */ protected void appendFoldingMenu(JPopupMenu popup) { popup.addSeparator(); ResourceBundle bundle = ResourceBundle.getBundle(MSG); foldingMenu = new JMenu(bundle.getString("ContextMenu.Folding")); foldingMenu.add(createPopupMenuItem(toggleCurrentFoldAction)); foldingMenu.add(createPopupMenuItem(collapseAllCommentFoldsAction)); foldingMenu.add(createPopupMenuItem(collapseAllFoldsAction)); foldingMenu.add(createPopupMenuItem(expandAllFoldsAction)); popup.add(foldingMenu); } /** * Recalculates the height of a line in this text area and the * maximum ascent of all fonts displayed. */ private void calculateLineHeight() { lineHeight = maxAscent = 0; // Each token style. for (int i=0; ilineHeight) lineHeight = height; int ascent = fm.getMaxAscent(); if (ascent>maxAscent) maxAscent = ascent; } } // The text area's (default) font). Font temp = getFont(); FontMetrics fm = getFontMetrics(temp); int height = fm.getHeight(); if (height>lineHeight) { lineHeight = height; } int ascent = fm.getMaxAscent(); if (ascent>maxAscent) { maxAscent = ascent; } } /** * Removes all parsers from this text area. * * @see #removeParser(Parser) */ public void clearParsers() { if (parserManager!=null) { parserManager.clearParsers(); } } /** * Clones a token list. This is necessary as tokens are reused in * {@link RSyntaxDocument}, so we can't simply use the ones we * are handed from it. * * @param t The token list to clone. * @return The clone of the token list. */ private TokenImpl cloneTokenList(Token t) { if (t==null) { return null; } TokenImpl clone = new TokenImpl(t); TokenImpl cloneEnd = clone; while ((t=t.getNextToken())!=null) { TokenImpl temp = new TokenImpl(t); cloneEnd.setNextToken(temp); cloneEnd = temp; } return clone; } /** * Overridden to toggle the enabled state of various * RSyntaxTextArea-specific menu items. * * If you set the popup menu via {@link #setPopupMenu(JPopupMenu)}, you * will want to override this method, especially if you removed any of the * menu items in the default popup menu. * * @param popupMenu The popup menu. This will never be null. * @see #createPopupMenu() * @see #setPopupMenu(JPopupMenu) */ @Override protected void configurePopupMenu(JPopupMenu popupMenu) { super.configurePopupMenu(popupMenu); // They may have overridden createPopupMenu()... if (popupMenu!=null && popupMenu.getComponentCount()>0 && foldingMenu!=null) { foldingMenu.setEnabled(foldManager. isCodeFoldingSupportedAndEnabled()); } } /** * Copies the currently selected text to the system clipboard, with * any necessary style information (font, foreground color and background * color). Does nothing for null selections. */ public void copyAsRtf() { int selStart = getSelectionStart(); int selEnd = getSelectionEnd(); if (selStart==selEnd) { return; } // Make sure there is a system clipboard, and that we can write // to it. SecurityManager sm = System.getSecurityManager(); if (sm!=null) { try { sm.checkSystemClipboardAccess(); } catch (SecurityException se) { UIManager.getLookAndFeel().provideErrorFeedback(null); return; } } Clipboard cb = getToolkit().getSystemClipboard(); // Create the RTF selection. RtfGenerator gen = new RtfGenerator(); Token tokenList = getTokenListFor(selStart, selEnd); for (Token t=tokenList; t!=null; t=t.getNextToken()) { if (t.isPaintable()) { if (t.length()==1 && t.charAt(0)=='\n') { gen.appendNewline(); } else { Font font = getFontForTokenType(t.getType()); Color bg = getBackgroundForToken(t); boolean underline = getUnderlineForToken(t); // Small optimization - don't print fg color if this // is a whitespace color. Saves on RTF size. if (t.isWhitespace()) { gen.appendToDocNoFG(t.getLexeme(), font, bg, underline); } else { Color fg = getForegroundForToken(t); gen.appendToDoc(t.getLexeme(), font, fg, bg, underline); } } } } // Set the system clipboard contents to the RTF selection. RtfTransferable contents = new RtfTransferable(gen.getRtf().getBytes()); //System.out.println("*** " + new String(gen.getRtf().getBytes())); try { cb.setContents(contents, null); } catch (IllegalStateException ise) { UIManager.getLookAndFeel().provideErrorFeedback(null); return; } } /** * Returns the document to use for an RSyntaxTextArea * * @return The document. */ @Override protected Document createDefaultModel() { return new RSyntaxDocument(SYNTAX_STYLE_NONE); } /** * Returns the caret event/mouse listener for RTextAreas. * * @return The caret event/mouse listener. */ @Override protected RTAMouseListener createMouseListener() { return new RSyntaxTextAreaMutableCaretEvent(this); } /** * Overridden to add menu items related to cold folding. * * @return The popup menu. * @see #appendFoldingMenu(JPopupMenu) */ @Override protected JPopupMenu createPopupMenu() { JPopupMenu popup = super.createPopupMenu(); appendFoldingMenu(popup); return popup; } /** * See createPopupMenuActions() in RTextArea. * TODO: Remove these horrible hacks and move localizing of actions into * the editor kits, where it should be! The context menu should contain * actions from the editor kits. */ private static void createRstaPopupMenuActions() { ResourceBundle msg = ResourceBundle.getBundle(MSG); toggleCurrentFoldAction = new RSyntaxTextAreaEditorKit. ToggleCurrentFoldAction(); toggleCurrentFoldAction.setProperties(msg, "Action.ToggleCurrentFold"); collapseAllCommentFoldsAction = new RSyntaxTextAreaEditorKit. CollapseAllCommentFoldsAction(); collapseAllCommentFoldsAction.setProperties(msg, "Action.CollapseCommentFolds"); collapseAllFoldsAction = new RSyntaxTextAreaEditorKit.CollapseAllFoldsAction(true); expandAllFoldsAction = new RSyntaxTextAreaEditorKit.ExpandAllFoldsAction(true); } /** * Returns the a real UI to install on this text area. * * @return The UI. */ @Override protected RTextAreaUI createRTextAreaUI() { return new RSyntaxTextAreaUI(this); } /** * If the caret is on a bracket, this method finds the matching bracket, * and if it exists, highlights it. */ protected final void doBracketMatching() { // We always need to repaint the "matched bracket" highlight if it // exists. if (match!=null) { repaint(match); if (dotRect!=null) { repaint(dotRect); } } // If a matching bracket is found, get its bounds and paint it! int lastCaretBracketPos = bracketInfo==null ? -1 : bracketInfo.x; bracketInfo = RSyntaxUtilities.getMatchingBracketPosition(this, bracketInfo); if (bracketInfo.y>-1 && (bracketInfo.y!=lastBracketMatchPos || bracketInfo.x!=lastCaretBracketPos)) { try { match = modelToView(bracketInfo.y); if (match!=null) { // Happens if we're not yet visible if (getPaintMatchedBracketPair()) { dotRect = modelToView(bracketInfo.x); } else { dotRect = null; } if (getAnimateBracketMatching()) { bracketRepaintTimer.restart(); } repaint(match); if (dotRect!=null) { repaint(dotRect); } } } catch (BadLocationException ble) { ble.printStackTrace(); // Shouldn't happen. } } else if (bracketInfo.y==-1) { // Set match to null so the old value isn't still repainted. match = null; dotRect = null; bracketRepaintTimer.stop(); } lastBracketMatchPos = bracketInfo.y; } /** * Notifies all listeners that a caret change has occurred. * * @param e The caret event. */ @Override protected void fireCaretUpdate(CaretEvent e) { super.fireCaretUpdate(e); if (isBracketMatchingEnabled()) { doBracketMatching(); } } /** * Notifies all listeners that the active line range has changed. * * @param min The minimum "active" line, or -1. * @param max The maximum "active" line, or -1. */ private void fireActiveLineRangeEvent(int min, int max) { ActiveLineRangeEvent e = null; // Lazily created // Guaranteed to return a non-null array Object[] listeners = listenerList.getListenerList(); // Process the listeners last to first, notifying // those that are interested in this event for (int i = listeners.length-2; i>=0; i-=2) { if (listeners[i]==ActiveLineRangeListener.class) { if (e==null) { e = new ActiveLineRangeEvent(this, min, max); } ((ActiveLineRangeListener)listeners[i+1]).activeLineRangeChanged(e); } } } /** * Notifies all listeners that have registered interest for notification * on this event type. The listener list is processed last to first. * * @param e The event to fire. * @see EventListenerList */ private void fireHyperlinkUpdate(HyperlinkEvent e) { // Guaranteed to return a non-null array Object[] listeners = listenerList.getListenerList(); // Process the listeners last to first, notifying // those that are interested in this event for (int i = listeners.length-2; i>=0; i-=2) { if (listeners[i]==HyperlinkListener.class) { ((HyperlinkListener)listeners[i+1]).hyperlinkUpdate(e); } } } /** * Notifies listeners that the marked occurrences for this text area * have changed. */ void fireMarkedOccurrencesChanged() { firePropertyChange(RSyntaxTextArea.MARKED_OCCURRENCES_CHANGED_PROPERTY, null, null); } /** * Fires a notification that the parser notices for this text area have * changed. */ void fireParserNoticesChange() { firePropertyChange(PARSER_NOTICES_PROPERTY, null, null); } /** * Called whenever a fold is collapsed or expanded. This causes the * text editor to revalidate. This method is here because of poor design * and should be removed. * * @param fold The fold that was collapsed or expanded. */ public void foldToggled(Fold fold) { match = null; // TODO: Update the bracket rect rather than hide it dotRect = null; if (getLineWrap()) { // NOTE: Without doing this later, the caret position is out of // sync with the Element structure when word wrap is enabled, and // causes BadLocationExceptions when an entire folded region is // deleted (see GitHub issue #22: // https://github.com/bobbylight/RSyntaxTextArea/issues/22) SwingUtilities.invokeLater(new Runnable() { public void run() { possiblyUpdateCurrentLineHighlightLocation(); } }); } else { possiblyUpdateCurrentLineHighlightLocation(); } revalidate(); repaint(); } /** * Forces the given {@link Parser} to re-parse the content of this text * area.

* * This method can be useful when a Parser can be configured * as to what notices it returns. For example, if a Java language parser * can be configured to set whether no serialVersionUID is a warning, * error, or ignored, this method can be called after changing the expected * notice type to have the document re-parsed. * * @param parser The index of the Parser to re-run. * @see #getParser(int) */ public void forceReparsing(int parser) { parserManager.forceReparsing(parser); } /** * Forces re-parsing with a specific parser. Note that if this parser is * not installed on this text area, nothing will happen. * * @param parser The parser that should re-parse this text area's contents. * This should be installed on this text area. * @return Whether the parser was installed on this text area. * @see #forceReparsing(int) */ public boolean forceReparsing(Parser parser) { for (int i=0; inull then this token has no special background * color. * @see #getForegroundForToken(Token) */ public Color getBackgroundForToken(Token token) { Color c = null; if (getHighlightSecondaryLanguages()) { // 1-indexed, since 0 == main language. int languageIndex = token.getLanguageIndex() - 1; if (languageIndex>=0 && languageIndex</" is typed. Note that this property is only * honored for markup languages, such as HTML, XML and PHP. * * @return Whether closing markup tags should be automatically completed. * @see #setCloseMarkupTags(boolean) */ public boolean getCloseMarkupTags() { return closeMarkupTags; } /** * Returns the code template manager for all instances of * RSyntaxTextArea. The manager is lazily created. * * @return The code template manager. * @see #setTemplatesEnabled(boolean) */ public static synchronized CodeTemplateManager getCodeTemplateManager() { if (codeTemplateManager==null) { codeTemplateManager = new CodeTemplateManager(); } return codeTemplateManager; } /** * Returns the default bracket-match background color. * * @return The color. * @see #getDefaultBracketMatchBorderColor */ public static final Color getDefaultBracketMatchBGColor() { return DEFAULT_BRACKET_MATCH_BG_COLOR; } /** * Returns the default bracket-match border color. * * @return The color. * @see #getDefaultBracketMatchBGColor */ public static final Color getDefaultBracketMatchBorderColor() { return DEFAULT_BRACKET_MATCH_BORDER_COLOR; } /** * Returns the default selection color for this text area. This * color was chosen because it's light and RSyntaxTextArea * does not change text color between selected/unselected text for * contrast like regular JTextAreas do. * * @return The default selection color. */ public static Color getDefaultSelectionColor() { return DEFAULT_SELECTION_COLOR; } /** * Returns the "default" syntax highlighting color scheme. The colors * used are somewhat standard among syntax highlighting text editors. * * @return The default syntax highlighting color scheme. * @see #restoreDefaultSyntaxScheme() * @see #getSyntaxScheme() * @see #setSyntaxScheme(SyntaxScheme) */ public SyntaxScheme getDefaultSyntaxScheme() { return new SyntaxScheme(getFont()); } /** * Returns whether an EOL marker should be drawn at the end of each line. * * @return Whether EOL markers should be visible. * @see #setEOLMarkersVisible(boolean) * @see #isWhitespaceVisible() */ public boolean getEOLMarkersVisible() { return eolMarkersVisible; } /** * Returns the fold manager for this text area. * * @return The fold manager. */ public FoldManager getFoldManager() { return foldManager; } /** * Returns the font for tokens of the specified type. * * @param type The type of token. * @return The font to use for that token type. * @see #getFontMetricsForTokenType(int) */ public Font getFontForTokenType(int type) { Font f = syntaxScheme.getStyle(type).font; return f!=null ? f : getFont(); } /** * Returns the font metrics for tokens of the specified type. * * @param type The type of token. * @return The font metrics to use for that token type. * @see #getFontForTokenType(int) */ public FontMetrics getFontMetricsForTokenType(int type) { FontMetrics fm = syntaxScheme.getStyle(type).fontMetrics; return fm!=null ? fm : defaultFontMetrics; } /** * Returns the foreground color to use when painting a token. * * @param t The token. * @return The foreground color to use for that token. This * value is never null. * @see #getBackgroundForToken(Token) */ public Color getForegroundForToken(Token t) { if (getHyperlinksEnabled() && hoveredOverLinkOffset==t.getOffset() && (t.isHyperlink() || linkGeneratorResult!=null)) { return hyperlinkFG; } return getForegroundForTokenType(t.getType()); } /** * Returns the foreground color to use when painting a token. This does * not take into account whether the token is a hyperlink. * * @param type The token type. * @return The foreground color to use for that token. This * value is never null. * @see #getForegroundForToken(Token) */ public Color getForegroundForTokenType(int type) { Color fg = syntaxScheme.getStyle(type).foreground; return fg!=null ? fg : getForeground(); } /** * Returns whether fractional font metrics are enabled for this text area. * * @return Whether fractional font metrics are enabled. * @see #setFractionalFontMetricsEnabled * @see #getAntiAliasingEnabled() */ public boolean getFractionalFontMetricsEnabled() { return fractionalFontMetricsEnabled; } /** * Returns a Graphics2D version of the specified graphics * that has been initialized with the proper rendering hints. * * @param g The graphics context for which to get a * Graphics2D. * @return The Graphics2D. */ private final Graphics2D getGraphics2D(Graphics g) { Graphics2D g2d = (Graphics2D)g; if (aaHints!=null) { g2d.addRenderingHints(aaHints); } if (fractionalFontMetricsEnabled) { g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); } return g2d; } /** * Returns whether "secondary" languages should have their backgrounds * colored differently to visually differentiate them. This feature * imposes a fair performance penalty. * * @return Whether secondary languages have their backgrounds colored * differently. * @see #setHighlightSecondaryLanguages(boolean) * @see #getSecondaryLanguageBackground(int) * @see #getSecondaryLanguageCount() * @see #setSecondaryLanguageBackground(int, Color) */ public boolean getHighlightSecondaryLanguages() { return highlightSecondaryLanguages; } /** * Returns the color to use when painting hyperlinks. * * @return The color to use when painting hyperlinks. * @see #setHyperlinkForeground(Color) * @see #getHyperlinksEnabled() */ public Color getHyperlinkForeground() { return hyperlinkFG; } /** * Returns whether hyperlinks are enabled for this text area. * * @return Whether hyperlinks are enabled for this text area. * @see #setHyperlinksEnabled(boolean) */ public boolean getHyperlinksEnabled() { return hyperlinksEnabled; } /** * Returns the last visible offset in this text area. This may not be the * length of the document if code folding is enabled. * * @return The last visible offset in this text area. */ public int getLastVisibleOffset() { if (isCodeFoldingEnabled()) { int lastVisibleLine = foldManager.getLastVisibleLine(); if (lastVisibleLine getMarkAllHighlightRanges() { return ((RSyntaxTextAreaHighlighter)getHighlighter()). getMarkAllHighlightRanges(); } /** * Returns a list of "marked occurrences" in the text area. If there are * no marked occurrences, this will be an empty list. * * @return The list of marked occurrences. */ public List getMarkedOccurrences() { return ((RSyntaxTextAreaHighlighter)getHighlighter()). getMarkedOccurrences(); } /** * Returns whether "Mark Occurrences" is enabled. * * @return Whether "Mark Occurrences" is enabled. * @see #setMarkOccurrences(boolean) */ public boolean getMarkOccurrences() { return markOccurrencesSupport!=null; } /** * Returns the color used to "mark occurrences." * * @return The mark occurrences color. * @see #setMarkOccurrencesColor(Color) */ public Color getMarkOccurrencesColor() { return markOccurrencesColor; } /** * Returns whether tokens of the specified type should have "mark * occurrences" enabled for the current programming language. * * @param type The token type. * @return Whether tokens of this type should have "mark occurrences" * enabled. */ boolean getMarkOccurrencesOfTokenType(int type) { RSyntaxDocument doc = (RSyntaxDocument)getDocument(); return doc.getMarkOccurrencesOfTokenType(type); } /** * Gets the color used as the background for a matched bracket. * * @return The color used. If this is null, no special * background is painted behind a matched bracket. * @see #setMatchedBracketBGColor * @see #getMatchedBracketBorderColor */ public Color getMatchedBracketBGColor() { return matchedBracketBGColor; } /** * Gets the color used as the border for a matched bracket. * * @return The color used. * @see #setMatchedBracketBorderColor * @see #getMatchedBracketBGColor */ public Color getMatchedBracketBorderColor() { return matchedBracketBorderColor; } /** * Returns the caret's offset's rectangle, or null if there * is currently no matched bracket, bracket matching is disabled, or "paint * both matched brackets" is disabled. This should never be called by the * programmer directly. * * @return The rectangle surrounding the matched bracket. * @see #getMatchRectangle() */ Rectangle getDotRectangle() { return dotRect; } /** * Returns the matched bracket's rectangle, or null if there * is currently no matched bracket. This should never be called by the * programmer directly. * * @return The rectangle surrounding the matched bracket. * @see #getDotRectangle() */ Rectangle getMatchRectangle() { return match; } /** * Overridden to return the max ascent for any font used in the editor. * * @return The max ascent value. */ @Override public int getMaxAscent() { return maxAscent; } /** * Returns whether the bracket at the caret position is painted as a * "match" when a matched bracket is found. Note that this property does * nothing if {@link #isBracketMatchingEnabled()} returns * false. * * @return Whether both brackets in a bracket pair are highlighted when * bracket matching is enabled. * @see #setPaintMatchedBracketPair(boolean) * @see #isBracketMatchingEnabled() * @see #setBracketMatchingEnabled(boolean) */ public boolean getPaintMatchedBracketPair() { return paintMatchedBracketPair; } /** * Returns whether tab lines are painted. * * @return Whether tab lines are painted. * @see #setPaintTabLines(boolean) * @see #getTabLineColor() */ public boolean getPaintTabLines() { return paintTabLines; } /** * Returns whether to paint the backgrounds of tokens on the specified * line (assuming they are not obstructed by e.g. selection). * * @param line The line number. * @param y The y-offset of the line. This is used when line wrap is * enabled, since each logical line can be rendered as several * physical lines. * @return Whether to paint the token backgrounds on this line. */ boolean getPaintTokenBackgrounds(int line, float y) { //System.out.println(y + ", " + getCurrentCaretY() + "-" + (getCurrentCaretY() + getLineHeight())); int iy = (int)y; int curCaretY = getCurrentCaretY(); return iy=curCaretY+getLineHeight() || !getHighlightCurrentLine(); } /** * Returns the specified parser. * * @param index The {@link Parser} to retrieve. * @return The Parser. * @see #getParserCount() * @see #addParser(Parser) */ public Parser getParser(int index) { return parserManager.getParser(index); } /** * Returns the number of parsers operating on this text area. * * @return The parser count. * @see #addParser(Parser) */ public int getParserCount() { return parserManager==null ? 0 : parserManager.getParserCount(); } /** * Returns the currently set parser delay. This is the delay that must * occur between edits for any registered {@link Parser}s to run. * * @return The currently set parser delay, in milliseconds. * @see #setParserDelay(int) */ public int getParserDelay() { return parserManager.getDelay(); } /** * Returns a list of the current parser notices for this text area. * This method (like most Swing methods) should only be called on the * EDT. * * @return The list of notices. This will be an empty list if there are * none. */ public List getParserNotices() { if (parserManager==null) { return Collections.emptyList(); } return parserManager.getParserNotices(); } /** * Workaround for JTextComponents allowing the caret to be rendered * entirely off-screen if the entire "previous" character fit entirely. * * @return The amount of space to add to the x-axis preferred span. * @see #setRightHandSideCorrection(int) */ public int getRightHandSideCorrection() { return rhsCorrection; } /** * If auto-indent is enabled, this method returns whether a new line after * this one should be indented (based on the standard indentation rules for * the current programming language). For example, in Java, for a line * containing: * *

	 * for (int i=0; i<10; i++) {
	 * 
* * the following line should be indented. * * @param line The line to check. * @return Whether a line inserted after this one should be auto-indented. * If auto-indentation is disabled, this will always return * false. * @see #isAutoIndentEnabled() */ public boolean getShouldIndentNextLine(int line) { if (isAutoIndentEnabled()) { RSyntaxDocument doc = (RSyntaxDocument)getDocument(); return doc.getShouldIndentNextLine(line); } return false; } /** * Returns what type of syntax highlighting this editor is doing. * * @return The style being used, such as * {@link SyntaxConstants#SYNTAX_STYLE_JAVA}. * @see #setSyntaxEditingStyle(String) * @see SyntaxConstants */ public String getSyntaxEditingStyle() { return syntaxStyleKey; } /** * Returns all of the colors currently being used in syntax highlighting * by this text component. * * @return An instance of SyntaxScheme that represents * the colors currently being used for syntax highlighting. * @see #setSyntaxScheme(SyntaxScheme) */ public SyntaxScheme getSyntaxScheme() { return syntaxScheme; } /** * Returns the color used to paint tab lines. * * @return The color used to paint tab lines. * @see #setTabLineColor(Color) * @see #getPaintTabLines() * @see #setPaintTabLines(boolean) */ public Color getTabLineColor() { return tabLineColor; } /** * Returns whether a border is painted around marked occurrences. * * @return Whether a border is painted. * @see #setPaintMarkOccurrencesBorder(boolean) * @see #getMarkOccurrencesColor() * @see #getMarkOccurrences() */ public boolean getPaintMarkOccurrencesBorder() { return paintMarkOccurrencesBorder; } /** * Returns the background color for the specified secondary language. * * @param index The language index. Note that these are 1-based, not * 0-based, and should be in the range * 1-getSecondaryLanguageCount(), inclusive. * @return The color, or null if none. * @see #getSecondaryLanguageCount() * @see #setSecondaryLanguageBackground(int, Color) * @see #getHighlightSecondaryLanguages() */ public Color getSecondaryLanguageBackground(int index) { return secondaryLanguageBackgrounds[index - 1]; } /** * Returns the number of secondary language backgrounds. * * @return The number of secondary language backgrounds. * @see #getSecondaryLanguageBackground(int) * @see #setSecondaryLanguageBackground(int, Color) * @see #getHighlightSecondaryLanguages() */ public int getSecondaryLanguageCount() { return secondaryLanguageBackgrounds.length; } /** * Returns whether or not templates are enabled for all instances * of RSyntaxTextArea.

* * For more flexible boilerplate code insertion, consider using the * TemplateCompletion * class in the * AutoComplete * add-on library. * * @return Whether templates are enabled. * @see #saveTemplates() * @see #setTemplateDirectory(String) * @see #setTemplatesEnabled(boolean) */ public static synchronized boolean getTemplatesEnabled() { return templatesEnabled; } /** * Returns a token list for the given range in the document. * * @param startOffs The starting offset in the document. * @param endOffs The end offset in the document. * @return The first token in the token list. */ private Token getTokenListFor(int startOffs, int endOffs) { TokenImpl tokenList = null; TokenImpl lastToken = null; Element map = getDocument().getDefaultRootElement(); int startLine = map.getElementIndex(startOffs); int endLine = map.getElementIndex(endOffs); for (int line=startLine; line<=endLine; line++) { TokenImpl t = (TokenImpl)getTokenListForLine(line); t = cloneTokenList(t); if (tokenList==null) { tokenList = t; lastToken = tokenList; } else { lastToken.setNextToken(t); } while (lastToken.getNextToken()!=null && lastToken.getNextToken().isPaintable()) { lastToken = (TokenImpl)lastToken.getNextToken(); } if (line startOffs?). if (startOffs>=tokenList.getOffset()) { while (!tokenList.containsPosition(startOffs)) { tokenList = (TokenImpl)tokenList.getNextToken(); } tokenList.makeStartAt(startOffs); } TokenImpl temp = tokenList; // Be careful to check temp for null here. It is possible that no // token contains endOffs, if endOffs is at the end of a line. while (temp!=null && !temp.containsPosition(endOffs)) { temp = (TokenImpl)temp.getNextToken(); } if (temp!=null) { temp.textCount = endOffs - temp.getOffset(); temp.setNextToken(null); } return tokenList; } /** * Returns a list of tokens representing the given line. * * @param line The line number to get tokens for. * @return A linked list of tokens representing the line's text. */ public Token getTokenListForLine(int line) { return ((RSyntaxDocument)getDocument()).getTokenListForLine(line); } /** * Returns the painter to use for rendering tokens. * * @return The painter to use for rendering tokens. */ TokenPainter getTokenPainter() { return tokenPainter; } /** * Returns the tool tip to display for a mouse event at the given * location. This method is overridden to give a registered parser a * chance to display a tool tip (such as an error description when the * mouse is over an error highlight). * * @param e The mouse event. */ @Override public String getToolTipText(MouseEvent e) { // Apple JVMS (Java 6 and prior) have their ToolTipManager events // repeat for some reason, so this method gets called every 1 second // or so. We short-circuit that since some ToolTipManagers may do // expensive calculations (e.g. language supports). if (RSyntaxUtilities.getOS()==RSyntaxUtilities.OS_MAC_OSX) { Point newLoc = e.getPoint(); if (newLoc!=null && newLoc.equals(cachedTipLoc)) { return cachedTip; } cachedTipLoc = newLoc; } return cachedTip = getToolTipTextImpl(e); } /** * Does the dirty work of getting the tool tip text. * * @param e The mouse event. * @return The tool tip text. */ protected String getToolTipTextImpl(MouseEvent e) { // Check parsers for tool tips first. String text = null; URL imageBase = null; if (parserManager!=null) { ToolTipInfo info = parserManager.getToolTipText(e); if (info!=null) { // Should always be true text = info.getToolTipText(); // May be null imageBase = info.getImageBase(); // May be null } } if (text==null) { text = super.getToolTipText(e); } // Do we want to use "focusable" tips? if (getUseFocusableTips()) { if (text!=null) { if (focusableTip==null) { focusableTip = new FocusableTip(this, parserManager); } focusableTip.setImageBase(imageBase); focusableTip.toolTipRequested(e, text); } // No tool tip text at new location - hide tip window if one is // currently visible else if (focusableTip!=null) { focusableTip.possiblyDisposeOfTipWindow(); } return null; } return text; // Standard tool tips } /** * Returns whether the specified token should be underlined. * A token is underlined if its syntax style includes underlining, * or if it is a hyperlink and hyperlinks are enabled. * * @param t The token. * @return Whether the specified token should be underlined. */ public boolean getUnderlineForToken(Token t) { return (getHyperlinksEnabled() && (t.isHyperlink() || (linkGeneratorResult!=null && linkGeneratorResult.getSourceOffset()==t.getOffset()))) || syntaxScheme.getStyle(t.getType()).underline; } /** * Returns whether "focusable" tool tips are used instead of standard * ones. Focusable tool tips are tool tips that the user can click on, * resize, copy from, and click links in. * * @return Whether to use focusable tool tips. * @see #setUseFocusableTips(boolean) * @see FocusableTip */ public boolean getUseFocusableTips() { return useFocusableTips; } /** * Returns whether selected text should use the "selected text color" * property set via {@link #setSelectedTextColor(Color)}. This is the * typical behavior of text components. By default, RSyntaxTextArea does * not do this, so that token styles are visible even in selected regions * of text. * * @return Whether the "selected text" color is used when painting text * in selected regions. * @see #setUseSelectedTextColor(boolean) */ public boolean getUseSelectedTextColor() { return useSelectedTextColor; } /** * Called by constructors to initialize common properties of the text * editor. */ @Override protected void init() { super.init(); metricsNeverRefreshed = true; tokenPainter = new DefaultTokenPainter(); // NOTE: Our actions are created here instead of in a static block // so they are only created when the first RTextArea is instantiated, // not before. There have been reports of users calling static getters // (e.g. RSyntaxTextArea.getDefaultBracketMatchBGColor()) which would // cause these actions to be created and (possibly) incorrectly // localized, if they were in a static block. if (toggleCurrentFoldAction==null) { createRstaPopupMenuActions(); } // Set some RSyntaxTextArea default values. syntaxStyleKey = SYNTAX_STYLE_NONE; setMatchedBracketBGColor(getDefaultBracketMatchBGColor()); setMatchedBracketBorderColor(getDefaultBracketMatchBorderColor()); setBracketMatchingEnabled(true); setAnimateBracketMatching(true); lastBracketMatchPos = -1; setSelectionColor(getDefaultSelectionColor()); setTabLineColor(null); setMarkOccurrencesColor(MarkOccurrencesSupport.DEFAULT_COLOR); foldManager = new FoldManager(this); // Set auto-indent related stuff. setAutoIndentEnabled(true); setCloseCurlyBraces(true); setCloseMarkupTags(true); setClearWhitespaceLinesEnabled(true); setHyperlinksEnabled(true); setLinkScanningMask(InputEvent.CTRL_DOWN_MASK); setHyperlinkForeground(Color.BLUE); isScanningForLinks = false; setUseFocusableTips(true); //setAntiAliasingEnabled(true); setDefaultAntiAliasingState(); restoreDefaultSyntaxScheme(); setHighlightSecondaryLanguages(true); secondaryLanguageBackgrounds = new Color[3]; secondaryLanguageBackgrounds[0] = new Color(0xfff0cc); secondaryLanguageBackgrounds[1] = new Color(0xdafeda); secondaryLanguageBackgrounds[2] = new Color(0xffe0f0); setRightHandSideCorrection(0); } /** * Returns whether or not auto-indent is enabled. * * @return Whether or not auto-indent is enabled. * @see #setAutoIndentEnabled(boolean) */ public boolean isAutoIndentEnabled() { return autoIndentEnabled; } /** * Returns whether or not bracket matching is enabled. * * @return true iff bracket matching is enabled. * @see #setBracketMatchingEnabled */ public final boolean isBracketMatchingEnabled() { return bracketMatchingEnabled; } /** * Returns whether or not lines containing nothing but whitespace are made * into blank lines when Enter is pressed in them. * * @return Whether or not whitespace-only lines are cleared when * the user presses Enter on them. * @see #setClearWhitespaceLinesEnabled(boolean) */ public boolean isClearWhitespaceLinesEnabled() { return clearWhitespaceLines; } /** * Returns whether code folding is enabled. Note that only certain * languages support code folding; those that do not will ignore this * property. * * @return Whether code folding is enabled. * @see #setCodeFoldingEnabled(boolean) */ public boolean isCodeFoldingEnabled() { return foldManager.isCodeFoldingEnabled(); } /** * Returns whether whitespace (spaces and tabs) is visible. * * @return Whether whitespace is visible. * @see #setWhitespaceVisible(boolean) * @see #getEOLMarkersVisible() */ public boolean isWhitespaceVisible() { return whitespaceVisible; } /** * Returns the token at the specified position in the model. * * @param offs The position in the model. * @return The token, or null if no token is at that * position. * @see #viewToToken(Point) */ public Token modelToToken(int offs) { if (offs>=0) { try { int line = getLineOfOffset(offs); Token t = getTokenListForLine(line); return RSyntaxUtilities.getTokenAtOffset(t, offs); } catch (BadLocationException ble) { ble.printStackTrace(); // Never happens } } return null; } /** * The paintComponent method is overridden so we * apply any necessary rendering hints to the Graphics object. */ @Override protected void paintComponent(Graphics g) { // A call to refreshFontMetrics() used to be in addNotify(), but // unfortunately we cannot always get the graphics context there. If // the parent frame/dialog is LAF-decorated, there is a chance that the // window's width and/or height is still == 0 at addNotify() (e.g. // WebLaF). So unfortunately it's safest to do this here, with a flag // to only allow it to happen once. if (metricsNeverRefreshed) { refreshFontMetrics(getGraphics2D(getGraphics())); metricsNeverRefreshed = false; } super.paintComponent(getGraphics2D(g)); } private void refreshFontMetrics(Graphics2D g2d) { // It is assumed that any rendering hints are already applied to g2d. defaultFontMetrics = g2d.getFontMetrics(getFont()); syntaxScheme.refreshFontMetrics(g2d); if (getLineWrap()==false) { // HORRIBLE HACK! The un-wrapped view needs to refresh its cached // longest line information. SyntaxView sv = (SyntaxView)getUI().getRootView(this).getView(0); sv.calculateLongestLine(); } } /** * {@inheritDoc} */ @Override public void redoLastAction() { super.redoLastAction(); // Occasionally marked occurrences' Positions are in invalid states // due to how javax.swing.text.AbstractDocument tracks the start and // end offsets. This is usually not needed, but can be when the last // token in the Document is a marked occurrence, and an undo or redo // occurs which clears most of the document text. In that case it is // possible for the end Position to be reset to something small, but // the start offset to be its prior valid (start > end). ((RSyntaxTextAreaHighlighter)getHighlighter()). clearMarkOccurrencesHighlights(); } /** * Removes an "active line range" listener from this text area. * * @param l The listener to remove. * @see #removeActiveLineRangeListener(ActiveLineRangeListener) */ public void removeActiveLineRangeListener(ActiveLineRangeListener l) { listenerList.remove(ActiveLineRangeListener.class, l); } /** * Removes a hyperlink listener from this text area. * * @param l The listener to remove. * @see #addHyperlinkListener(HyperlinkListener) */ public void removeHyperlinkListener(HyperlinkListener l) { listenerList.remove(HyperlinkListener.class, l); } /** * Overridden so we stop this text area's parsers, if any. */ @Override public void removeNotify() { if (parserManager!=null) { parserManager.stopParsing(); } super.removeNotify(); } /** * Removes a parser from this text area. * * @param parser The {@link Parser} to remove. * @return Whether the parser was found and removed. * @see #clearParsers() * @see #addParser(Parser) * @see #getParser(int) */ public boolean removeParser(Parser parser) { boolean removed = false; if (parserManager!=null) { removed = parserManager.removeParser(parser); } return removed; } /** * Sets the colors used for syntax highlighting to their defaults. * * @see #setSyntaxScheme(SyntaxScheme) * @see #getSyntaxScheme() * @see #getDefaultSyntaxScheme() */ public void restoreDefaultSyntaxScheme() { setSyntaxScheme(getDefaultSyntaxScheme()); } /** * Attempts to save all currently-known templates to the current template * directory, as set by setTemplateDirectory. Templates * will be saved as XML files with names equal to their abbreviations; for * example, a template that expands on the word "forb" will be saved as * forb.xml. * * @return Whether or not the save was successful. The save will * be unsuccessful if the template directory does not exist or * if it has not been set (i.e., you have not yet called * setTemplateDirectory). * @see #getTemplatesEnabled * @see #setTemplateDirectory * @see #setTemplatesEnabled */ public static synchronized boolean saveTemplates() { if (!getTemplatesEnabled()) { return false; } return getCodeTemplateManager().saveTemplates(); } /** * Sets the "active line range." Note that this * RSyntaxTextArea itself does nothing with this information, * but if it is contained inside an {@link RTextScrollPane}, the active * line range may be displayed in the icon area of the {@link Gutter}.

* * Note that basic users of RSyntaxTextArea will not call this * method directly; rather, it is usually called by instances of * LanguageSupport in the RSTALangaugeSupport * library. See http://fifesoft.com * for more information about this library. * * @param min The "minimum" line in the active line range, or * -1 if the range is being cleared. * @param max The "maximum" line in the active line range, or * -1 if the range is being cleared. * @see #addActiveLineRangeListener(ActiveLineRangeListener) */ public void setActiveLineRange(int min, int max) { if (min==-1) { max = -1; // Force max to be -1 if min is. } fireActiveLineRangeEvent(min, max); } /** * Sets whether bracket matching should be animated. This fires a property * change event of type {@link #ANIMATE_BRACKET_MATCHING_PROPERTY}. * * @param animate Whether to animate bracket matching. * @see #getAnimateBracketMatching() */ public void setAnimateBracketMatching(boolean animate) { if (animate!=animateBracketMatching) { animateBracketMatching = animate; if (animate && bracketRepaintTimer==null) { bracketRepaintTimer = new BracketMatchingTimer(); } firePropertyChange(ANIMATE_BRACKET_MATCHING_PROPERTY, !animate, animate); } } /** * Sets whether anti-aliasing is enabled in this editor. This method * fires a property change event of type {@link #ANTIALIAS_PROPERTY}. * * @param enabled Whether anti-aliasing is enabled. * @see #getAntiAliasingEnabled() */ public void setAntiAliasingEnabled(boolean enabled) { boolean currentlyEnabled = aaHints!=null; if (enabled!=currentlyEnabled) { if (enabled) { aaHints = RSyntaxUtilities.getDesktopAntiAliasHints(); // If the desktop query method comes up empty, use the standard // Java2D greyscale method. Note this will likely NOT be as // nice as what would be used if the getDesktopAntiAliasHints() // call worked. if (aaHints==null) { Map temp = new HashMap(); temp.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); aaHints = temp; } } else { aaHints = null; } // We must be connected to a screen resource for our graphics // to be non-null. if (isDisplayable()) { refreshFontMetrics(getGraphics2D(getGraphics())); } firePropertyChange(ANTIALIAS_PROPERTY, !enabled, enabled); repaint(); } } /** * Sets whether or not auto-indent is enabled. This fires a property * change event of type {@link #AUTO_INDENT_PROPERTY}. * * @param enabled Whether or not auto-indent is enabled. * @see #isAutoIndentEnabled() */ public void setAutoIndentEnabled(boolean enabled) { if (autoIndentEnabled!=enabled) { autoIndentEnabled = enabled; firePropertyChange(AUTO_INDENT_PROPERTY, !enabled, enabled); } } /** * Sets whether bracket matching is enabled. This fires a property change * event of type {@link #BRACKET_MATCHING_PROPERTY}. * * @param enabled Whether or not bracket matching should be enabled. * @see #isBracketMatchingEnabled() */ public void setBracketMatchingEnabled(boolean enabled) { if (enabled!=bracketMatchingEnabled) { bracketMatchingEnabled = enabled; repaint(); firePropertyChange(BRACKET_MATCHING_PROPERTY, !enabled, enabled); } } /** * Sets whether or not lines containing nothing but whitespace are made * into blank lines when Enter is pressed in them. This method fires * a property change event of type {@link #CLEAR_WHITESPACE_LINES_PROPERTY}. * * @param enabled Whether or not whitespace-only lines are cleared when * the user presses Enter on them. * @see #isClearWhitespaceLinesEnabled() */ public void setClearWhitespaceLinesEnabled(boolean enabled) { if (enabled!=clearWhitespaceLines) { clearWhitespaceLines = enabled; firePropertyChange(CLEAR_WHITESPACE_LINES_PROPERTY, !enabled, enabled); } } /** * Toggles whether curly braces should be automatically closed when a * newline is entered after an opening curly brace. Note that this * property is only honored for languages that use curly braces to denote * code blocks.

* * This method fires a property change event of type * {@link #CLOSE_CURLY_BRACES_PROPERTY}. * * @param close Whether curly braces should be automatically closed. * @see #getCloseCurlyBraces() */ public void setCloseCurlyBraces(boolean close) { if (close!=closeCurlyBraces) { closeCurlyBraces = close; firePropertyChange(CLOSE_CURLY_BRACES_PROPERTY, !close, close); } } /** * Sets whether closing markup tags should be automatically completed * when "</" is typed. Note that this property is only * honored for markup languages, such as HTML, XML and PHP.

* * This method fires a property change event of type * {@link #CLOSE_MARKUP_TAGS_PROPERTY}. * * @param close Whether closing markup tags should be automatically * completed. * @see #getCloseMarkupTags() */ public void setCloseMarkupTags(boolean close) { if (close!=closeMarkupTags) { closeMarkupTags = close; firePropertyChange(CLOSE_MARKUP_TAGS_PROPERTY, !close, close); } } /** * Sets whether code folding is enabled. Note that only certain * languages will support code folding out of the box. Those languages * which do not support folding will ignore this property.

* This method fires a property change event of type * {@link #CODE_FOLDING_PROPERTY}. * * @param enabled Whether code folding should be enabled. * @see #isCodeFoldingEnabled() */ public void setCodeFoldingEnabled(boolean enabled) { if (enabled!=foldManager.isCodeFoldingEnabled()) { foldManager.setCodeFoldingEnabled(enabled); firePropertyChange(CODE_FOLDING_PROPERTY, !enabled, enabled); } } /** * Sets anti-aliasing to whatever the user's desktop value is. * * @see #getAntiAliasingEnabled() */ private final void setDefaultAntiAliasingState() { // Most accurate technique, but not available on all OSes. aaHints = RSyntaxUtilities.getDesktopAntiAliasHints(); if (aaHints==null) { Map temp = new HashMap(); // In Java 6+, you can figure out what text AA hint Swing uses for // JComponents... JLabel label = new JLabel(); FontMetrics fm = label.getFontMetrics(label.getFont()); Object hint = null; //FontRenderContext frc = fm.getFontRenderContext(); //hint = fm.getAntiAliasingHint(); try { Method m = FontMetrics.class.getMethod("getFontRenderContext"); FontRenderContext frc = (FontRenderContext)m.invoke(fm); m = FontRenderContext.class.getMethod("getAntiAliasingHint"); hint = m.invoke(frc); } catch (RuntimeException re) { throw re; // FindBugs } catch (Exception e) { // Swallow, either Java 1.5, or running in an applet } // If not running Java 6+, default to AA enabled on Windows where // the software AA is pretty fast, and default (e.g. disabled) on // non-Windows. Note that OS X always uses AA no matter what // rendering hints you give it, so this is a moot point there. //System.out.println("Rendering hint: " + hint); if (hint==null) { String os = System.getProperty("os.name").toLowerCase(); if (os.contains("windows")) { hint = RenderingHints.VALUE_TEXT_ANTIALIAS_ON; } else { hint = RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT; } } temp.put(RenderingHints.KEY_TEXT_ANTIALIASING, hint); aaHints = temp; } // We must be connected to a screen resource for our graphics // to be non-null. if (isDisplayable()) { refreshFontMetrics(getGraphics2D(getGraphics())); } repaint(); } /** * Sets the document used by this text area. This is overridden so that * only instances of {@link RSyntaxDocument} are accepted; for all * others, an exception will be thrown. * * @param document The new document for this text area. * @throws IllegalArgumentException If the document is not an * RSyntaxDocument. */ @Override public void setDocument(Document document) { if (!(document instanceof RSyntaxDocument)) throw new IllegalArgumentException("Documents for " + "RSyntaxTextArea must be instances of " + "RSyntaxDocument!"); if (markOccurrencesSupport != null) { markOccurrencesSupport.clear(); } super.setDocument(document); setSyntaxEditingStyle(((RSyntaxDocument)document).getSyntaxStyle()); if (markOccurrencesSupport != null) { markOccurrencesSupport.doMarkOccurrences(); } } /** * Sets whether EOL markers are visible at the end of each line. This * method fires a property change of type {@link #EOL_VISIBLE_PROPERTY}. * * @param visible Whether EOL markers are visible. * @see #getEOLMarkersVisible() * @see #setWhitespaceVisible(boolean) */ public void setEOLMarkersVisible(boolean visible) { if (visible!=eolMarkersVisible) { eolMarkersVisible = visible; repaint(); firePropertyChange(EOL_VISIBLE_PROPERTY, !visible, visible); } } /** * Sets the font used by this text area. Note that if some token styles * are using a different font, they will not be changed by calling this * method. To set different fonts on individual token types, use the * text area's SyntaxScheme. * * @param font The font. * @see SyntaxScheme#getStyle(int) */ @Override public void setFont(Font font) { Font old = super.getFont(); super.setFont(font); // Do this first. // Usually programmers keep a single font for all token types, but // may use bold or italic for styling some. SyntaxScheme scheme = getSyntaxScheme(); if (scheme!=null && old!=null) { scheme.changeBaseFont(old, font); calculateLineHeight(); } // We must be connected to a screen resource for our // graphics to be non-null. if (isDisplayable()) { refreshFontMetrics(getGraphics2D(getGraphics())); // Updates the margin line. updateMarginLineX(); // Force the current line highlight to be repainted, even // though the caret's location hasn't changed. forceCurrentLineHighlightRepaint(); // Get line number border in text area to repaint again // since line heights have updated. firePropertyChange("font", old, font); // So parent JScrollPane will have its scrollbars updated. revalidate(); } } /** * Sets whether fractional font metrics are enabled. This method fires * a property change event of type {@link #FRACTIONAL_FONTMETRICS_PROPERTY}. * * @param enabled Whether fractional font metrics are enabled. * @see #getFractionalFontMetricsEnabled() */ public void setFractionalFontMetricsEnabled(boolean enabled) { if (fractionalFontMetricsEnabled!=enabled) { fractionalFontMetricsEnabled = enabled; // We must be connected to a screen resource for our graphics to be // non-null. if (isDisplayable()) { refreshFontMetrics(getGraphics2D(getGraphics())); } firePropertyChange(FRACTIONAL_FONTMETRICS_PROPERTY, !enabled, enabled); } } /** * Sets the highlighter used by this text area. * * @param h The highlighter. * @throws IllegalArgumentException If h is not an instance * of {@link RSyntaxTextAreaHighlighter}. */ @Override public void setHighlighter(Highlighter h) { if (!(h instanceof RSyntaxTextAreaHighlighter)) { throw new IllegalArgumentException("RSyntaxTextArea requires " + "an RSyntaxTextAreaHighlighter for its Highlighter"); } super.setHighlighter(h); } /** * Sets whether "secondary" languages should have their backgrounds * colored differently to visually differentiate them. This feature * imposes a fair performance penalty. This method fires a property change * event of type {@link #HIGHLIGHT_SECONDARY_LANGUAGES_PROPERTY}. * * @see #getHighlightSecondaryLanguages() * @see #setSecondaryLanguageBackground(int, Color) * @see #getSecondaryLanguageCount() */ public void setHighlightSecondaryLanguages(boolean highlight) { if (this.highlightSecondaryLanguages!=highlight) { highlightSecondaryLanguages = highlight; repaint(); firePropertyChange(HIGHLIGHT_SECONDARY_LANGUAGES_PROPERTY, !highlight, highlight); } } /** * Sets the color to use when painting hyperlinks. * * @param fg The color to use when painting hyperlinks. * @throws NullPointerException If fg is null. * @see #getHyperlinkForeground() * @see #setHyperlinksEnabled(boolean) */ public void setHyperlinkForeground(Color fg) { if (fg==null) { throw new NullPointerException("fg cannot be null"); } hyperlinkFG = fg; } /** * Sets whether hyperlinks are enabled for this text area. This method * fires a property change event of type * {@link #HYPERLINKS_ENABLED_PROPERTY}. * * @param enabled Whether hyperlinks are enabled. * @see #getHyperlinksEnabled() */ public void setHyperlinksEnabled(boolean enabled) { if (this.hyperlinksEnabled!=enabled) { this.hyperlinksEnabled = enabled; repaint(); firePropertyChange(HYPERLINKS_ENABLED_PROPERTY, !enabled, enabled); } } public void setLinkGenerator(LinkGenerator generator) { this.linkGenerator = generator; } /** * Sets the mask for the key used to toggle whether we are scanning for * hyperlinks with mouse hovering. The default value is * CTRL_DOWN_MASK. * * @param mask The mask to use. This should be some bitwise combination of * {@link InputEvent#CTRL_DOWN_MASK}, * {@link InputEvent#ALT_DOWN_MASK}, * {@link InputEvent#SHIFT_DOWN_MASK} or * {@link InputEvent#META_DOWN_MASK}. * For invalid values, behavior is undefined. * @see InputEvent */ public void setLinkScanningMask(int mask) { mask &= (InputEvent.CTRL_DOWN_MASK|InputEvent.META_DOWN_MASK| InputEvent.ALT_DOWN_MASK|InputEvent.SHIFT_DOWN_MASK); if (mask==0) { throw new IllegalArgumentException("mask argument should be " + "some combination of InputEvent.*_DOWN_MASK fields"); } linkScanningMask = mask; } /** * Toggles whether "mark occurrences" is enabled. This method fires a * property change event of type {@link #MARK_OCCURRENCES_PROPERTY}. * * @param markOccurrences Whether "Mark Occurrences" should be enabled. * @see #getMarkOccurrences() * @see #setMarkOccurrencesColor(Color) */ public void setMarkOccurrences(boolean markOccurrences) { if (markOccurrences) { if (markOccurrencesSupport==null) { markOccurrencesSupport = new MarkOccurrencesSupport(); markOccurrencesSupport.install(this); firePropertyChange(MARK_OCCURRENCES_PROPERTY, false, true); } } else { if (markOccurrencesSupport!=null) { markOccurrencesSupport.uninstall(); markOccurrencesSupport = null; firePropertyChange(MARK_OCCURRENCES_PROPERTY, true, false); } } } /** * Sets the "mark occurrences" color. * * @param color The new color. This cannot be null. * @see #getMarkOccurrencesColor() * @see #setMarkOccurrences(boolean) */ public void setMarkOccurrencesColor(Color color) { markOccurrencesColor = color; if (markOccurrencesSupport!=null) { markOccurrencesSupport.setColor(color); } } /** * Sets the color used as the background for a matched bracket. * * @param color The color to use. If this is null, then no * special background is painted behind a matched bracket. * @see #getMatchedBracketBGColor * @see #setMatchedBracketBorderColor * @see #setPaintMarkOccurrencesBorder(boolean) */ public void setMatchedBracketBGColor(Color color) { matchedBracketBGColor = color; if (match!=null) { repaint(); } } /** * Sets the color used as the border for a matched bracket. * * @param color The color to use. * @see #getMatchedBracketBorderColor * @see #setMatchedBracketBGColor */ public void setMatchedBracketBorderColor(Color color) { matchedBracketBorderColor = color; if (match!=null) { repaint(); } } /** * Toggles whether a border should be painted around marked occurrences. * * @param paintBorder Whether to paint a border. * @see #getPaintMarkOccurrencesBorder() * @see #setMarkOccurrencesColor(Color) * @see #setMarkOccurrences(boolean) */ public void setPaintMarkOccurrencesBorder(boolean paintBorder) { paintMarkOccurrencesBorder = paintBorder; if (markOccurrencesSupport!=null) { markOccurrencesSupport.setPaintBorder(paintBorder); } } /** * Sets whether the bracket at the caret position is painted as a "match" * when a matched bracket is found. Note that this property does nothing * if {@link #isBracketMatchingEnabled()} returns false.

* * This method fires a property change event of type * {@link #PAINT_MATCHED_BRACKET_PAIR_PROPERTY}. * * @param paintPair Whether both brackets in a bracket pair should be * highlighted when bracket matching is enabled. * @see #getPaintMatchedBracketPair() * @see #isBracketMatchingEnabled() * @see #setBracketMatchingEnabled(boolean) */ public void setPaintMatchedBracketPair(boolean paintPair) { if (paintPair!=paintMatchedBracketPair) { paintMatchedBracketPair = paintPair; doBracketMatching(); repaint(); firePropertyChange(PAINT_MATCHED_BRACKET_PAIR_PROPERTY, !paintMatchedBracketPair, paintMatchedBracketPair); } } /** * Toggles whether tab lines are painted. This method fires a property * change event of type {@link #TAB_LINES_PROPERTY}. * * @param paint Whether tab lines are painted. * @see #getPaintTabLines() * @see #setTabLineColor(Color) */ public void setPaintTabLines(boolean paint) { if (paint!=paintTabLines) { paintTabLines = paint; repaint(); firePropertyChange(TAB_LINES_PROPERTY, !paint, paint); } } /** * Sets the parser delay. This is the delay that must occur between edits * for any registered {@link Parser}s to run. * * @param millis The new parser delay, in milliseconds. This must be * greater than zero. * @see #getParserDelay() */ public void setParserDelay(int millis) { if (parserManager==null) { parserManager = new ParserManager(this); } parserManager.setDelay(millis); } /** * Applications typically have no need to modify this value.

* * Workaround for JTextComponents allowing the caret to be rendered * entirely off-screen if the entire "previous" character fit entirely. * * @param rhsCorrection The amount of space to add to the x-axis preferred * span. This should be non-negative. * @see #getRightHandSideCorrection() */ public void setRightHandSideCorrection(int rhsCorrection) { if (rhsCorrection<0) { throw new IllegalArgumentException("correction should be > 0"); } if (rhsCorrection!=this.rhsCorrection) { this.rhsCorrection = rhsCorrection; revalidate(); repaint(); } } /** * Sets the background color to use for a secondary language. * * @param index The language index. Note that these are 1-based, not * 0-based, and should be in the range * 1-getSecondaryLanguageCount(), inclusive. * @param color The new color, or null for none. * @see #getSecondaryLanguageBackground(int) * @see #getSecondaryLanguageCount() */ public void setSecondaryLanguageBackground(int index, Color color) { index--; Color old = secondaryLanguageBackgrounds[index]; if ((color==null && old!=null) || (color!=null && !color.equals(old))) { secondaryLanguageBackgrounds[index] = color; if (getHighlightSecondaryLanguages()) { repaint(); } } } /** * Sets what type of syntax highlighting this editor is doing. This method * fires a property change of type {@link #SYNTAX_STYLE_PROPERTY}. * * @param styleKey The syntax editing style to use, for example, * {@link SyntaxConstants#SYNTAX_STYLE_NONE} or * {@link SyntaxConstants#SYNTAX_STYLE_JAVA}. * @see #getSyntaxEditingStyle() * @see SyntaxConstants */ public void setSyntaxEditingStyle(String styleKey) { if (styleKey==null) { styleKey = SYNTAX_STYLE_NONE; } if (!styleKey.equals(syntaxStyleKey)) { String oldStyle = syntaxStyleKey; syntaxStyleKey = styleKey; ((RSyntaxDocument)getDocument()).setSyntaxStyle(styleKey); firePropertyChange(SYNTAX_STYLE_PROPERTY, oldStyle, styleKey); setActiveLineRange(-1, -1); } } /** * Sets all of the colors used in syntax highlighting to the colors * specified. This uses a shallow copy of the color scheme so that * multiple text areas can share the same color scheme and have their * properties changed simultaneously.

* * This method fires a property change event of type * {@link #SYNTAX_SCHEME_PROPERTY}. * * @param scheme The instance of SyntaxScheme to use. * @see #getSyntaxScheme() */ public void setSyntaxScheme(SyntaxScheme scheme) { // NOTE: We don't check whether colorScheme is the same as the // current scheme because DecreaseFontSizeAction and // IncreaseFontSizeAction need it this way. // FIXME: Find a way around this. SyntaxScheme old = this.syntaxScheme; this.syntaxScheme = scheme; // Recalculate the line height. We do this here instead of in // refreshFontMetrics() as this method is called less often and we // don't need the rendering hints to get the font's height. calculateLineHeight(); if (isDisplayable()) { refreshFontMetrics(getGraphics2D(getGraphics())); } // Updates the margin line and "matched bracket" highlight updateMarginLineX(); lastBracketMatchPos = -1; doBracketMatching(); // Force the current line highlight to be repainted, even though // the caret's location hasn't changed. forceCurrentLineHighlightRepaint(); // So encompassing JScrollPane will have its scrollbars updated. revalidate(); firePropertyChange(SYNTAX_SCHEME_PROPERTY, old, this.syntaxScheme); } /** * If templates are enabled, all currently-known templates are forgotten * and all templates are loaded from all files in the specified directory * ending in "*.xml". If templates aren't enabled, nothing happens. * * @param dir The directory containing files ending in extension * .xml that contain templates to load. * @return true if the load was successful; * false if either templates aren't currently * enabled or the load failed somehow (most likely, the * directory doesn't exist). * @see #getTemplatesEnabled * @see #setTemplatesEnabled * @see #saveTemplates */ public static synchronized boolean setTemplateDirectory(String dir) { if (getTemplatesEnabled() && dir!=null) { File directory = new File(dir); if (directory.isDirectory()) { return getCodeTemplateManager(). setTemplateDirectory(directory)>-1; } boolean created = directory.mkdir(); if (created) { return getCodeTemplateManager(). setTemplateDirectory(directory)>-1; } } return false; } /** * Enables or disables templates.

* * Templates are a set of "shorthand identifiers" that you can configure * so that you only have to type a short identifier (such as "forb") to * insert a larger amount of code into the document (such as:

* *

	 *   for (<caret>) {
	 *
	 *   }
	 * 
* * Templates are a shared resource among all instances of * RSyntaxTextArea; that is, templates can only be * enabled/disabled for all text areas globally, not individually, and * all text areas have access of the same templates. This should not * be an issue; rather, it should be beneficial as it promotes * uniformity among all text areas in an application.

* * For more flexible boilerplate code insertion, consider using the * TemplateCompletion * class in the * AutoComplete * add-on library. * * @param enabled Whether or not templates should be enabled. * @see #getTemplatesEnabled() */ public static synchronized void setTemplatesEnabled(boolean enabled) { templatesEnabled = enabled; } /** * Sets the color use to paint tab lines. This method fires a property * change event of type {@link #TAB_LINE_COLOR_PROPERTY}. * * @param c The color. If this value is null, the default * (gray) is used. * @see #getTabLineColor() * @see #setPaintTabLines(boolean) * @see #getPaintTabLines() */ public void setTabLineColor(Color c) { if (c==null) { c = Color.gray; } if (!c.equals(tabLineColor)) { Color old = tabLineColor; tabLineColor = c; if (getPaintTabLines()) { repaint(); } firePropertyChange(TAB_LINE_COLOR_PROPERTY, old, tabLineColor); } } /** * Sets whether "focusable" tool tips are used instead of standard ones. * Focusable tool tips are tool tips that the user can click on, * resize, copy from, and clink links in. This method fires a property * change event of type {@link #FOCUSABLE_TIPS_PROPERTY}. * * @param use Whether to use focusable tool tips. * @see #getUseFocusableTips() * @see FocusableTip */ public void setUseFocusableTips(boolean use) { if (use!=useFocusableTips) { useFocusableTips = use; firePropertyChange(FOCUSABLE_TIPS_PROPERTY, !use, use); } } /** * Sets whether selected text should use the "selected text color" property * (set via {@link #setSelectedTextColor(Color)}). This is the typical * behavior of text components. By default, RSyntaxTextArea does not do * this, so that token styles are visible even in selected regions of text. * This method fires a property change event of type * {@link #USE_SELECTED_TEXT_COLOR_PROPERTY}. * * @param use Whether to use the "selected text" color when painting text * in selected regions. * @see #getUseSelectedTextColor() */ public void setUseSelectedTextColor(boolean use) { if (use!=useSelectedTextColor) { useSelectedTextColor = use; firePropertyChange(USE_SELECTED_TEXT_COLOR_PROPERTY, !use, use); } } /** * Sets whether whitespace is visible. This method fires a property change * of type {@link #VISIBLE_WHITESPACE_PROPERTY}. * * @param visible Whether whitespace should be visible. * @see #isWhitespaceVisible() */ public void setWhitespaceVisible(boolean visible) { if (whitespaceVisible!=visible) { this.whitespaceVisible = visible; tokenPainter = visible ? new VisibleWhitespaceTokenPainter() : (TokenPainter)new DefaultTokenPainter(); repaint(); firePropertyChange(VISIBLE_WHITESPACE_PROPERTY, !visible, visible); } } /** * Resets the editor state after the user clicks on a hyperlink or releases * the hyperlink modifier. */ private void stopScanningForLinks() { if (isScanningForLinks) { Cursor c = getCursor(); isScanningForLinks = false; linkGeneratorResult = null; hoveredOverLinkOffset = -1; if (c!=null && c.getType()==Cursor.HAND_CURSOR) { setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR)); repaint(); // TODO: Repaint just the affected line. } } } /** * {@inheritDoc} */ @Override public void undoLastAction() { super.undoLastAction(); // Occasionally marked occurrences' Positions are in invalid states // due to how javax.swing.text.AbstractDocument tracks the start and // end offsets. This is usually not needed, but can be when the last // token in the Document is a marked occurrence, and an undo or redo // occurs which clears most of the document text. In that case it is // possible for the end Position to be reset to something small, but // the start offset to be its prior valid (start > end). ((RSyntaxTextAreaHighlighter)getHighlighter()). clearMarkOccurrencesHighlights(); } /** * Returns the token at the specified position in the view. * * @param p The position in the view. * @return The token, or null if no token is at that * position. * @see #modelToToken(int) */ /* * TODO: This is a little inefficient. This should convert view * coordinates to the underlying token (if any). The way things currently * are, we're calling getTokenListForLine() twice (once in viewToModel() * and once here). */ public Token viewToToken(Point p) { return modelToToken(viewToModel(p)); } /** * A timer that animates the "bracket matching" animation. */ private class BracketMatchingTimer extends Timer implements ActionListener { private int pulseCount; public BracketMatchingTimer() { super(20, null); addActionListener(this); setCoalesce(false); } public void actionPerformed(ActionEvent e) { if (isBracketMatchingEnabled()) { if (match!=null) { updateAndInvalidate(match); } if (dotRect!=null && getPaintMatchedBracketPair()) { updateAndInvalidate(dotRect); } if (++pulseCount==8) { pulseCount = 0; stop(); } } } private void init(Rectangle r) { r.x += 3; r.y += 3; r.width -= 6; r.height -= 6; // So animation can "grow" match } @Override public void start() { init(match); if (dotRect!=null && getPaintMatchedBracketPair()) { init(dotRect); } pulseCount = 0; super.start(); } private void updateAndInvalidate(Rectangle r) { if (pulseCount<5) { r.x--; r.y--; r.width += 2; r.height += 2; repaint(r.x,r.y, r.width,r.height); } else if (pulseCount<7) { r.x++; r.y++; r.width -= 2; r.height -= 2; repaint(r.x-2,r.y-2, r.width+5,r.height+5); } } } /** * Handles hyperlinks. */ private class RSyntaxTextAreaMutableCaretEvent extends RTextAreaMutableCaretEvent { private Insets insets; protected RSyntaxTextAreaMutableCaretEvent(RTextArea textArea) { super(textArea); insets = new Insets(0, 0, 0, 0); } private HyperlinkEvent createHyperlinkEvent() { HyperlinkEvent he = null; if (linkGeneratorResult!=null) { he = linkGeneratorResult.execute(); linkGeneratorResult = null; } else { Token t = modelToToken(hoveredOverLinkOffset); URL url = null; String desc = null; try { String temp = t.getLexeme(); // URI's need "http://" prefix for web URL's to work. if (temp.startsWith("www.")) { temp = "http://" + temp; } url = new URL(temp); } catch (MalformedURLException mue) { desc = mue.getMessage(); } he = new HyperlinkEvent(RSyntaxTextArea.this, HyperlinkEvent.EventType.ACTIVATED, url, desc); } return he; } private final boolean equal(LinkGeneratorResult e1, LinkGeneratorResult e2) { return e1.getSourceOffset()==e2.getSourceOffset(); } @Override public void mouseClicked(MouseEvent e) { if (getHyperlinksEnabled() && isScanningForLinks && hoveredOverLinkOffset>-1) { HyperlinkEvent he = createHyperlinkEvent(); if (he!=null) { fireHyperlinkUpdate(he); } stopScanningForLinks(); } } @Override public void mouseMoved(MouseEvent e) { super.mouseMoved(e); if (!getHyperlinksEnabled()) { return; } // If our link scanning mask is pressed... if ((e.getModifiersEx()&linkScanningMask)==linkScanningMask) { // GitHub issue #25 - links identified at "edges" of editor // should not be activated if mouse is in margin insets. insets = getInsets(insets); if (insets!=null) { int x = e.getX(); int y = e.getY(); if (x<=insets.left || yRSyntaxTextArea. * Currently, the new key bindings include: *

    *
  • Shift+Tab indents the current line or currently selected lines * to the left. *
* * @author Robert Futrell * @version 1.0 */ public class RSyntaxTextAreaDefaultInputMap extends RTADefaultInputMap { /** * Constructs the default input map for an RSyntaxTextArea. */ public RSyntaxTextAreaDefaultInputMap() { int defaultMod = getDefaultModifier(); //int ctrl = InputEvent.CTRL_MASK; int shift = InputEvent.SHIFT_MASK; //int alt = InputEvent.ALT_MASK; int defaultShift = defaultMod|shift; put(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, shift), RSyntaxTextAreaEditorKit.rstaDecreaseIndentAction); put(KeyStroke.getKeyStroke('}'), RSyntaxTextAreaEditorKit.rstaCloseCurlyBraceAction); put(KeyStroke.getKeyStroke('/'), RSyntaxTextAreaEditorKit.rstaCloseMarkupTagAction); int os = RSyntaxUtilities.getOS(); if (os==RSyntaxUtilities.OS_WINDOWS || os==RSyntaxUtilities.OS_MAC_OSX) { // *nix causes trouble with CloseMarkupTagAction and ToggleCommentAction. // It triggers both KEY_PRESSED ctrl+'/' and KEY_TYPED '/' events when the // user presses ctrl+'/', but Windows and OS X do not. If we try to "move" // the KEY_TYPED event for '/' to KEY_PRESSED, it'll work for Linux boxes // with QWERTY keyboard layouts, but non-QUERTY users won't be able to type // a '/' character at all then (!). Rather than try to hack together a // solution by trying to detect the IM locale and do different things for // different OSes & keyboard layouts, we do the simplest thing and // (unfortunately) don't have a ToggleCommentAction for *nix out-of-the-box. // Applications can add one easily enough if they want one. put(KeyStroke.getKeyStroke(KeyEvent.VK_SLASH, defaultMod), RSyntaxTextAreaEditorKit.rstaToggleCommentAction); } put(KeyStroke.getKeyStroke(KeyEvent.VK_OPEN_BRACKET, defaultMod), RSyntaxTextAreaEditorKit.rstaGoToMatchingBracketAction); put(KeyStroke.getKeyStroke(KeyEvent.VK_SUBTRACT, defaultMod), RSyntaxTextAreaEditorKit.rstaCollapseFoldAction); put(KeyStroke.getKeyStroke(KeyEvent.VK_ADD, defaultMod), RSyntaxTextAreaEditorKit.rstaExpandFoldAction); put(KeyStroke.getKeyStroke(KeyEvent.VK_DIVIDE, defaultMod), RSyntaxTextAreaEditorKit.rstaCollapseAllFoldsAction); put(KeyStroke.getKeyStroke(KeyEvent.VK_MULTIPLY, defaultMod), RSyntaxTextAreaEditorKit.rstaExpandAllFoldsAction); // NOTE: no modifiers => mapped to keyTyped. If we had "0" as a second // second parameter, we'd get the template action (keyPressed) AND the // default space action (keyTyped). //put(KeyStroke.getKeyStroke(' '), RSyntaxTextAreaEditorKit.rstaPossiblyInsertTemplateAction); put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, defaultShift), RSyntaxTextAreaEditorKit.rstaPossiblyInsertTemplateAction); } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaEditorKit.java000066400000000000000000001670261257417003700323650ustar00rootroot00000000000000/* * 08/29/2004 * * RSyntaxTextAreaEditorKit.java - The editor kit used by RSyntaxTextArea. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.awt.*; import java.awt.event.*; import java.util.ResourceBundle; import java.util.Stack; import javax.swing.*; import javax.swing.text.*; import org.fife.ui.rsyntaxtextarea.folding.Fold; import org.fife.ui.rsyntaxtextarea.folding.FoldCollapser; import org.fife.ui.rsyntaxtextarea.folding.FoldManager; import org.fife.ui.rsyntaxtextarea.templates.CodeTemplate; import org.fife.ui.rtextarea.Gutter; import org.fife.ui.rtextarea.IconRowHeader; import org.fife.ui.rtextarea.RecordableTextAction; import org.fife.ui.rtextarea.RTextArea; import org.fife.ui.rtextarea.RTextAreaEditorKit; /** * An extension of RTextAreaEditorKit that adds functionality for * programming-specific stuff. There are currently subclasses to handle: * *
    *
  • Toggling code folds.
  • *
  • Aligning "closing" curly braces with their matches, if the current * programming language uses curly braces to identify code blocks.
  • *
  • Copying the current selection as RTF.
  • *
  • Block indentation (increasing the indent of one or multiple lines)
  • *
  • Block un-indentation (decreasing the indent of one or multiple lines) *
  • *
  • Inserting a "code template" when a configurable key (e.g. a space) is * pressed
  • *
  • Decreasing the point size of all fonts in the text area
  • *
  • Increasing the point size of all fonts in the text area
  • *
  • Moving the caret to the "matching bracket" of the one at the current * caret position
  • *
  • Toggling whether the currently selected lines are commented out.
  • *
  • Better selection of "words" on mouse double-clicks for programming * languages.
  • *
  • Better keyboard navigation via Ctrl+arrow keys for programming * languages.
  • *
* * @author Robert Futrell * @version 0.5 */ public class RSyntaxTextAreaEditorKit extends RTextAreaEditorKit { private static final long serialVersionUID = 1L; public static final String rstaCloseCurlyBraceAction = "RSTA.CloseCurlyBraceAction"; public static final String rstaCloseMarkupTagAction = "RSTA.CloseMarkupTagAction"; public static final String rstaCollapseAllFoldsAction = "RSTA.CollapseAllFoldsAction"; public static final String rstaCollapseAllCommentFoldsAction = "RSTA.CollapseAllCommentFoldsAction"; public static final String rstaCollapseFoldAction = "RSTA.CollapseFoldAction"; public static final String rstaCopyAsRtfAction = "RSTA.CopyAsRtfAction"; public static final String rstaDecreaseIndentAction = "RSTA.DecreaseIndentAction"; public static final String rstaExpandAllFoldsAction = "RSTA.ExpandAllFoldsAction"; public static final String rstaExpandFoldAction = "RSTA.ExpandFoldAction"; public static final String rstaGoToMatchingBracketAction = "RSTA.GoToMatchingBracketAction"; public static final String rstaPossiblyInsertTemplateAction = "RSTA.TemplateAction"; public static final String rstaToggleCommentAction = "RSTA.ToggleCommentAction"; public static final String rstaToggleCurrentFoldAction = "RSTA.ToggleCurrentFoldAction"; private static final String MSG = "org.fife.ui.rsyntaxtextarea.RSyntaxTextArea"; private static final ResourceBundle msg = ResourceBundle.getBundle(MSG); /** * The actions that RSyntaxTextAreaEditorKit adds to those of * RTextAreaEditorKit. */ private static final Action[] defaultActions = { new CloseCurlyBraceAction(), new CloseMarkupTagAction(), new BeginWordAction(beginWordAction, false), new BeginWordAction(selectionBeginWordAction, true), new ChangeFoldStateAction(rstaCollapseFoldAction, true), new ChangeFoldStateAction(rstaExpandFoldAction, false), new CollapseAllFoldsAction(), new CopyAsRtfAction(), //new DecreaseFontSizeAction(), new DecreaseIndentAction(), new DeletePrevWordAction(), new DumbCompleteWordAction(), new EndAction(endAction, false), new EndAction(selectionEndAction, true), new EndWordAction(endWordAction, false), new EndWordAction(endWordAction, true), new ExpandAllFoldsAction(), new GoToMatchingBracketAction(), new InsertBreakAction(), //new IncreaseFontSizeAction(), new InsertTabAction(), new NextWordAction(nextWordAction, false), new NextWordAction(selectionNextWordAction, true), new PossiblyInsertTemplateAction(), new PreviousWordAction(previousWordAction, false), new PreviousWordAction(selectionPreviousWordAction, true), new SelectWordAction(), new ToggleCommentAction(), }; /** * Constructor. */ public RSyntaxTextAreaEditorKit() { } /** * Returns the default document used by RSyntaxTextAreas. * * @return The document. */ @Override public Document createDefaultDocument() { return new RSyntaxDocument(SyntaxConstants.SYNTAX_STYLE_NONE); } /** * Overridden to return a row header that is aware of folding. * * @param textArea The text area. * @return The icon row header. */ @Override public IconRowHeader createIconRowHeader(RTextArea textArea) { return new FoldingAwareIconRowHeader((RSyntaxTextArea)textArea); } /** * Fetches the set of commands that can be used * on a text component that is using a model and * view produced by this kit. * * @return the command list */ @Override public Action[] getActions() { return TextAction.augmentList(super.getActions(), RSyntaxTextAreaEditorKit.defaultActions); } /** * Returns localized text for an action. There's definitely a better place * for this functionality. * * @param key The key into the action resource bundle. * @return The localized text. */ public static String getString(String key) { return msg.getString(key); } /** * Positions the caret at the beginning of the word. This class is here * to better handle finding the "beginning of the word" for programming * languages. */ protected static class BeginWordAction extends RTextAreaEditorKit.BeginWordAction { private Segment seg; protected BeginWordAction(String name, boolean select) { super(name, select); seg = new Segment(); } @Override protected int getWordStart(RTextArea textArea, int offs) throws BadLocationException { if (offs==0) { return offs; } RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); int line = textArea.getLineOfOffset(offs); int start = textArea.getLineStartOffset(line); if (offs==start) { return start; } int end = textArea.getLineEndOffset(line); if (line!=textArea.getLineCount()-1) { end--; } doc.getText(start, end-start, seg); // Determine the "type" of char at offs - lower case, upper case, // whitespace or other. We take special care here as we're starting // in the middle of the Segment to check whether we're already at // the "beginning" of a word. int firstIndex = seg.getBeginIndex() + (offs-start) - 1; seg.setIndex(firstIndex); char ch = seg.current(); char nextCh = offs==end ? 0 : seg.array[seg.getIndex() + 1]; // The "word" is a group of letters and/or digits int languageIndex = 0; // TODO if (doc.isIdentifierChar(languageIndex, ch)) { if (offs!=end && !doc.isIdentifierChar(languageIndex, nextCh)) { return offs; } do { ch = seg.previous(); } while (doc.isIdentifierChar(languageIndex, ch)); } // The "word" is whitespace else if (Character.isWhitespace(ch)) { if (offs!=end && !Character.isWhitespace(nextCh)) { return offs; } do { ch = seg.previous(); } while (Character.isWhitespace(ch)); } // Otherwise, the "word" a single "something else" char (operator, // etc.). offs -= firstIndex - seg.getIndex() + 1;//seg.getEndIndex() - seg.getIndex(); if (ch!=Segment.DONE && nextCh!='\n') { offs++; } return offs; } } /** * Expands or collapses the nearest fold. */ public static class ChangeFoldStateAction extends FoldRelatedAction { private boolean collapse; public ChangeFoldStateAction(String name, boolean collapse) { super(name); this.collapse = collapse; } public ChangeFoldStateAction(String name, Icon icon, String desc, Integer mnemonic, KeyStroke accelerator) { super(name, icon, desc, mnemonic, accelerator); } @Override public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; if (rsta.isCodeFoldingEnabled()) { Fold fold = getClosestFold(rsta); if (fold!=null) { fold.setCollapsed(collapse); } possiblyRepaintGutter(textArea); } else { UIManager.getLookAndFeel().provideErrorFeedback(rsta); } } @Override public final String getMacroID() { return getName(); } } /** * Action that (optionally) aligns a closing curly brace with the line * containing its matching opening curly brace. */ public static class CloseCurlyBraceAction extends RecordableTextAction { private static final long serialVersionUID = 1L; private Point bracketInfo; private Segment seg; public CloseCurlyBraceAction() { super(rstaCloseCurlyBraceAction); seg = new Segment(); } @Override public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; RSyntaxDocument doc = (RSyntaxDocument)rsta.getDocument(); int languageIndex = 0; int dot = textArea.getCaretPosition(); if (dot>0) { Token t = RSyntaxUtilities.getTokenAtOffset(rsta, dot-1); languageIndex = t==null ? 0 : t.getLanguageIndex(); } boolean alignCurlyBraces = rsta.isAutoIndentEnabled() && doc.getCurlyBracesDenoteCodeBlocks(languageIndex); if (alignCurlyBraces) { textArea.beginAtomicEdit(); } try { textArea.replaceSelection("}"); // If the user wants to align curly braces... if (alignCurlyBraces) { Element root = doc.getDefaultRootElement(); dot = rsta.getCaretPosition() - 1; // Start before '}' int line = root.getElementIndex(dot); Element elem = root.getElement(line); int start = elem.getStartOffset(); // Get the current line's text up to the '}' entered. try { doc.getText(start, dot-start, seg); } catch (BadLocationException ble) { // Never happens ble.printStackTrace(); return; } // Only attempt to align if there's only whitespace up to // the '}' entered. for (int i=0; i-1) { try { String ws = RSyntaxUtilities.getLeadingWhitespace( doc, bracketInfo.y); rsta.replaceRange(ws, start, dot); } catch (BadLocationException ble) { ble.printStackTrace(); return; } } } } finally { if (alignCurlyBraces) { textArea.endAtomicEdit(); } } } @Override public final String getMacroID() { return rstaCloseCurlyBraceAction; } } /** * (Optionally) completes a closing markup tag. */ public static class CloseMarkupTagAction extends RecordableTextAction { private static final long serialVersionUID = 1L; public CloseMarkupTagAction() { super(rstaCloseMarkupTagAction); } @Override public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { if (!textArea.isEditable() || !textArea.isEnabled()) { UIManager.getLookAndFeel().provideErrorFeedback(textArea); return; } RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; RSyntaxDocument doc = (RSyntaxDocument)rsta.getDocument(); Caret c = rsta.getCaret(); boolean selection = c.getDot()!=c.getMark(); rsta.replaceSelection("/"); // Don't automatically complete a tag if there was a selection int dot = c.getDot(); if (doc.getLanguageIsMarkup() && doc.getCompleteMarkupCloseTags() && !selection && rsta.getCloseMarkupTags() && dot>1) { try { // Check actual char before token type, since it's quicker char ch = doc.charAt(dot-2); if (ch=='<' || ch=='[') { Token t = doc.getTokenListForLine( rsta.getCaretLineNumber()); t = RSyntaxUtilities.getTokenAtOffset(t, dot-1); if (t!=null && t.getType()==Token.MARKUP_TAG_DELIMITER) { //System.out.println("Huzzah - closing tag!"); String tagName = discoverTagName(doc, dot); if (tagName!=null) { rsta.replaceSelection(tagName + (char)(ch+2)); } } } } catch (BadLocationException ble) { // Never happens UIManager.getLookAndFeel().provideErrorFeedback(rsta); ble.printStackTrace(); } } } /** * Discovers the name of the tag being closed. Assumes standard * SGML-style markup tags. * * @param doc The document to parse. * @param dot The location of the caret. This should be right after * the start of a closing tag token (e.g. "</" * or "[" in the case of BBCode). * @return The name of the tag to close, or null if it * could not be determined. */ private String discoverTagName(RSyntaxDocument doc, int dot) { Stack stack = new Stack(); Element root = doc.getDefaultRootElement(); int curLine = root.getElementIndex(dot); for (int i=0; i<=curLine; i++) { Token t = doc.getTokenListForLine(i); while (t!=null && t.isPaintable()) { if (t.getType()==Token.MARKUP_TAG_DELIMITER) { if (t.isSingleChar('<') || t.isSingleChar('[')) { t = t.getNextToken(); while (t!=null && t.isPaintable()) { if (t.getType()==Token.MARKUP_TAG_NAME || // Being lenient here and also checking // for attributes, in case they // (incorrectly) have whitespace between // the '<' char and the element name. t.getType()==Token.MARKUP_TAG_ATTRIBUTE) { stack.push(t.getLexeme()); break; } t = t.getNextToken(); } } else if (t.length()==2 && t.charAt(0)=='/' && (t.charAt(1)=='>' || t.charAt(1)==']')) { if (!stack.isEmpty()) { // Always true for valid XML stack.pop(); } } else if (t.length()==2 && (t.charAt(0)=='<' || t.charAt(0)=='[') && t.charAt(1)=='/') { String tagName = null; if (!stack.isEmpty()) { // Always true for valid XML tagName = stack.pop(); } if (t.getEndOffset()>=dot) { return tagName; } } } t = t==null ? null : t.getNextToken(); } } return null; // Should never happen } @Override public String getMacroID() { return getName(); } } /** * Collapses all comment folds. */ public static class CollapseAllCommentFoldsAction extends FoldRelatedAction{ private static final long serialVersionUID = 1L; public CollapseAllCommentFoldsAction() { super(rstaCollapseAllCommentFoldsAction); setProperties(msg, "Action.CollapseCommentFolds"); } public CollapseAllCommentFoldsAction(String name, Icon icon, String desc, Integer mnemonic, KeyStroke accelerator) { super(name, icon, desc, mnemonic, accelerator); } @Override public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; if (rsta.isCodeFoldingEnabled()) { FoldCollapser collapser = new FoldCollapser(); collapser.collapseFolds(rsta.getFoldManager()); possiblyRepaintGutter(textArea); } else { UIManager.getLookAndFeel().provideErrorFeedback(rsta); } } @Override public final String getMacroID() { return rstaCollapseAllCommentFoldsAction; } } /** * Collapses all folds. */ public static class CollapseAllFoldsAction extends FoldRelatedAction { private static final long serialVersionUID = 1L; public CollapseAllFoldsAction() { this(false); } public CollapseAllFoldsAction(boolean localizedName) { super(rstaCollapseAllFoldsAction); if (localizedName) { setProperties(msg, "Action.CollapseAllFolds"); } } public CollapseAllFoldsAction(String name, Icon icon, String desc, Integer mnemonic, KeyStroke accelerator) { super(name, icon, desc, mnemonic, accelerator); } @Override public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; if (rsta.isCodeFoldingEnabled()) { FoldCollapser collapser = new FoldCollapser() { @Override public boolean getShouldCollapse(Fold fold) { return true; } }; collapser.collapseFolds(rsta.getFoldManager()); possiblyRepaintGutter(textArea); } else { UIManager.getLookAndFeel().provideErrorFeedback(rsta); } } @Override public final String getMacroID() { return rstaCollapseAllFoldsAction; } } /** * Action for copying text as RTF. */ public static class CopyAsRtfAction extends RecordableTextAction { private static final long serialVersionUID = 1L; public CopyAsRtfAction() { super(rstaCopyAsRtfAction); } public CopyAsRtfAction(String name, Icon icon, String desc, Integer mnemonic, KeyStroke accelerator) { super(name, icon, desc, mnemonic, accelerator); } @Override public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { ((RSyntaxTextArea)textArea).copyAsRtf(); textArea.requestFocusInWindow(); } @Override public final String getMacroID() { return getName(); } } /** * Action for decreasing the font size of all fonts in the text area. */ public static class DecreaseFontSizeAction extends RTextAreaEditorKit.DecreaseFontSizeAction { private static final long serialVersionUID = 1L; public DecreaseFontSizeAction() { super(); } public DecreaseFontSizeAction(String name, Icon icon, String desc, Integer mnemonic, KeyStroke accelerator) { super(name, icon, desc, mnemonic, accelerator); } @Override public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; SyntaxScheme scheme = rsta.getSyntaxScheme(); // All we need to do is update all of the fonts in syntax // schemes, then call setSyntaxHighlightingColorScheme with the // same scheme already being used. This relies on the fact that // that method does not check whether the new scheme is different // from the old scheme before updating. boolean changed = false; int count = scheme.getStyleCount(); for (int i=0; i=MINIMUM_SIZE) { // Shrink by decreaseAmount. ss.font = font.deriveFont(newSize); changed = true; } else if (oldSize>MINIMUM_SIZE) { // Can't shrink by full decreaseAmount, but // can shrink a little bit. ss.font = font.deriveFont(MINIMUM_SIZE); changed = true; } } } } // Do the text area's font also. Font font = rsta.getFont(); float oldSize = font.getSize2D(); float newSize = oldSize - decreaseAmount; if (newSize>=MINIMUM_SIZE) { // Shrink by decreaseAmount. rsta.setFont(font.deriveFont(newSize)); changed = true; } else if (oldSize>MINIMUM_SIZE) { // Can't shrink by full decreaseAmount, but // can shrink a little bit. rsta.setFont(font.deriveFont(MINIMUM_SIZE)); changed = true; } // If we updated at least one font, update the screen. If // all of the fonts were already the minimum size, beep. if (changed) { rsta.setSyntaxScheme(scheme); // NOTE: This is a hack to get an encompassing // RTextScrollPane to repaint its line numbers to account // for a change in line height due to a font change. I'm // not sure why we need to do this here but not when we // change the syntax highlighting color scheme via the // Options dialog... setSyntaxHighlightingColorScheme() // calls revalidate() which won't repaint the scroll pane // if scrollbars don't change, which is why we need this. Component parent = rsta.getParent(); if (parent instanceof javax.swing.JViewport) { parent = parent.getParent(); if (parent instanceof JScrollPane) { parent.repaint(); } } } else UIManager.getLookAndFeel().provideErrorFeedback(rsta); } } /** * Action for when un-indenting lines (either the current line if there is * selection, or all selected lines if there is one). */ public static class DecreaseIndentAction extends RecordableTextAction { private static final long serialVersionUID = 1L; private Segment s; public DecreaseIndentAction() { this(rstaDecreaseIndentAction); } public DecreaseIndentAction(String name) { super(name); s = new Segment(); } @Override public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { if (!textArea.isEditable() || !textArea.isEnabled()) { UIManager.getLookAndFeel().provideErrorFeedback(textArea); return; } Document document = textArea.getDocument(); Element map = document.getDefaultRootElement(); Caret c = textArea.getCaret(); int dot = c.getDot(); int mark = c.getMark(); int line1 = map.getElementIndex(dot); int tabSize = textArea.getTabSize(); // If there is a selection, indent all lines in the selection. // Otherwise, indent the line the caret is on. if (dot!=mark) { // Note that we cheaply reuse variables here, so don't // take their names to mean what they are. int line2 = map.getElementIndex(mark); dot = Math.min(line1, line2); mark = Math.max(line1, line2); Element elem; textArea.beginAtomicEdit(); try { for (line1=dot; line1i) { // If the first character is a tab, remove it. if (s.array[i]=='\t') { doc.remove(start, 1); } // Otherwise, see if the first character is a space. If it // is, remove all contiguous whitespaces at the beginning of // this line, up to the tab size. else if (s.array[i]==' ') { i++; int toRemove = 1; while (i start) { char ch = doc.charAt(offs); if (isIdentifierChar(ch)) { offs--; } } else { // offs == start => previous word is on previous line if (line == 0) { return -1; } elem = root.getElement(--line); offs = elem.getEndOffset() - 1; } int prevWordStart = getPreviousWordStartInLine(doc, elem, offs); while (prevWordStart == -1 && line > 0) { line--; elem = root.getElement(line); prevWordStart = getPreviousWordStartInLine(doc, elem, elem.getEndOffset()); } return prevWordStart; } private int getPreviousWordStartInLine(RSyntaxDocument doc, Element elem, int offs) throws BadLocationException { int start = elem.getStartOffset(); int cur = offs; // Skip any whitespace or non-word chars while (cur >= start) { char ch = doc.charAt(cur); if (isIdentifierChar(ch)) { break; } cur--; } if (cur < start) { // Empty line or nothing but whitespace/non-word chars return -1; } return getWordStartImpl(doc, elem, cur); } @Override protected int getWordEnd(RTextArea textArea, int offs) throws BadLocationException { RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); Element root = doc.getDefaultRootElement(); int line = root.getElementIndex(offs); Element elem = root.getElement(line); int end = elem.getEndOffset() - 1; int wordEnd = offs; while (wordEnd <= end) { if (!isIdentifierChar(doc.charAt(wordEnd))) { break; } wordEnd++; } return wordEnd; } @Override protected int getWordStart(RTextArea textArea, int offs) throws BadLocationException { RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); Element root = doc.getDefaultRootElement(); int line = root.getElementIndex(offs); Element elem = root.getElement(line); return getWordStartImpl(doc, elem, offs); } private static final int getWordStartImpl(RSyntaxDocument doc, Element elem, int offs) throws BadLocationException { int start = elem.getStartOffset(); int wordStart = offs; while (wordStart >= start) { char ch = doc.charAt(wordStart); // Ignore newlines so we work when caret is at end of line if (!isIdentifierChar(ch) && ch != '\n') { break; } wordStart--; } return wordStart==offs ? offs : wordStart + 1; } /** * Overridden to not suggest word completions if the text right before * the caret contains non-word characters, such as '/' or '%'. * * @param prefix The prefix characters before the caret. * @return Whether the prefix could be part of a "word" in the context * of the text area's current content. */ @Override protected boolean isAcceptablePrefix(String prefix) { return prefix.length() > 0 && isIdentifierChar(prefix.charAt(prefix.length()-1)); } /** * Returns whether the specified character should be considered part * of an identifier. * * @param ch The character. * @return Whether the character is part of an identifier. */ private static final boolean isIdentifierChar(char ch) { //return doc.isIdentifierChar(languageIndex, ch); return Character.isLetterOrDigit(ch) || ch == '_' || ch == '$'; } } /** * Positions the caret at the end of the word. This class is here to * better handle finding the "end of the word" in programming languages. */ protected static class EndWordAction extends RTextAreaEditorKit.EndWordAction { private Segment seg; protected EndWordAction(String name, boolean select) { super(name, select); seg = new Segment(); } @Override protected int getWordEnd(RTextArea textArea, int offs) throws BadLocationException { RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); if (offs==doc.getLength()) { return offs; } int line = textArea.getLineOfOffset(offs); int end = textArea.getLineEndOffset(line); if (line!=textArea.getLineCount()-1) { end--; // Hide newline } if (offs==end) { return end; } doc.getText(offs, end-offs, seg); // Determine the "type" of char at offs - letter/digit, // whitespace or other char ch = seg.first(); // The "word" is a group of letters and/or digits int languageIndex = 0; // TODO if (doc.isIdentifierChar(languageIndex, ch)) { do { ch = seg.next(); } while (doc.isIdentifierChar(languageIndex, ch)); } // The "word" is whitespace. else if (Character.isWhitespace(ch)) { do { ch = seg.next(); } while (Character.isWhitespace(ch)); } // Otherwise, the "word" is a single character of some other type // (operator, etc.). offs += seg.getIndex() - seg.getBeginIndex(); return offs; } } /** * Expands all folds. */ public static class ExpandAllFoldsAction extends FoldRelatedAction { private static final long serialVersionUID = 1L; public ExpandAllFoldsAction() { this(false); } public ExpandAllFoldsAction(boolean localizedName) { super(rstaExpandAllFoldsAction); if (localizedName) { setProperties(msg, "Action.ExpandAllFolds"); } } public ExpandAllFoldsAction(String name, Icon icon, String desc, Integer mnemonic, KeyStroke accelerator) { super(name, icon, desc, mnemonic, accelerator); } @Override public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; if (rsta.isCodeFoldingEnabled()) { FoldManager fm = rsta.getFoldManager(); for (int i=0; i-1) { // Go to the position AFTER the bracket so the previous // bracket (which we were just on) is highlighted. rsta.setCaretPosition(bracketInfo.y+1); } else { UIManager.getLookAndFeel().provideErrorFeedback(rsta); } } @Override public final String getMacroID() { return rstaGoToMatchingBracketAction; } } /** * Action for increasing the font size of all fonts in the text area. */ public static class IncreaseFontSizeAction extends RTextAreaEditorKit.IncreaseFontSizeAction { private static final long serialVersionUID = 1L; public IncreaseFontSizeAction() { super(); } public IncreaseFontSizeAction(String name, Icon icon, String desc, Integer mnemonic, KeyStroke accelerator) { super(name, icon, desc, mnemonic, accelerator); } @Override public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; SyntaxScheme scheme = rsta.getSyntaxScheme(); // All we need to do is update all of the fonts in syntax // schemes, then call setSyntaxHighlightingColorScheme with the // same scheme already being used. This relies on the fact that // that method does not check whether the new scheme is different // from the old scheme before updating. boolean changed = false; int count = scheme.getStyleCount(); for (int i=0; ipos that * is NOT a whitespace char, or -1 if only * whitespace chars follow pos (or it is the end * position in the string). */ private static final int atEndOfLine(int pos, String s, int sLen) { for (int i=pos; i0) { StringBuilder sb = new StringBuilder(); if (line==textArea.getLineCount()-1) { sb.append('\n'); } if (leadingWS!=null) { sb.append(leadingWS); } sb.append("}\n"); int dot = textArea.getCaretPosition(); int end = textArea.getLineEndOffsetOfCurrentLine(); // Insert at end of line, not at dot: they may have // pressed Enter in the middle of the line and brought // some text (though it must be whitespace and/or // comments) down onto the new line. textArea.insert(sb.toString(), end); textArea.setCaretPosition(dot); // Caret may have moved } } } } } /** * Action for inserting tabs. This is extended to "block indent" a * group of contiguous lines if they are selected. */ public static class InsertTabAction extends RecordableTextAction { private static final long serialVersionUID = 1L; public InsertTabAction() { super(insertTabAction); } public InsertTabAction(String name) { super(name); } @Override public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { if (!textArea.isEditable() || !textArea.isEnabled()) { UIManager.getLookAndFeel().provideErrorFeedback(textArea); return; } Document document = textArea.getDocument(); Element map = document.getDefaultRootElement(); Caret c = textArea.getCaret(); int dot = c.getDot(); int mark = c.getMark(); int dotLine = map.getElementIndex(dot); int markLine = map.getElementIndex(mark); // If there is a multi-line selection, indent all lines in // the selection. if (dotLine!=markLine) { int first = Math.min(dotLine, markLine); int last = Math.max(dotLine, markLine); Element elem; int start; // Since we're using Document.insertString(), we must mimic the // soft tab behavior provided by RTextArea.replaceSelection(). String replacement = "\t"; if (textArea.getTabsEmulated()) { StringBuilder sb = new StringBuilder(); int temp = textArea.getTabSize(); for (int i=0; i0 && // ((mod&ActionEvent.ALT_MASK)==(mod&ActionEvent.CTRL_MASK))) { // char ch = str.charAt(0); // if (ch>=0x20 && ch!=0x7F) // textArea.replaceSelection(str); //} textArea.replaceSelection(" "); } @Override public final String getMacroID() { return rstaPossiblyInsertTemplateAction; } } /** * Action to move the selection and/or caret. Constructor indicates * direction to use. This class overrides the behavior defined in * {@link RTextAreaEditorKit} to better skip "words" in source code. */ public static class PreviousWordAction extends RTextAreaEditorKit.PreviousWordAction { private Segment seg; public PreviousWordAction(String nm, boolean select) { super(nm, select); seg = new Segment(); } /** * Overridden to do better with skipping "words" in code. */ @Override protected int getPreviousWord(RTextArea textArea, int offs) throws BadLocationException { if (offs==0) { return offs; } RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); Element root = doc.getDefaultRootElement(); int line = root.getElementIndex(offs); int start = root.getElement(line).getStartOffset(); if (offs==start) {// If we're already at the start of the line... RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; if (rsta.isCodeFoldingEnabled()) { // End of next visible line FoldManager fm = rsta.getFoldManager(); while (--line>=0 && fm.isLineHidden(line)); if (line>=0) { // Found an earlier visible line offs = root.getElement(line).getEndOffset() - 1; } // No earlier visible line - we must be at offs==0... return offs; } else { return start-1; // End of previous line. } } doc.getText(start, offs-start, seg); // Determine the "type" of char at offs - lower case, upper case, // whitespace or other char ch = seg.last(); // Skip any "leading" whitespace while (Character.isWhitespace(ch)) { ch = seg.previous(); } // Skip the group of letters and/or digits int languageIndex = 0; if (doc.isIdentifierChar(languageIndex, ch)) { do { ch = seg.previous(); } while (doc.isIdentifierChar(languageIndex, ch)); } // Skip groups of "anything else" (operators, etc.). else if (!Character.isWhitespace(ch)) { do { ch = seg.previous(); } while (ch!=Segment.DONE && !(doc.isIdentifierChar(languageIndex, ch) || Character.isWhitespace(ch))); } offs -= seg.getEndIndex() - seg.getIndex(); if (ch!=Segment.DONE) { offs++; } return offs; } } /** * Selects the word around the caret. This class is here to better * handle selecting "words" in programming languages. */ public static class SelectWordAction extends RTextAreaEditorKit.SelectWordAction { @Override protected void createActions() { start = new BeginWordAction("pigdog", false); end = new EndWordAction("pigdog", true); } } /** * Action that toggles whether the currently selected lines are * commented. */ public static class ToggleCommentAction extends RecordableTextAction { public ToggleCommentAction() { super(rstaToggleCommentAction); } @Override public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { if (!textArea.isEditable() || !textArea.isEnabled()) { UIManager.getLookAndFeel().provideErrorFeedback(textArea); return; } RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); Element map = doc.getDefaultRootElement(); Caret c = textArea.getCaret(); int dot = c.getDot(); int mark = c.getMark(); int line1 = map.getElementIndex(dot); int line2 = map.getElementIndex(mark); int start = Math.min(line1, line2); int end = Math.max(line1, line2); Token t = doc.getTokenListForLine(start); int languageIndex = t!=null ? t.getLanguageIndex() : 0; String[] startEnd = doc.getLineCommentStartAndEnd(languageIndex); if (startEnd==null) { UIManager.getLookAndFeel().provideErrorFeedback(textArea); return; } // Don't toggle comment on last line if there is no // text selected on it. if (start!=end) { Element elem = map.getElement(end); if (Math.max(dot, mark)==elem.getStartOffset()) { end--; } } textArea.beginAtomicEdit(); try { boolean add = getDoAdd(doc,map, start,end, startEnd); for (line1=start; line1<=end; line1++) { Element elem = map.getElement(line1); handleToggleComment(elem, doc, startEnd, add); } } catch (BadLocationException ble) { ble.printStackTrace(); UIManager.getLookAndFeel().provideErrorFeedback(textArea); } finally { textArea.endAtomicEdit(); } } private boolean getDoAdd(Document doc, Element map, int startLine, int endLine, String[] startEnd) throws BadLocationException { boolean doAdd = false; for (int i=startLine; i<=endLine; i++) { Element elem = map.getElement(i); int start = elem.getStartOffset(); String t = doc.getText(start, elem.getEndOffset()-start-1); if (!t.startsWith(startEnd[0]) || (startEnd[1]!=null && !t.endsWith(startEnd[1]))) { doAdd = true; break; } } return doAdd; } private void handleToggleComment(Element elem, Document doc, String[] startEnd, boolean add) throws BadLocationException { int start = elem.getStartOffset(); int end = elem.getEndOffset() - 1; if (add) { doc.insertString(start, startEnd[0], null); if (startEnd[1]!=null) { doc.insertString(end+startEnd[0].length(), startEnd[1], null); } } else { doc.remove(start, startEnd[0].length()); if (startEnd[1]!=null) { int temp = startEnd[1].length(); doc.remove(end-startEnd[0].length()-temp, temp); } } } @Override public final String getMacroID() { return rstaToggleCommentAction; } } /** * Toggles the fold at the current caret position or line. */ public static class ToggleCurrentFoldAction extends FoldRelatedAction { private static final long serialVersionUID = 1L; public ToggleCurrentFoldAction() { super(rstaToggleCurrentFoldAction); setProperties(msg, "Action.ToggleCurrentFold"); } public ToggleCurrentFoldAction(String name, Icon icon, String desc, Integer mnemonic, KeyStroke accelerator) { super(name, icon, desc, mnemonic, accelerator); } @Override public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; if (rsta.isCodeFoldingEnabled()) { Fold fold = getClosestFold(rsta); if (fold!=null) { fold.toggleCollapsedState(); } possiblyRepaintGutter(textArea); } else { UIManager.getLookAndFeel().provideErrorFeedback(rsta); } } @Override public final String getMacroID() { return rstaToggleCurrentFoldAction; } } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaHighlighter.java000066400000000000000000000206171257417003700327170ustar00rootroot00000000000000/* * 04/23/2009 * * RSyntaxTextAreaHighlighter.java - Highlighter for RSyntaxTextAreas. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.awt.Color; import java.awt.Graphics; import java.awt.Shape; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.swing.plaf.TextUI; import javax.swing.text.BadLocationException; import javax.swing.text.Document; import javax.swing.text.Element; import javax.swing.text.JTextComponent; import javax.swing.text.View; import org.fife.ui.rsyntaxtextarea.parser.Parser; import org.fife.ui.rsyntaxtextarea.parser.ParserNotice; import org.fife.ui.rtextarea.RTextAreaHighlighter; import org.fife.ui.rtextarea.SmartHighlightPainter; /** * The highlighter implementation used by {@link RSyntaxTextArea}s. It knows to * always paint "marked occurrences" highlights below selection highlights, * and squiggle underline highlights above all other highlights.

* * Most of this code is copied from javax.swing.text.DefaultHighlighter; * unfortunately, we cannot re-use much of it since it is package private. * * @author Robert Futrell * @version 1.0 */ public class RSyntaxTextAreaHighlighter extends RTextAreaHighlighter { /** * Marked occurrences in the document (to be painted separately from * other highlights). */ private List markedOccurrences; /** * Highlights from document parsers. These should be painted "on top of" * all other highlights to ensure they are always above the selection. */ private List parserHighlights; /** * The default color used for parser notices when none is specified. */ private static final Color DEFAULT_PARSER_NOTICE_COLOR = Color.RED; /** * Constructor. */ public RSyntaxTextAreaHighlighter() { markedOccurrences = new ArrayList(); parserHighlights = new ArrayList(0); // Often unused } /** * Adds a special "marked occurrence" highlight. * * @param start * @param end * @param p * @return A tag to reference the highlight later. * @throws BadLocationException * @see #clearMarkOccurrencesHighlights() */ Object addMarkedOccurrenceHighlight(int start, int end, SmartHighlightPainter p) throws BadLocationException { Document doc = textArea.getDocument(); TextUI mapper = textArea.getUI(); // Always layered highlights for marked occurrences. SyntaxLayeredHighlightInfoImpl i = new SyntaxLayeredHighlightInfoImpl(); i.setPainter(p); i.setStartOffset(doc.createPosition(start)); // HACK: Use "end-1" to prevent chars the user types at the "end" of // the highlight to be absorbed into the highlight (default Highlight // behavior). i.setEndOffset(doc.createPosition(end-1)); markedOccurrences.add(i); mapper.damageRange(textArea, start, end); return i; } /** * Adds a highlight from a parser. * * @param notice The notice from a {@link Parser}. * @return A tag with which to reference the highlight. * @throws BadLocationException * @see #clearParserHighlights() * @see #clearParserHighlights(Parser) */ HighlightInfo addParserHighlight(ParserNotice notice, HighlightPainter p) throws BadLocationException { Document doc = textArea.getDocument(); TextUI mapper = textArea.getUI(); int start = notice.getOffset(); int end = 0; if (start==-1) { // Could just define an invalid line number int line = notice.getLine(); Element root = doc.getDefaultRootElement(); if (line>=0 && line i = parserHighlights.iterator(); for (; i.hasNext(); ) { SyntaxLayeredHighlightInfoImpl info = i.next(); if (info.notice.getParser()==parser) { if (info.width > 0 && info.height > 0) { textArea.repaint(info.x, info.y, info.width, info.height); } i.remove(); } } } /** * {@inheritDoc} */ @Override public void deinstall(JTextComponent c) { super.deinstall(c); markedOccurrences.clear(); parserHighlights.clear(); } /** * Returns a list of "marked occurrences" in the text area. If there are * no marked occurrences, this will be an empty list. * * @return The list of marked occurrences, or an empty list if none. The * contents of this list will be of type {@link DocumentRange}. */ public List getMarkedOccurrences() { List list = new ArrayList(markedOccurrences.size()); for (HighlightInfo info : markedOccurrences) { int start = info.getStartOffset(); int end = info.getEndOffset() + 1; // HACK if (start <= end) { // Occasionally a Marked Occurrence can have a lost end offset // but not start offset (replacing entire text content with // new content, and a marked occurrence is on the last token // in the document). DocumentRange range = new DocumentRange(start, end); list.add(range); } } return list; } @Override public void paintLayeredHighlights(Graphics g, int lineStart, int lineEnd, Shape viewBounds, JTextComponent editor, View view) { paintListLayered(g, lineStart,lineEnd, viewBounds, editor, view, markedOccurrences); super.paintLayeredHighlights(g, lineStart, lineEnd, viewBounds, editor, view); paintListLayered(g, lineStart,lineEnd, viewBounds, editor, view, parserHighlights); } /** * Removes a parser highlight from this view. * * @param tag The reference to the highlight. * @see #addParserHighlight(ParserNotice, javax.swing.text.Highlighter.HighlightPainter) */ void removeParserHighlight(HighlightInfo tag) { repaintListHighlight(tag); parserHighlights.remove(tag); } /** * Highlight info implementation used for parser notices and marked * occurrences. */ private static class SyntaxLayeredHighlightInfoImpl extends LayeredHighlightInfoImpl { ParserNotice notice;//Color color; // Used only by Parser highlights. @Override public Color getColor() { //return color; Color color = null; if (notice!=null) { color = notice.getColor(); if (color==null) { color = DEFAULT_PARSER_NOTICE_COLOR; } } return color; } @Override public String toString() { return "[SyntaxLayeredHighlightInfoImpl: " + "startOffs=" + getStartOffset() + ", endOffs=" + getEndOffset() + ", color=" + getColor() + "]"; } } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaUI.java000066400000000000000000000154071257417003700307770ustar00rootroot00000000000000/* * 02/24/2004 * * RSyntaxTextAreaUI.java - UI for an RSyntaxTextArea. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.awt.Color; import java.awt.Graphics; import java.awt.Rectangle; import java.beans.PropertyChangeEvent; import javax.swing.InputMap; import javax.swing.JComponent; import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.InputMapUIResource; import javax.swing.text.*; import org.fife.ui.rtextarea.RTextArea; import org.fife.ui.rtextarea.RTextAreaUI; /** * UI used by RSyntaxTextArea. This allows us to implement * syntax highlighting. * * @author Robert Futrell * @version 0.1 */ public class RSyntaxTextAreaUI extends RTextAreaUI { private static final String SHARED_ACTION_MAP_NAME = "RSyntaxTextAreaUI.actionMap"; private static final String SHARED_INPUT_MAP_NAME = "RSyntaxTextAreaUI.inputMap"; private static final EditorKit defaultKit = new RSyntaxTextAreaEditorKit(); public static ComponentUI createUI(JComponent ta) { return new RSyntaxTextAreaUI(ta); } /** * Constructor. */ public RSyntaxTextAreaUI(JComponent rSyntaxTextArea) { super(rSyntaxTextArea); } /** * Creates the view for an element. * * @param elem The element. * @return The view. */ @Override public View create(Element elem) { RTextArea c = getRTextArea(); if (c instanceof RSyntaxTextArea) { RSyntaxTextArea area = (RSyntaxTextArea) c; View v; if (area.getLineWrap()) v = new WrappedSyntaxView(elem); else v = new SyntaxView(elem); return v; } return null; } /** * Creates the highlighter to use for syntax text areas. * * @return The highlighter. */ @Override protected Highlighter createHighlighter() { return new RSyntaxTextAreaHighlighter(); } /** * Returns the name to use to cache/fetch the shared action map. This * should be overridden by subclasses if the subclass has its own custom * editor kit to install, so its actions get picked up. * * @return The name of the cached action map. */ @Override protected String getActionMapName() { return SHARED_ACTION_MAP_NAME; } /** * Fetches the EditorKit for the UI. * * @param tc The text component for which this UI is installed. * @return The editor capabilities. * @see javax.swing.plaf.TextUI#getEditorKit */ @Override public EditorKit getEditorKit(JTextComponent tc) { return defaultKit; } /** * Get the InputMap to use for the UI.

* * This method is not named getInputMap() because there is * a package-private method in BasicTextAreaUI with that name. * Thus, creating a new method with that name causes certain compilers to * issue warnings that you are not actually overriding the original method * (since it is package-private). */ @Override protected InputMap getRTextAreaInputMap() { InputMap map = new InputMapUIResource(); InputMap shared = (InputMap)UIManager.get(SHARED_INPUT_MAP_NAME); if (shared==null) { shared = new RSyntaxTextAreaDefaultInputMap(); UIManager.put(SHARED_INPUT_MAP_NAME, shared); } //KeyStroke[] keys = shared.allKeys(); //for (int i=0; i " + shared.get(keys[i])); map.setParent(shared); return map; } @Override protected void paintEditorAugmentations(Graphics g) { super.paintEditorAugmentations(g); paintMatchedBracket(g); } /** * Paints the "matched bracket", if any. * * @param g The graphics context. */ protected void paintMatchedBracket(Graphics g) { RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; if (rsta.isBracketMatchingEnabled()) { Rectangle match = rsta.getMatchRectangle(); if (match!=null) { paintMatchedBracketImpl(g, rsta, match); } if (rsta.getPaintMatchedBracketPair()) { Rectangle dotRect = rsta.getDotRectangle(); if (dotRect!=null) { // should always be true paintMatchedBracketImpl(g, rsta, dotRect); } } } } protected void paintMatchedBracketImpl(Graphics g, RSyntaxTextArea rsta, Rectangle r) { // We must add "-1" to the height because otherwise we'll paint below // the region that gets invalidated. if (rsta.getAnimateBracketMatching()) { Color bg = rsta.getMatchedBracketBGColor(); if (bg!=null) { g.setColor(bg); g.fillRoundRect(r.x,r.y, r.width,r.height-1, 5,5); } g.setColor(rsta.getMatchedBracketBorderColor()); g.drawRoundRect(r.x,r.y, r.width,r.height-1, 5,5); } else { Color bg = rsta.getMatchedBracketBGColor(); if (bg!=null) { g.setColor(bg); g.fillRect(r.x,r.y, r.width,r.height-1); } g.setColor(rsta.getMatchedBracketBorderColor()); g.drawRect(r.x,r.y, r.width,r.height-1); } } /** * Gets called whenever a bound property is changed on this UI's * RSyntaxTextArea. * * @param e The property change event. */ @Override protected void propertyChange(PropertyChangeEvent e) { String name = e.getPropertyName(); // If they change the syntax scheme, we must do this so that // WrappedSyntaxView(_TEST) updates its child views properly. if (name.equals(RSyntaxTextArea.SYNTAX_SCHEME_PROPERTY)) { modelChanged(); } // Everything else is general to all RTextAreas. else { super.propertyChange(e); } } /** * Updates the view. This should be called when the underlying * RSyntaxTextArea changes its syntax editing style. */ public void refreshSyntaxHighlighting() { modelChanged(); } /** * Returns the y-coordinate of the specified line.

* * This method is quicker than using traditional * modelToView(int) calls, as the entire bounding box isn't * computed. */ @Override public int yForLine(int line) throws BadLocationException { Rectangle alloc = getVisibleEditorRect(); if (alloc!=null) { RSTAView view = (RSTAView)getRootView(textArea).getView(0); return view.yForLine(alloc, line); } return -1; } /** * Returns the y-coordinate of the line containing a specified offset.

* * This is faster than calling modelToView(offs).y, so it is * preferred if you do not need the actual bounding box. */ @Override public int yForLineContaining(int offs) throws BadLocationException { Rectangle alloc = getVisibleEditorRect(); if (alloc!=null) { RSTAView view = (RSTAView)getRootView(textArea).getView(0); return view.yForLineContaining(alloc, offs); } return -1; } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxUtilities.java000066400000000000000000001370321257417003700307760ustar00rootroot00000000000000/* * 08/06/2004 * * RSyntaxUtilities.java - Utility methods used by RSyntaxTextArea and its * views. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.awt.Color; import java.awt.Container; import java.awt.Insets; import java.awt.Point; import java.awt.Rectangle; import java.awt.Shape; import java.awt.Toolkit; import java.util.Map; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; import javax.swing.*; import javax.swing.text.BadLocationException; import javax.swing.text.Caret; import javax.swing.text.Document; import javax.swing.text.Element; import javax.swing.text.Position; import javax.swing.text.Segment; import javax.swing.text.TabExpander; import javax.swing.text.View; import org.fife.ui.rsyntaxtextarea.TokenUtils.TokenSubList; import org.fife.ui.rsyntaxtextarea.folding.FoldManager; import org.fife.ui.rtextarea.Gutter; import org.fife.ui.rtextarea.RTextArea; import org.fife.ui.rtextarea.RTextScrollPane; /** * Utility methods used by RSyntaxTextArea and its associated * classes. * * @author Robert Futrell * @version 0.2 */ public class RSyntaxUtilities implements SwingConstants { /** * Integer constant representing a Windows-variant OS. */ public static final int OS_WINDOWS = 1; /** * Integer constant representing Mac OS X. */ public static final int OS_MAC_OSX = 2; /** * Integer constant representing Linux. */ public static final int OS_LINUX = 4; /** * Integer constant representing an "unknown" OS. 99.99% of the * time, this means some UNIX variant (AIX, SunOS, etc.). */ public static final int OS_OTHER = 8; /** * Used for the color of hyperlinks when a LookAndFeel uses light text * against a dark background. */ private static final Color LIGHT_HYPERLINK_FG = new Color(0xd8ffff); private static final int OS = getOSImpl(); //private static final int DIGIT_MASK = 1; private static final int LETTER_MASK = 2; //private static final int WHITESPACE_MASK = 4; //private static final int UPPER_CASE_MASK = 8; private static final int HEX_CHARACTER_MASK = 16; private static final int LETTER_OR_DIGIT_MASK = 32; private static final int BRACKET_MASK = 64; private static final int JAVA_OPERATOR_MASK = 128; /** * A lookup table used to quickly decide if a 16-bit Java char is a * US-ASCII letter (A-Z or a-z), a digit, a whitespace char (either space * (0x0020) or tab (0x0009)), etc. This method should be faster * than Character.isLetter, Character.isDigit, * and Character.isWhitespace because we know we are dealing * with ASCII chars and so don't have to worry about code planes, etc. */ private static final int[] dataTable = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, // 0-15 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16-31 4, 128, 0, 0, 0, 128, 128, 0, 64, 64, 128, 128, 0, 128, 0, 128, // 32-47 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 128, 0, 128, 128, 128, 128, // 48-63 0, 58, 58, 58, 58, 58, 58, 42, 42, 42, 42, 42, 42, 42, 42, 42, // 64-79 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 64, 0, 64, 128, 0, // 80-95 0, 50, 50, 50, 50, 50, 50, 34, 34, 34, 34, 34, 34, 34, 34, 34, // 96-111 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 64, 128, 64, 128, 0, // 112-127 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 128-143 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 144- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 160- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 176- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 192- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 208- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 224- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // 240-255. }; /** * Used in bracket matching methods. */ private static Segment charSegment = new Segment(); /** * Used in token list manipulation methods. */ private static final TokenImpl tempToken = new TokenImpl(); /** * Used internally. */ private static final char[] JS_KEYWORD_RETURN = { 'r', 'e', 't', 'u', 'r', 'n' }; private static final char[] JS_AND = { '&', '&' }; private static final char[] JS_OR = { '|', '|' }; /** * Used internally. */ private static final String BRACKETS = "{([})]"; /** * Returns a string with characters that are special to HTML (such as * <, > and &) replaced * by their HTML escape sequences. * * @param s The input string. * @param newlineReplacement What to replace newline characters with. * If this is null, they are simply removed. * @param inPreBlock Whether this HTML will be in within pre * tags. If this is true, spaces will be kept as-is; * otherwise, they will be converted to " ". * @return The escaped version of s. */ public static final String escapeForHtml(String s, String newlineReplacement, boolean inPreBlock) { if (s==null) { return null; } if (newlineReplacement==null) { newlineReplacement = ""; } final String tabString = " "; boolean lastWasSpace = false; StringBuilder sb = new StringBuilder(); for (int i=0; i': sb.append(">"); lastWasSpace = false; break; default: sb.append(ch); lastWasSpace = false; break; } } return sb.toString(); } /** * Returns the rendering hints for text that will most accurately reflect * those of the native windowing system. * * @return The rendering hints, or null if they cannot be * determined. */ public static Map getDesktopAntiAliasHints() { return (Map)Toolkit.getDefaultToolkit(). getDesktopProperty("awt.font.desktophints"); } /** * Returns the color to use for the line underneath a folded region line. * * @param textArea The text area. * @return The color to use. */ public static Color getFoldedLineBottomColor(RSyntaxTextArea textArea) { Color color = Color.gray; Gutter gutter = RSyntaxUtilities.getGutter(textArea); if (gutter!=null) { color = gutter.getFoldIndicatorForeground(); } return color; } /** * Returns the gutter component of the scroll pane containing a text * area, if any. * * @param textArea The text area. * @return The gutter, or null if the text area is not in * an {@link RTextScrollPane}. * @see RTextScrollPane#getGutter() */ public static Gutter getGutter(RTextArea textArea) { Gutter gutter = null; Container parent = textArea.getParent(); if (parent instanceof JViewport) { parent = parent.getParent(); if (parent instanceof RTextScrollPane) { RTextScrollPane sp = (RTextScrollPane)parent; gutter = sp.getGutter(); // Should always be non-null } } return gutter; } /** * Returns the color to use for hyperlink-style components. This method * will return Color.blue unless it appears that the current * LookAndFeel uses light text on a dark background, in which case a * brighter alternative is returned. * * @return The color to use for hyperlinks. * @see #isLightForeground(Color) */ public static final Color getHyperlinkForeground() { // This property is defined by all standard LaFs, even Nimbus (!), // but you never know what crazy LaFs there are... Color fg = UIManager.getColor("Label.foreground"); if (fg==null) { fg = new JLabel().getForeground(); } return isLightForeground(fg) ? LIGHT_HYPERLINK_FG : Color.blue; } /** * Returns the leading whitespace of a string. * * @param text The String to check. * @return The leading whitespace. * @see #getLeadingWhitespace(Document, int) */ public static String getLeadingWhitespace(String text) { int count = 0; int len = text.length(); while (countoffs is not a valid offset * in the document. * @see #getLeadingWhitespace(String) */ public static String getLeadingWhitespace(Document doc, int offs) throws BadLocationException { Element root = doc.getDefaultRootElement(); int line = root.getElementIndex(offs); Element elem = root.getElement(line); int startOffs = elem.getStartOffset(); int endOffs = elem.getEndOffset() - 1; String text = doc.getText(startOffs, endOffs-startOffs); return getLeadingWhitespace(text); } private static final Element getLineElem(Document d, int offs) { Element map = d.getDefaultRootElement(); int index = map.getElementIndex(offs); Element elem = map.getElement(index); if ((offs>=elem.getStartOffset()) && (offsp0, as this is * the character where the x-pixel value is 0. * * @param textArea The text area containing the text. * @param s A segment in which to load the line. This is passed in so we * don't have to reallocate a new Segment for each * call. * @param p0 The starting position in the physical line in the document. * @param p1 The position for which to get the bounding box in the view. * @param e How to expand tabs. * @param rect The rectangle whose x- and width-values are changed to * represent the bounding box of p1. This is reused * to keep from needlessly reallocating Rectangles. * @param x0 The x-coordinate (pixel) marking the left-hand border of the * text. This is useful if the text area has a border, for example. * @return The bounding box in the view of the character p1. * @throws BadLocationException If p0 or p1 is * not a valid location in the specified text area's document. * @throws IllegalArgumentException If p0 and p1 * are not on the same line. */ public static Rectangle getLineWidthUpTo(RSyntaxTextArea textArea, Segment s, int p0, int p1, TabExpander e, Rectangle rect, int x0) throws BadLocationException { RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); // Ensure p0 and p1 are valid document positions. if (p0<0) throw new BadLocationException("Invalid document position", p0); else if (p1>doc.getLength()) throw new BadLocationException("Invalid document position", p1); // Ensure p0 and p1 are in the same line, and get the start/end // offsets for that line. Element map = doc.getDefaultRootElement(); int lineNum = map.getElementIndex(p0); // We do ">1" because p1 might be the first position on the next line // or the last position on the previous one. // if (lineNum!=map.getElementIndex(p1)) if (Math.abs(lineNum-map.getElementIndex(p1))>1) throw new IllegalArgumentException("p0 and p1 are not on the " + "same line (" + p0 + ", " + p1 + ")."); // Get the token list. Token t = doc.getTokenListForLine(lineNum); // Modify the token list 't' to begin at p0 (but still have correct // token types, etc.), and get the x-location (in pixels) of the // beginning of this new token list. TokenSubList subList = TokenUtils.getSubTokenList(t, p0, e, textArea, 0, tempToken); t = subList.tokenList; rect = t.listOffsetToView(textArea, e, p1, x0, rect); return rect; } /** * Returns the location of the bracket paired with the one at the current * caret position. * * @param textArea The text area. * @param input A point to use as the return value. If this is * null, a new object is created and returned. * @return A point representing the matched bracket info. The "x" field * is the offset of the bracket at the caret position (either just * before or just after the caret), and the "y" field is the offset * of the matched bracket. Both "x" and "y" will be * -1 if there isn't a matching bracket (or the caret * isn't on a bracket). */ public static Point getMatchingBracketPosition(RSyntaxTextArea textArea, Point input) { if (input==null) { input = new Point(); } input.setLocation(-1, -1); try { // Actually position just BEFORE caret. int caretPosition = textArea.getCaretPosition() - 1; RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); char bracket = 0; // If the caret was at offset 0, we can't check "to its left." if (caretPosition>=0) { bracket = doc.charAt(caretPosition); } // Try to match a bracket "to the right" of the caret if one // was not found on the left. int index = BRACKETS.indexOf(bracket); if (index==-1 && caretPosition

    *
  • SwingConstants.WEST *
  • SwingConstants.EAST *
  • SwingConstants.NORTH *
  • SwingConstants.SOUTH *
* @return the location within the model that best represents the next * location visual position * @exception BadLocationException * @exception IllegalArgumentException if direction * doesn't have one of the legal values above */ public static int getNextVisualPositionFrom(int pos, Position.Bias b, Shape a, int direction, Position.Bias[] biasRet, View view) throws BadLocationException { RSyntaxTextArea target = (RSyntaxTextArea)view.getContainer(); biasRet[0] = Position.Bias.Forward; // Do we want the "next position" above, below, to the left or right? switch (direction) { case NORTH: case SOUTH: if (pos == -1) { pos = (direction == NORTH) ? Math.max(0, view.getEndOffset() - 1) : view.getStartOffset(); break; } Caret c = (target != null) ? target.getCaret() : null; // YECK! Ideally, the x location from the magic caret // position would be passed in. Point mcp; if (c != null) mcp = c.getMagicCaretPosition(); else mcp = null; int x; if (mcp == null) { Rectangle loc = target.modelToView(pos); x = (loc == null) ? 0 : loc.x; } else { x = mcp.x; } if (direction == NORTH) pos = getPositionAbove(target,pos,x,(TabExpander)view); else pos = getPositionBelow(target,pos,x,(TabExpander)view); break; case WEST: int endOffs = view.getEndOffset(); if(pos == -1) { pos = Math.max(0, endOffs - 1); } else { pos = Math.max(0, pos - 1); if (target.isCodeFoldingEnabled()) { int last = pos==endOffs-1 ? target.getLineCount()-1 : target.getLineOfOffset(pos+1); int current = target.getLineOfOffset(pos); if (last!=current) { // If moving up a line... FoldManager fm = target.getFoldManager(); if (fm.isLineHidden(current)) { while (--current>0 && fm.isLineHidden(current)); pos = target.getLineEndOffset(current) - 1; } } } } break; case EAST: if(pos == -1) { pos = view.getStartOffset(); } else { pos = Math.min(pos + 1, view.getDocument().getLength()); if (target.isCodeFoldingEnabled()) { int last = pos==0 ? 0 : target.getLineOfOffset(pos-1); int current = target.getLineOfOffset(pos); if (last!=current) { // If moving down a line... FoldManager fm = target.getFoldManager(); if (fm.isLineHidden(current)) { int lineCount = target.getLineCount(); while (++current -1) os = OS_WINDOWS; else if (osName.indexOf("mac os x") > -1) os = OS_MAC_OSX; else if (osName.indexOf("linux") > -1) os = OS_LINUX; else os = OS_OTHER; } return os; } /** * Returns the flags necessary to create a {@link Pattern}. * * @param matchCase Whether the pattern should be case sensitive. * @param others Any other flags. This may be 0. * @return The flags. */ public static final int getPatternFlags(boolean matchCase, int others) { if (!matchCase) { others |= Pattern.CASE_INSENSITIVE|Pattern.UNICODE_CASE; } return others; } /** * Determines the position in the model that is closest to the given * view location in the row above. The component given must have a * size to compute the result. If the component doesn't have a size * a value of -1 will be returned. * * @param c the editor * @param offs the offset in the document >= 0 * @param x the X coordinate >= 0 * @return the position >= 0 if the request can be computed, otherwise * a value of -1 will be returned. * @exception BadLocationException if the offset is out of range */ public static final int getPositionAbove(RSyntaxTextArea c, int offs, float x, TabExpander e) throws BadLocationException { TokenOrientedView tov = (TokenOrientedView)e; Token token = tov.getTokenListForPhysicalLineAbove(offs); if (token==null) return -1; // A line containing only Token.NULL is an empty line. else if (token.getType()==Token.NULL) { int line = c.getLineOfOffset(offs); // Sure to be >0 ?? return c.getLineStartOffset(line-1); } else { return token.getListOffset(c, e, c.getMargin().left, x); } } /** * Determines the position in the model that is closest to the given * view location in the row below. The component given must have a * size to compute the result. If the component doesn't have a size * a value of -1 will be returned. * * @param c the editor * @param offs the offset in the document >= 0 * @param x the X coordinate >= 0 * @return the position >= 0 if the request can be computed, otherwise * a value of -1 will be returned. * @exception BadLocationException if the offset is out of range */ public static final int getPositionBelow(RSyntaxTextArea c, int offs, float x, TabExpander e) throws BadLocationException { TokenOrientedView tov = (TokenOrientedView)e; Token token = tov.getTokenListForPhysicalLineBelow(offs); if (token==null) return -1; // A line containing only Token.NULL is an empty line. else if (token.getType()==Token.NULL) { int line = c.getLineOfOffset(offs); // Sure to be > c.getLineCount()-1 ?? // return c.getLineStartOffset(line+1); FoldManager fm = c.getFoldManager(); line = fm.getVisibleLineBelow(line); return c.getLineStartOffset(line); } else { return token.getListOffset(c, e, c.getMargin().left, x); } } /** * Returns the last non-whitespace, non-comment token, starting with the * specified line. * * @param doc The document. * @param line The line at which to start looking. * @return The last non-whitespace, non-comment token, or null * if there isn't one. * @see #getNextImportantToken(Token, RSyntaxTextArea, int) * @see #getPreviousImportantTokenFromOffs(RSyntaxDocument, int) */ public static final Token getPreviousImportantToken(RSyntaxDocument doc, int line) { if (line<0) { return null; } Token t = doc.getTokenListForLine(line); if (t!=null) { t = t.getLastNonCommentNonWhitespaceToken(); if (t!=null) { return t; } } return getPreviousImportantToken(doc, line-1); } /** * Returns the last non-whitespace, non-comment token, before the * specified offset. * * @param doc The document. * @param offs The ending offset for the search. * @return The last non-whitespace, non-comment token, or null * if there isn't one. * @see #getPreviousImportantToken(RSyntaxDocument, int) * @see #getNextImportantToken(Token, RSyntaxTextArea, int) */ public static final Token getPreviousImportantTokenFromOffs( RSyntaxDocument doc, int offs) { Element root = doc.getDefaultRootElement(); int line = root.getElementIndex(offs); Token t = doc.getTokenListForLine(line); // Check line containing offs Token target = null; while (t!=null && t.isPaintable() && !t.containsPosition(offs)) { if (!t.isCommentOrWhitespace()) { target = t; } t = t.getNextToken(); } // Check previous line(s) if (target==null) { target = RSyntaxUtilities.getPreviousImportantToken(doc, line-1); } return target; } /** * Returns the token at the specified offset. * * @param textArea The text area. * @param offset The offset of the token. * @return The token, or null if the offset is not valid. * @see #getTokenAtOffset(RSyntaxDocument, int) * @see #getTokenAtOffset(Token, int) */ public static final Token getTokenAtOffset(RSyntaxTextArea textArea, int offset) { RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); return RSyntaxUtilities.getTokenAtOffset(doc, offset); } /** * Returns the token at the specified offset. * * @param doc The document. * @param offset The offset of the token. * @return The token, or null if the offset is not valid. * @see #getTokenAtOffset(RSyntaxTextArea, int) * @see #getTokenAtOffset(Token, int) */ public static final Token getTokenAtOffset(RSyntaxDocument doc, int offset) { Element root = doc.getDefaultRootElement(); int lineIndex = root.getElementIndex(offset); Token t = doc.getTokenListForLine(lineIndex); return RSyntaxUtilities.getTokenAtOffset(t, offset); } /** * Returns the token at the specified index, or null if * the given offset isn't in this token list's range.
* Note that this method does NOT check to see if tokenList * is null; callers should check for themselves. * * @param tokenList The list of tokens in which to search. * @param offset The offset at which to get the token. * @return The token at offset, or null if * none of the tokens are at that offset. * @see #getTokenAtOffset(RSyntaxTextArea, int) * @see #getTokenAtOffset(RSyntaxDocument, int) */ public static final Token getTokenAtOffset(Token tokenList, int offset) { for (Token t=tokenList; t!=null && t.isPaintable(); t=t.getNextToken()){ if (t.containsPosition(offset)) return t; } return null; } /** * Returns the end of the word at the given offset. * * @param textArea The text area. * @param offs The offset into the text area's content. * @return The end offset of the word. * @throws BadLocationException If offs is invalid. * @see #getWordStart(RSyntaxTextArea, int) */ public static int getWordEnd(RSyntaxTextArea textArea, int offs) throws BadLocationException { Document doc = textArea.getDocument(); int endOffs = textArea.getLineEndOffsetOfCurrentLine(); int lineEnd = Math.min(endOffs, doc.getLength()); if (offs == lineEnd) { // End of the line. return offs; } String s = doc.getText(offs, lineEnd-offs-1); if (s!=null && s.length()>0) { // Should always be true int i = 0; int count = s.length(); char ch = s.charAt(i); if (Character.isWhitespace(ch)) { while (ioffs is invalid. * @see #getWordEnd(RSyntaxTextArea, int) */ public static int getWordStart(RSyntaxTextArea textArea, int offs) throws BadLocationException { Document doc = textArea.getDocument(); Element line = getLineElem(doc, offs); if (line == null) { throw new BadLocationException("No word at " + offs, offs); } int lineStart = line.getStartOffset(); if (offs==lineStart) { // Start of the line. return offs; } int endOffs = Math.min(offs+1, doc.getLength()); String s = doc.getText(lineStart, endOffs-lineStart); if(s != null && s.length() > 0) { int i = s.length() - 1; char ch = s.charAt(i); if (Character.isWhitespace(ch)) { while (i>0 && Character.isWhitespace(s.charAt(i-1))) { i--; } offs = lineStart + i; } else if (Character.isLetterOrDigit(ch)) { while (i>0 && Character.isLetterOrDigit(s.charAt(i-1))) { i--; } offs = lineStart + i; } } return offs; } /** * Determines the width of the given token list taking tabs * into consideration. This is implemented in a 1.1 style coordinate * system where ints are used and 72dpi is assumed.

* * This method also assumes that the passed-in token list begins at * x-pixel 0 in the view (for tab purposes). * * @param tokenList The tokenList list representing the text. * @param textArea The text area in which this token list resides. * @param e The tab expander. This value cannot be null. * @return The width of the token list, in pixels. */ public static final float getTokenListWidth(Token tokenList, RSyntaxTextArea textArea, TabExpander e) { return getTokenListWidth(tokenList, textArea, e, 0); } /** * Determines the width of the given token list taking tabs * into consideration. This is implemented in a 1.1 style coordinate * system where ints are used and 72dpi is assumed.

* * @param tokenList The token list list representing the text. * @param textArea The text area in which this token list resides. * @param e The tab expander. This value cannot be null. * @param x0 The x-pixel coordinate of the start of the token list. * @return The width of the token list, in pixels. * @see #getTokenListWidthUpTo */ public static final float getTokenListWidth(final Token tokenList, RSyntaxTextArea textArea, TabExpander e, float x0) { float width = x0; for (Token t=tokenList; t!=null&&t.isPaintable(); t=t.getNextToken()) { width += t.getWidth(textArea, e, width); } return width - x0; } /** * Determines the width of the given token list taking tabs into * consideration and only up to the given index in the document * (exclusive). * * @param tokenList The token list representing the text. * @param textArea The text area in which this token list resides. * @param e The tab expander. This value cannot be null. * @param x0 The x-pixel coordinate of the start of the token list. * @param upTo The document position at which you want to stop, * exclusive. If this position is before the starting position * of the token list, a width of 0 will be * returned; similarly, if this position comes after the entire * token list, the width of the entire token list is returned. * @return The width of the token list, in pixels, up to, but not * including, the character at position upTo. * @see #getTokenListWidth */ public static final float getTokenListWidthUpTo(final Token tokenList, RSyntaxTextArea textArea, TabExpander e, float x0, int upTo) { float width = 0; for (Token t=tokenList; t!=null&&t.isPaintable(); t=t.getNextToken()) { if (t.containsPosition(upTo)) { return width + t.getWidthUpTo(upTo-t.getOffset(), textArea, e, x0+width); } width += t.getWidth(textArea, e, x0+width); } return width; } /** * Returns whether or not this character is a "bracket" to be matched by * such programming languages as C, C++, and Java. * * @param ch The character to check. * @return Whether or not the character is a "bracket" - one of '(', ')', * '[', ']', '{', and '}'. */ public static final boolean isBracket(char ch) { // We need the first condition as it might be that ch>255, and thus // not in our table. '}' is the highest-valued char in the bracket // set. return ch<='}' && (dataTable[ch]&BRACKET_MASK)>0; } /** * Returns whether or not a character is a digit (0-9). * * @param ch The character to check. * @return Whether or not the character is a digit. */ public static final boolean isDigit(char ch) { // We do it this way as we'd need to do two conditions anyway (first // to check that ch<255 so it can index into our table, then whether // that table position has the digit mask). return ch>='0' && ch<='9'; } /** * Returns whether or not this character is a hex character. This method * accepts both upper- and lower-case letters a-f. * * @param ch The character to check. * @return Whether or not the character is a hex character 0-9, a-f, or * A-F. */ public static final boolean isHexCharacter(char ch) { // We need the first condition as it could be that ch>255 (and thus // not a valid index into our table). 'f' is the highest-valued // char that is a valid hex character. return (ch<='f') && (dataTable[ch]&HEX_CHARACTER_MASK)>0; } /** * Returns whether a character is a Java operator. Note that C and C++ * operators are the same as Java operators. * * @param ch The character to check. * @return Whether or not the character is a Java operator. */ public static final boolean isJavaOperator(char ch) { // We need the first condition as it could be that ch>255 (and thus // not a valid index into our table). '~' is the highest-valued // char that is a valid Java operator. return (ch<='~') && (dataTable[ch]&JAVA_OPERATOR_MASK)>0; } /** * Returns whether a character is a US-ASCII letter (A-Z or a-z). * * @param ch The character to check. * @return Whether or not the character is a US-ASCII letter. */ public static final boolean isLetter(char ch) { // We need the first condition as it could be that ch>255 (and thus // not a valid index into our table). return (ch<='z') && (dataTable[ch]&LETTER_MASK)>0; } /** * Returns whether or not a character is a US-ASCII letter or a digit. * * @param ch The character to check. * @return Whether or not the character is a US-ASCII letter or a digit. */ public static final boolean isLetterOrDigit(char ch) { // We need the first condition as it could be that ch>255 (and thus // not a valid index into our table). return (ch<='z') && (dataTable[ch]&LETTER_OR_DIGIT_MASK)>0; } /** * Returns whether the specified color is "light" to use as a foreground. * Colors that return true indicate that the current Look and * Feel probably uses light text colors on a dark background. * * @param fg The foreground color. * @return Whether it is a "light" foreground color. * @see #getHyperlinkForeground() */ public static final boolean isLightForeground(Color fg) { return fg.getRed()>0xa0 && fg.getGreen()>0xa0 && fg.getBlue()>0xa0; } /** * Returns whether the specified token is a single non-word char (e.g. not * in [A-Za-z]. This is a HACK to work around the fact that * many standard token makers return things like semicolons and periods as * {@link Token#IDENTIFIER}s just to make the syntax highlighting coloring * look a little better. * * @param t The token to check. This cannot be null. * @return Whether the token is a single non-word char. */ public static final boolean isNonWordChar(Token t) { return t.length()==1 && !RSyntaxUtilities.isLetter(t.charAt(0)); } /** * Returns whether or not a character is a whitespace character (either * a space ' ' or tab '\t'). This checks for the Unicode character values * 0x0020 and 0x0009. * * @param ch The character to check. * @return Whether or not the character is a whitespace character. */ public static final boolean isWhitespace(char ch) { // We do it this way as we'd need to do two conditions anyway (first // to check that ch<255 so it can index into our table, then whether // that table position has the whitespace mask). return ch==' ' || ch=='\t'; } /** * Returns whether a regular expression token can follow the specified * token in JavaScript. * * @param t The token to check, which may be null. * @return Whether a regular expression token may follow this one in * JavaScript. */ public static boolean regexCanFollowInJavaScript(Token t) { char ch; // We basically try to mimic Eclipse's JS editor's behavior here. return t==null || //t.isOperator() || (t.length()==1 && ( (ch=t.charAt(0))=='=' || ch=='(' || ch==',' || ch=='?' || ch==':' || ch=='[' || ch=='!' || ch=='&' )) || /* Operators "==", "===", "!=", "!==", "&&", "||" */ (t.getType()==Token.OPERATOR && (t.charAt(t.length()-1)=='=' || t.is(JS_AND) || t.is(JS_OR))) || t.is(Token.RESERVED_WORD_2, JS_KEYWORD_RETURN); } /** * Selects a range of text in a text component. If the new selection is * outside of the previous viewable rectangle, then the view is centered * around the new selection. * * @param textArea The text component whose selection is to be centered. * @param range The range to select. */ public static final void selectAndPossiblyCenter(JTextArea textArea, DocumentRange range, boolean select) { int start = range.getStartOffset(); int end = range.getEndOffset(); boolean foldsExpanded = false; if (textArea instanceof RSyntaxTextArea) { RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; FoldManager fm = rsta.getFoldManager(); if (fm.isCodeFoldingSupportedAndEnabled()) { foldsExpanded = fm.ensureOffsetNotInClosedFold(start); foldsExpanded |= fm.ensureOffsetNotInClosedFold(end); } } if (select) { textArea.setSelectionStart(start); textArea.setSelectionEnd(end); } Rectangle r = null; try { r = textArea.modelToView(start); if (r==null) { // Not yet visible; i.e. JUnit tests return; } if (end!=start) { r = r.union(textArea.modelToView(end)); } } catch (BadLocationException ble) { // Never happens ble.printStackTrace(); if (select) { textArea.setSelectionStart(start); textArea.setSelectionEnd(end); } return; } Rectangle visible = textArea.getVisibleRect(); // If the new selection is already in the view, don't scroll, // as that is visually jarring. if (!foldsExpanded && visible.contains(r)) { if (select) { textArea.setSelectionStart(start); textArea.setSelectionEnd(end); } return; } visible.x = r.x - (visible.width - r.width) / 2; visible.y = r.y - (visible.height - r.height) / 2; Rectangle bounds = textArea.getBounds(); Insets i = textArea.getInsets(); bounds.x = i.left; bounds.y = i.top; bounds.width -= i.left + i.right; bounds.height -= i.top + i.bottom; if (visible.x < bounds.x) { visible.x = bounds.x; } if (visible.x + visible.width > bounds.x + bounds.width) { visible.x = bounds.x + bounds.width - visible.width; } if (visible.y < bounds.y) { visible.y = bounds.y; } if (visible.y + visible.height > bounds.y + bounds.height) { visible.y = bounds.y + bounds.height - visible.height; } textArea.scrollRectToVisible(visible); } /** * If the character is an upper-case US-ASCII letter, it returns the * lower-case version of that letter; otherwise, it just returns the * character. * * @param ch The character to lower-case (if it is a US-ASCII upper-case * character). * @return The lower-case version of the character. */ public static final char toLowerCase(char ch) { // We can logical OR with 32 because A-Z are 65-90 in the ASCII table // and none of them have the 6th bit (32) set, and a-z are 97-122 in // the ASCII table, which is 32 over from A-Z. // We do it this way as we'd need to do two conditions anyway (first // to check that ch<255 so it can index into our table, then whether // that table position has the upper-case mask). if (ch>='A' && ch<='Z') return (char)(ch | 0x20); return ch; } /** * Creates a regular expression pattern that matches a "wildcard" pattern. * * @param wildcard The wildcard pattern. * @param matchCase Whether the pattern should be case sensitive. * @param escapeStartChar Whether to escape a starting '^' * character. * @return The pattern. */ public static Pattern wildcardToPattern(String wildcard, boolean matchCase, boolean escapeStartChar) { int flags = RSyntaxUtilities.getPatternFlags(matchCase, 0); StringBuilder sb = new StringBuilder(); for (int i=0; i0 || escapeStartChar) { sb.append('\\'); } sb.append('^'); break; case '\\': case '.': case '|': case '+': case '-': case '$': case '[': case ']': case '{': case '}': case '(': case ')': sb.append('\\').append(ch); break; default: sb.append(ch); break; } } Pattern p = null; try { p = Pattern.compile(sb.toString(), flags); } catch (PatternSyntaxException pse) { pse.printStackTrace(); p = Pattern.compile(".+"); } return p; } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/RTfToText.java000066400000000000000000000127501257417003700273340ustar00rootroot00000000000000/* * 07/28/2008 * * RtfToText.java - Returns the plain text version of RTF documents. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.io.*; /** * Gets the plain text version of RTF documents.

* * This is used by RtfTransferable to return the plain text * version of the transferable when the receiver does not support RTF. * * @author Robert Futrell * @version 1.0 */ class RtfToText { private Reader r; private StringBuilder sb; private StringBuilder controlWord; private int blockCount; private boolean inControlWord; /** * Private constructor. * * @param r The reader to read RTF text from. */ private RtfToText(Reader r) { this.r = r; sb = new StringBuilder(); controlWord = new StringBuilder(); blockCount = 0; inControlWord = false; } /** * Converts the RTF text read from this converter's Reader * into plain text. It is the caller's responsibility to close the * reader after this method is called. * * @return The plain text. * @throws IOException If an IO error occurs. */ private String convert() throws IOException { // Skip over first curly brace as the whole file is in '{' and '}' int i = r.read(); if (i!='{') { throw new IOException("Invalid RTF file"); } while ((i=r.read())!=-1) { char ch = (char)i; switch (ch) { case '{': if (inControlWord && controlWord.length()==0) { // "\{" sb.append('{'); controlWord.setLength(0); inControlWord = false; } else { blockCount++; } break; case '}': if (inControlWord && controlWord.length()==0) { // "\}" sb.append('}'); controlWord.setLength(0); inControlWord = false; } else { blockCount--; } break; case '\\': if (blockCount==0) { if (inControlWord) { if (controlWord.length()==0) { // "\\" sb.append('\\'); controlWord.setLength(0); inControlWord = false; } else { endControlWord(); inControlWord = true; } } else { inControlWord = true; } } break; case ' ': if (blockCount==0) { if (inControlWord) { endControlWord(); } else { sb.append(' '); } } break; case '\r': case '\n': if (blockCount==0) { if (inControlWord) { endControlWord(); } // Otherwise, ignore } break; default: if (blockCount==0) { if (inControlWord) { controlWord.append(ch); } else { sb.append(ch); } } break; } } return sb.toString(); } /** * Ends a control word. Checks whether it is a common one that affects * the plain text output (such as "par" or "tab") * and updates the text buffer accordingly. */ private void endControlWord() { String word = controlWord.toString(); if ("par".equals(word)) { sb.append('\n'); } else if ("tab".equals(word)) { sb.append('\t'); } controlWord.setLength(0); inControlWord = false; } /** * Converts the contents of the specified byte array representing * an RTF document into plain text. * * @param rtf The byte array representing an RTF document. * @return The contents of the RTF document, in plain text. * @throws IOException If an IO error occurs. */ public static String getPlainText(byte[] rtf) throws IOException { return getPlainText(new ByteArrayInputStream(rtf)); } /** * Converts the contents of the specified RTF file to plain text. * * @param file The RTF file to convert. * @return The contents of the file, in plain text. * @throws IOException If an IO error occurs. */ public static String getPlainText(File file) throws IOException { return getPlainText(new BufferedReader(new FileReader(file))); } /** * Converts the contents of the specified input stream to plain text. * The input stream will be closed when this method returns. * * @param in The input stream to convert. This will be closed when this * method returns. * @return The contents of the stream, in plain text. * @throws IOException If an IO error occurs. */ public static String getPlainText(InputStream in) throws IOException { return getPlainText(new InputStreamReader(in, "US-ASCII")); } /** * Converts the contents of the specified Reader to plain text. * * @param r The Reader. This will be closed when this method * returns. * @return The contents of the Reader, in plain text. * @throws IOException If an IO error occurs. */ private static String getPlainText(Reader r) throws IOException { try { RtfToText converter = new RtfToText(r); return converter.convert(); } finally { r.close(); } } /** * Converts the contents of the specified String to plain text. * * @param rtf A string whose contents represent an RTF document. * @return The contents of the String, in plain text. * @throws IOException If an IO error occurs. */ public static String getPlainText(String rtf) throws IOException { return getPlainText(new StringReader(rtf)); } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/RtfGenerator.java000066400000000000000000000325111257417003700300700ustar00rootroot00000000000000/* * 07/28/2008 * * RtfGenerator.java - Generates RTF via a simple Java API. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.awt.Color; import java.awt.Font; import java.awt.Toolkit; import java.util.ArrayList; import java.util.List; import org.fife.ui.rtextarea.RTextArea; /** * Generates RTF text via a simple Java API.

* * The following RTF features are supported: *

    *
  • Fonts *
  • Font sizes *
  • Foreground and background colors *
  • Bold, italic, and underline *
* * The RTF generated isn't really "optimized," but it will do, especially for * small amounts of text, such as what's common when copy-and-pasting. It * tries to be sufficient for the use case of copying syntax highlighted * code: *
    *
  • It assumes that tokens changing foreground color often is fairly * common. *
  • It assumes that background highlighting is fairly uncommon. *
* * @author Robert Futrell * @version 1.0 */ public class RtfGenerator { private List fontList; private List colorList; private StringBuilder document; private boolean lastWasControlWord; private int lastFontIndex; private int lastFGIndex; private boolean lastBold; private boolean lastItalic; private int lastFontSize; /** * Java2D assumes a 72 dpi screen resolution, but on Windows the screen * resolution is either 96 dpi or 120 dpi, depending on your font display * settings. This is an attempt to make the RTF generated match the * size of what's displayed in the RSyntaxTextArea. */ private int screenRes; /** * The default font size for RTF. This is point size, in half * points. */ private static final int DEFAULT_FONT_SIZE = 12;//24; /** * Constructor. */ public RtfGenerator() { fontList = new ArrayList(1); // Usually only 1. colorList = new ArrayList(1); // Usually only 1. document = new StringBuilder(); reset(); } /** * Adds a newline to the RTF document. * * @see #appendToDoc(String, Font, Color, Color) */ public void appendNewline() { document.append("\\par"); document.append('\n'); // Just for ease of reading RTF. lastWasControlWord = false; } /** * Appends styled text to the RTF document being generated. * * @param text The text to append. * @param f The font of the text. If this is null, the * default font is used. * @param fg The foreground of the text. If this is null, * the default foreground color is used. * @param bg The background color of the text. If this is * null, the default background color is used. * @see #appendNewline() */ public void appendToDoc(String text, Font f, Color fg, Color bg) { appendToDoc(text, f, fg, bg, false); } /** * Appends styled text to the RTF document being generated. * * @param text The text to append. * @param f The font of the text. If this is null, the * default font is used. * @param bg The background color of the text. If this is * null, the default background color is used. * @param underline Whether the text should be underlined. * @see #appendNewline() */ public void appendToDocNoFG(String text, Font f, Color bg, boolean underline) { appendToDoc(text, f, null, bg, underline, false); } /** * Appends styled text to the RTF document being generated. * * @param text The text to append. * @param f The font of the text. If this is null, the * default font is used. * @param fg The foreground of the text. If this is null, * the default foreground color is used. * @param bg The background color of the text. If this is * null, the default background color is used. * @param underline Whether the text should be underlined. * @see #appendNewline() */ public void appendToDoc(String text, Font f, Color fg, Color bg, boolean underline) { appendToDoc(text, f, fg, bg, underline, true); } /** * Appends styled text to the RTF document being generated. * * @param text The text to append. * @param f The font of the text. If this is null, the * default font is used. * @param fg The foreground of the text. If this is null, * the default foreground color is used. * @param bg The background color of the text. If this is * null, the default background color is used. * @param underline Whether the text should be underlined. * @param setFG Whether the foreground specified by fg should * be honored (if it is non-null). * @see #appendNewline() */ public void appendToDoc(String text, Font f, Color fg, Color bg, boolean underline, boolean setFG) { if (text!=null) { // Set font to use, if different from last addition. int fontIndex = f==null ? 0 : (getFontIndex(fontList, f)+1); if (fontIndex!=lastFontIndex) { document.append("\\f").append(fontIndex); lastFontIndex = fontIndex; lastWasControlWord = true; } // Set styles to use. if (f!=null) { int fontSize = fixFontSize(f.getSize2D()*2); // Half points! if (fontSize!=lastFontSize) { document.append("\\fs").append(fontSize); lastFontSize = fontSize; lastWasControlWord = true; } if (f.isBold()!=lastBold) { document.append(lastBold ? "\\b0" : "\\b"); lastBold = !lastBold; lastWasControlWord = true; } if (f.isItalic()!=lastItalic) { document.append(lastItalic ? "\\i0" : "\\i"); lastItalic = !lastItalic; lastWasControlWord = true; } } else { // No font specified - assume neither bold nor italic. if (lastFontSize!=DEFAULT_FONT_SIZE) { document.append("\\fs").append(DEFAULT_FONT_SIZE); lastFontSize = DEFAULT_FONT_SIZE; lastWasControlWord = true; } if (lastBold) { document.append("\\b0"); lastBold = false; lastWasControlWord = true; } if (lastItalic) { document.append("\\i0"); lastItalic = false; lastWasControlWord = true; } } if (underline) { document.append("\\ul"); lastWasControlWord = true; } // Set the foreground color. if (setFG) { int fgIndex = 0; if (fg!=null) { // null => fg color index 0 fgIndex = getColorIndex(colorList, fg)+1; } if (fgIndex!=lastFGIndex) { document.append("\\cf").append(fgIndex); lastFGIndex = fgIndex; lastWasControlWord = true; } } // Set the background color. if (bg!=null) { int pos = getColorIndex(colorList, bg); document.append("\\highlight").append(pos+1); lastWasControlWord = true; } if (lastWasControlWord) { document.append(' '); // Delimiter lastWasControlWord = false; } escapeAndAdd(document, text); // Reset everything that was set for this text fragment. if (bg!=null) { document.append("\\highlight0"); lastWasControlWord = true; } if (underline) { document.append("\\ul0"); lastWasControlWord = true; } } } /** * Appends some text to a buffer, with special care taken for special * characters as defined by the RTF spec: * *
    *
  • All tab characters are replaced with the string * "\tab" *
  • '\', '{' and '}' are changed to "\\", "\{" and "\}" *
* * @param text The text to append (with tab chars substituted). * @param sb The buffer to append to. */ private final void escapeAndAdd(StringBuilder sb, String text) { int count = text.length(); for (int i=0; i * * Java2D assumes 72 dpi. On systems with larger dpi (Windows, GTK, etc.), * font rendering will appear too small if we simply return a Java "Font" * object's getSize() value. We need to adjust it for the screen * resolution. * * @param pointSize A Java Font's point size, as returned from * getSize2D(). * @return The font point size, adjusted for the current screen resolution. * This will allow other applications to render fonts the same * size as they appear in the Java application. */ private int fixFontSize(float pointSize) { if (screenRes!=72) { // Java2D assumes 72 dpi pointSize = Math.round(pointSize*72f/screenRes); } return (int)pointSize; } /** * Returns the index of the specified item in a list. If the item * is not in the list, it is added, and its new index is returned. * * @param list The list (possibly) containing the item. * @param item The item to get the index of. * @return The index of the item. */ private static int getColorIndex(List list, Color item) { int pos = list.indexOf(item); if (pos==-1) { list.add(item); pos = list.size()-1; } return pos; } private String getColorTableRtf() { // Example: // "{\\colortbl ;\\red255\\green0\\blue0;\\red0\\green0\\blue255; }" StringBuilder sb = new StringBuilder(); sb.append("{\\colortbl ;"); for (Color c : colorList) { sb.append("\\red").append(c.getRed()); sb.append("\\green").append(c.getGreen()); sb.append("\\blue").append(c.getBlue()); sb.append(';'); } sb.append("}"); return sb.toString(); } /** * Returns the index of the specified font in a list of fonts. This * method only checks for a font by its family name; its attributes such * as bold and italic are ignored.

* * If the font is not in the list, it is added, and its new index is * returned. * * @param list The list (possibly) containing the font. * @param font The font to get the index of. * @return The index of the font. */ private static int getFontIndex(List list, Font font) { String fontName = font.getFamily(); for (int i=0; iString. */ public String getRtf() { StringBuilder sb = new StringBuilder(); sb.append("{"); // Header sb.append("\\rtf1\\ansi\\ansicpg1252"); sb.append("\\deff0"); // First font in font table is the default sb.append("\\deflang1033"); sb.append("\\viewkind4"); // "Normal" view sb.append("\\uc\\pard\\f0"); sb.append("\\fs20"); // Font size in half-points (default 24) sb.append(getFontTableRtf()).append('\n'); sb.append(getColorTableRtf()).append('\n'); // Content sb.append(document); sb.append("}"); //System.err.println("*** " + sb.length()); return sb.toString(); } /** * Resets this generator. All document information and content is * cleared. */ public void reset() { fontList.clear(); colorList.clear(); document.setLength(0); lastWasControlWord = false; lastFontIndex = 0; lastFGIndex = 0; lastBold = false; lastItalic = false; lastFontSize = DEFAULT_FONT_SIZE; screenRes = Toolkit.getDefaultToolkit().getScreenResolution(); } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/RtfTransferable.java000066400000000000000000000042131257417003700305500ustar00rootroot00000000000000/* * 07/28/2008 * * RtfTransferable.java - Used during drag-and-drop to represent RTF text. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.awt.datatransfer.*; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.StringReader; /** * Object used during copy/paste and DnD operations to represent RTF text. * It can return the text being moved as either RTF or plain text. This * class is basically the same as * java.awt.datatransfer.StringSelection, except that it can also * return the text as RTF. * * @author Robert Futrell * @version 1.0 */ class RtfTransferable implements Transferable { /** * The RTF data, in bytes (the RTF is 7-bit ascii). */ private byte[] data; /** * The "flavors" the text can be returned as. */ private final DataFlavor[] FLAVORS = { new DataFlavor("text/rtf", "RTF"), DataFlavor.stringFlavor, DataFlavor.plainTextFlavor // deprecated }; /** * Constructor. * * @param data The RTF data. */ public RtfTransferable(byte[] data) { this.data = data; } public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { if (flavor.equals(FLAVORS[0])) { // RTF return new ByteArrayInputStream(data==null ? new byte[0] : data); } else if (flavor.equals(FLAVORS[1])) { // stringFlavor return data==null ? "" : RtfToText.getPlainText(data); } else if (flavor.equals(FLAVORS[2])) { // plainTextFlavor (deprecated) String text = ""; // Valid if data==null if (data!=null) { text = RtfToText.getPlainText(data); } return new StringReader(text); } else { throw new UnsupportedFlavorException(flavor); } } public DataFlavor[] getTransferDataFlavors() { return FLAVORS.clone(); } public boolean isDataFlavorSupported(DataFlavor flavor) { for (int i=0; i * * This class must be used as a LayerPainter. * * @author Robert Futrell * @version 1.0 */ public class SquiggleUnderlineHighlightPainter extends ChangeableHighlightPainter { private static final int AMT = 2; /** * Constructor. * * @param color The color of the squiggle. This cannot be * null. */ public SquiggleUnderlineHighlightPainter(Color color) { super(color); setPaint(color); } /** * Paints a portion of a highlight. * * @param g the graphics context * @param offs0 the starting model offset >= 0 * @param offs1 the ending model offset >= offs1 * @param bounds the bounding box of the view, which is not * necessarily the region to paint. * @param c the editor * @param view View painting for * @return region drawing occurred in */ @Override public Shape paintLayer(Graphics g, int offs0, int offs1, Shape bounds, JTextComponent c, View view) { g.setColor((Color)getPaint()); if (offs0 == view.getStartOffset() && offs1 == view.getEndOffset()) { // Contained in view, can just use bounds. Rectangle alloc; if (bounds instanceof Rectangle) alloc = (Rectangle)bounds; else alloc = bounds.getBounds(); paintSquiggle(g, alloc); return alloc; } // Otherwise, should only render part of View. try { // --- determine locations --- Shape shape = view.modelToView(offs0, Position.Bias.Forward, offs1,Position.Bias.Backward, bounds); Rectangle r = (shape instanceof Rectangle) ? (Rectangle)shape : shape.getBounds(); paintSquiggle(g, r); return r; } catch (BadLocationException e) { e.printStackTrace(); // can't render } // Only if exception return null; } /** * Paints a squiggle underneath text in the specified rectangle. * * @param g The graphics context with which to paint. * @param r The rectangle containing the text. */ protected void paintSquiggle(Graphics g, Rectangle r) { int x = r.x; int y = r.y + r.height - AMT; int delta = -AMT; while (xRSyntaxTextArea has a corresponding Style; this * Style tells us the following things: * *

    *
  • What foreground color to use for tokens of this type.
  • *
  • What background color to use.
  • *
  • The font to use.
  • *
  • Whether the token should be underlined.
  • *
* * @author Robert Futrell * @version 0.6 */ public class Style implements Cloneable { public static final Color DEFAULT_FOREGROUND = Color.BLACK; public static final Color DEFAULT_BACKGROUND = null; public static final Font DEFAULT_FONT = null; public Color foreground; public Color background; public boolean underline; public Font font; FontMetrics fontMetrics; /** * Creates a new style defaulting to black foreground, no * background, and no styling. */ public Style() { this(DEFAULT_FOREGROUND); } /** * Creates a new style with the specified foreground and no styling. * * @param fg The foreground color to use. */ public Style(Color fg) { this(fg, DEFAULT_BACKGROUND); } /** * Creates a new style with the specified colors and no styling. * * @param fg The foreground color to use. * @param bg The background color to use. */ public Style(Color fg, Color bg) { this(fg, bg, DEFAULT_FONT); } /** * Creates a new style. * * @param fg The foreground color to use. * @param bg The background color to use. * @param font The font for this syntax scheme. */ public Style(Color fg, Color bg, Font font) { this(fg, bg, font, false); } /** * Creates a new style. * * @param fg The foreground color to use. * @param bg The background color to use. * @param font The font for this syntax scheme. * @param underline Whether or not to underline tokens with this style. */ public Style(Color fg, Color bg, Font font, boolean underline) { foreground = fg; background = bg; this.font = font; this.underline = underline; this.fontMetrics = font==null ? null : new JPanel().getFontMetrics(font); // Default, no rendering hints! } /** * Returns whether or not two (possibly null) objects are * equal. */ private boolean areEqual(Object o1, Object o2) { return (o1==null && o2==null) || (o1!=null && o1.equals(o2)); } /** * Returns a deep copy of this object. * * @return The copy. */ @Override public Object clone() { Style clone = null; try { clone = (Style)super.clone(); } catch (CloneNotSupportedException cnse) { // Never happens cnse.printStackTrace(); return null; } clone.foreground = foreground; clone.background = background; clone.font = font; clone.underline = underline; clone.fontMetrics = fontMetrics; return clone; } /** * Returns whether or not two syntax schemes are equal. * * @param o2 The object with which to compare this syntax scheme. * @return Whether or not these two syntax schemes represent the same * scheme. */ @Override public boolean equals(Object o2) { if (o2 instanceof Style) { Style ss2 = (Style)o2; if (this.underline==ss2.underline && areEqual(foreground, ss2.foreground) && areEqual(background, ss2.background) && areEqual(font, ss2.font) && areEqual(fontMetrics, ss2.fontMetrics)) return true; } return false; } /** * Computes the hash code to use when adding this syntax scheme to * hash tables.

* * This method is implemented, since {@link #equals(Object)} is implemented, * to keep FindBugs happy. * * @return The hash code. */ @Override public int hashCode() { int hashCode = underline ? 1 : 0; if (foreground!=null) { hashCode ^= foreground.hashCode(); } if (background!=null) { hashCode ^= background.hashCode(); } return hashCode; } /** * Returns a string representation of this style. * * @return A string representation of this style. */ @Override public String toString() { return "[Style: foreground: " + foreground + ", background: " + background + ", underline: " + underline + ", font: " + font + "]"; } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/SyntaxConstants.java000066400000000000000000000137641257417003700306620ustar00rootroot00000000000000/* * 03/08/2004 * * SyntaxConstants.java - Constants used by RSyntaxTextArea and friends. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; /** * Constants that define the different programming languages understood by * RSyntaxTextArea. These constants are the values you can pass * to {@link RSyntaxTextArea#setSyntaxEditingStyle(String)} to get syntax * highlighting.

* * By default, all RSyntaxTextAreas can render all of these * languages, but this can be changed (the list can be augmented or completely * overwritten) on a per-text area basis. What languages can be rendered is * actually managed by the {@link TokenMakerFactory} installed on the text * area's {@link RSyntaxDocument}. By default, all * RSyntaxDocumenets have a factory installed capable of handling * all of these languages. * * @author Robert Futrell * @version 1.0 */ public interface SyntaxConstants { /** * Style meaning don't syntax highlight anything. */ public static final String SYNTAX_STYLE_NONE = "text/plain"; /** * Style for highlighting ActionScript. */ public static final String SYNTAX_STYLE_ACTIONSCRIPT = "text/actionscript"; /** * Style for highlighting x86 assembler. */ public static final String SYNTAX_STYLE_ASSEMBLER_X86 = "text/asm"; /** * Style for highlighting BBCode. */ public static final String SYNTAX_STYLE_BBCODE = "text/bbcode"; /** * Style for highlighting C. */ public static final String SYNTAX_STYLE_C = "text/c"; /** * Style for highlighting Clojure. */ public static final String SYNTAX_STYLE_CLOJURE = "text/clojure"; /** * Style for highlighting C++. */ public static final String SYNTAX_STYLE_CPLUSPLUS = "text/cpp"; /** * Style for highlighting C#. */ public static final String SYNTAX_STYLE_CSHARP = "text/cs"; /** * Style for highlighting CSS. */ public static final String SYNTAX_STYLE_CSS = "text/css"; /** * Syntax style for highlighting D. */ public static final String SYNTAX_STYLE_D = "text/d"; /** * Style for highlighting Dart. */ public static final String SYNTAX_STYLE_DART = "text/dart"; /** * Style for highlighting Delphi/Pascal. */ public static final String SYNTAX_STYLE_DELPHI = "text/delphi"; /** * Style for highlighting DTD files. */ public static final String SYNTAX_STYLE_DTD = "text/dtd"; /** * Style for highlighting Fortran. */ public static final String SYNTAX_STYLE_FORTRAN = "text/fortran"; /** * Style for highlighting Groovy. */ public static final String SYNTAX_STYLE_GROOVY = "text/groovy"; /** * Style for highlighting .htaccess files. */ public static final String SYNTAX_STYLE_HTACCESS = "text/htaccess"; /** * Style for highlighting HTML. */ public static final String SYNTAX_STYLE_HTML = "text/html"; /** * Style for highlighting Java. */ public static final String SYNTAX_STYLE_JAVA = "text/java"; /** * Style for highlighting JavaScript. */ public static final String SYNTAX_STYLE_JAVASCRIPT = "text/javascript"; /** * Style for highlighting .jshintrc files. */ public static final String SYNTAX_STYLE_JSHINTRC = "text/jshintrc"; /** * Style for highlighting JSON. */ public static final String SYNTAX_STYLE_JSON = "text/json"; /** * Style for highlighting JSP. */ public static final String SYNTAX_STYLE_JSP = "text/jsp"; /** * Style for highlighting LaTeX. */ public static final String SYNTAX_STYLE_LATEX = "text/latex"; /** * Style for highlighting Less. */ public static final String SYNTAX_STYLE_LESS = "text/less"; /** * Style for highlighting Lisp. */ public static final String SYNTAX_STYLE_LISP = "text/lisp"; /** * Style for highlighting Lua. */ public static final String SYNTAX_STYLE_LUA = "text/lua"; /** * Style for highlighting makefiles. */ public static final String SYNTAX_STYLE_MAKEFILE = "text/makefile"; /** * Style for highlighting MXML. */ public static final String SYNTAX_STYLE_MXML = "text/mxml"; /** * Style for highlighting NSIS install scripts. */ public static final String SYNTAX_STYLE_NSIS = "text/nsis"; /** * Style for highlighting Perl. */ public static final String SYNTAX_STYLE_PERL = "text/perl"; /** * Style for highlighting PHP. */ public static final String SYNTAX_STYLE_PHP = "text/php"; /** * Style for highlighting properties files. */ public static final String SYNTAX_STYLE_PROPERTIES_FILE = "text/properties"; /** * Style for highlighting Python. */ public static final String SYNTAX_STYLE_PYTHON = "text/python"; /** * Style for highlighting Ruby. */ public static final String SYNTAX_STYLE_RUBY = "text/ruby"; /** * Style for highlighting SAS keywords. */ public static final String SYNTAX_STYLE_SAS = "text/sas"; /** * Style for highlighting Scala. */ public static final String SYNTAX_STYLE_SCALA = "text/scala"; /** * Style for highlighting SQL. */ public static final String SYNTAX_STYLE_SQL = "text/sql"; /** * Style for highlighting Tcl. */ public static final String SYNTAX_STYLE_TCL = "text/tcl"; /** * Style for highlighting UNIX shell keywords. */ public static final String SYNTAX_STYLE_UNIX_SHELL = "text/unix"; /** * Style for highlighting Visual Basic. */ public static final String SYNTAX_STYLE_VISUAL_BASIC = "text/vb"; /** * Style for highlighting Windows batch files. */ public static final String SYNTAX_STYLE_WINDOWS_BATCH = "text/bat"; /** * Style for highlighting XML. */ public static final String SYNTAX_STYLE_XML = "text/xml"; }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/SyntaxScheme.java000066400000000000000000000537371257417003700301160ustar00rootroot00000000000000/* * 02/26/2004 * * SyntaxScheme.java - The set of colors and tokens used by an RSyntaxTextArea * to color tokens. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field; import javax.swing.text.StyleContext; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.helpers.XMLReaderFactory; /** * The set of colors and styles used by an RSyntaxTextArea to * color tokens.

* You can use this class to programmatically set the fonts and colors used in * an RSyntaxTextArea, but for more powerful, externalized control, consider * using {@link Theme}s instead. * * @author Robert Futrell * @version 1.0 * @see Theme */ public class SyntaxScheme implements Cloneable, TokenTypes { private Style[] styles; private static final String VERSION = "*ver1"; /** * Creates a color scheme that either has all color values set to * a default value or set to null. * * @param useDefaults If true, all color values will * be set to default colors; if false, all colors * will be initially null. */ public SyntaxScheme(boolean useDefaults) { styles = new Style[DEFAULT_NUM_TOKEN_TYPES]; if (useDefaults) { restoreDefaults(null); } } /** * Creates a default color scheme. * * @param baseFont The base font to use. Keywords will be a bold version * of this font, and comments will be an italicized version of this * font. */ public SyntaxScheme(Font baseFont) { this(baseFont, true); } /** * Creates a default color scheme. * * @param baseFont The base font to use. Keywords will be a bold version * of this font, and comments will be an italicized version of this * font. * @param fontStyles Whether bold and italic should be used in the scheme * (vs. all tokens using a plain font). */ public SyntaxScheme(Font baseFont, boolean fontStyles) { styles = new Style[DEFAULT_NUM_TOKEN_TYPES]; restoreDefaults(baseFont, fontStyles); } /** * Changes the "base font" for this syntax scheme. This is called by * RSyntaxTextArea when its font changes via * setFont(). This looks for tokens that use a derivative of * the text area's old font (but bolded and/or italicized) and make them * use the new font with those stylings instead. This is desirable because * most programmers prefer a single font to be used in their text editor, * but might want bold (say for keywords) or italics. * * @param old The old font of the text area. * @param font The new font of the text area. */ void changeBaseFont(Font old, Font font) { for (int i=0; itrue if this color scheme and * otherScheme are the same scheme; * false otherwise. */ @Override public boolean equals(Object otherScheme) { // No need for null check; instanceof takes care of this for us, // i.e. "if (!(null instanceof Foo))" evaluates to "true". if (!(otherScheme instanceof SyntaxScheme)) { return false; } Style[] otherSchemes = ((SyntaxScheme)otherScheme).styles; int length = styles.length; for (int i=0; i"$rrggbb". * * @param c The color. * @return The string representation of the color. */ private static final String getHexString(Color c) { return "$" + Integer.toHexString((c.getRGB() & 0xffffff)+0x1000000). substring(1); } /** * Returns the specified style. * * @param index The index of the style. * @return The style. * @see #setStyle(int, Style) * @see #getStyleCount() */ public Style getStyle(int index) { return styles[index]; } /** * Returns the number of styles. * * @return The number of styles. * @see #getStyle(int) */ public int getStyleCount() { return styles.length; } /** * Used by third party implementors e.g. SquirreL SQL. Most applications do * not need to call this method. *

* Note that the returned array is not a copy of the style data; editing the * array will modify the styles used by any RSyntaxTextArea * using this scheme. * * @return The style array. * @see #setStyles(Style[]) */ public Style[] getStyles() { return styles; } /** * This is implemented to be consistent with {@link #equals(Object)}. * This is a requirement to keep FindBugs happy. * * @return The hash code for this object. */ @Override public int hashCode() { // Keep me fast. Iterating over *all* syntax schemes contained is // probably much slower than a "bad" hash code here. int hashCode = 0; int count = styles.length; for (int i=0; i * * Consider using the {@link Theme} class for saving and loading RSTA * styles rather than using this API. * * @param baseFont The font to use as the "base" for the syntax scheme. * If this is null, a default monospaced font is used. * @param in The stream to load from. It is up to the caller to close this * stream when they are done. * @return The syntax scheme. * @throws IOException If an IO error occurs. */ public static SyntaxScheme load(Font baseFont, InputStream in) throws IOException { if (baseFont==null) { baseFont = RSyntaxTextArea.getDefaultFont(); } return SyntaxSchemeLoader.load(baseFont, in); } /** * Loads a syntax highlighting color scheme from a string created from * toCommaSeparatedString. This method is useful for saving * and restoring color schemes.

* * Consider using the {@link Theme} class for saving and loading RSTA * styles rather than using this API. * * @param string A string generated from {@link #toCommaSeparatedString()}. * @return A color scheme. * @see #toCommaSeparatedString() */ public static SyntaxScheme loadFromString(String string) { return loadFromString(string, DEFAULT_NUM_TOKEN_TYPES); } /** * Loads a syntax highlighting color scheme from a string created from * toCommaSeparatedString. This method is useful for saving * and restoring color schemes.

* * Consider using the {@link Theme} class for saving and loading RSTA * styles rather than using this API. * * @param string A string generated from {@link #toCommaSeparatedString()}. * @param tokenTypeCount The number of token types saved in this string. * This should be the number of token types saved by your custom * SyntaxScheme subclass, * or {@link TokenTypes#DEFAULT_NUM_TOKEN_TYPES} if you used the * standard implementation (which most people will). * @return A color scheme. * @see #loadFromString(String) * @see #toCommaSeparatedString() */ public static SyntaxScheme loadFromString(String string, int tokenTypeCount) { SyntaxScheme scheme = new SyntaxScheme(true); try { if (string!=null) { String[] tokens = string.split(",", -1); // Check the version string, use defaults if incompatible if (tokens.length==0 || !VERSION.equals(tokens[0])) { return scheme; // Still set to defaults } int tokenCount = tokenTypeCount*7 + 1; // Version string if (tokens.length!=tokenCount) { throw new Exception( "Not enough tokens in packed color scheme: expected " + tokenCount + ", found " + tokens.length); } // Use StyleContext to create fonts to get composite fonts for // Asian glyphs. StyleContext sc = StyleContext.getDefaultStyleContext(); // Loop through each token style. Format: // "index,(fg|-),(bg|-),(t|f),((font,style,size)|(-,,))" for (int i=0; i keep fg as null fg = stringToColor(temp); } Color bg = null; temp = tokens[pos+2]; if (!"-".equals(temp)) { // "-" => keep bg as null bg = stringToColor(temp); } // Check for "true" or "false" since we don't want to // accidentally suck in an int representing the next // packed color, and any string != "true" means false. temp = tokens[pos+3]; if (!"t".equals(temp) && !"f".equals(temp)) throw new Exception("Expected 't' or 'f', found " + temp); boolean underline = "t".equals(temp); Font font = null; String family = tokens[pos+4]; if (!"-".equals(family)) { font = sc.getFont(family, Integer.parseInt(tokens[pos+5]), // style Integer.parseInt(tokens[pos+6])); // size } scheme.styles[i] = new Style(fg, bg, font, underline); } } } catch (Exception e) { e.printStackTrace(); } return scheme; } void refreshFontMetrics(Graphics2D g2d) { // It is assumed that any rendering hints are already applied to g2d. for (int i=0; inull, then a default monospaced font is * used. */ public void restoreDefaults(Font baseFont) { restoreDefaults(baseFont, true); } /** * Restores all colors and fonts to their default values. * * @param baseFont The base font to use when creating this scheme. If * this is null, then a default monospaced font is * used. * @param fontStyles Whether bold and italic should be used in the scheme * (vs. all tokens using a plain font). */ public void restoreDefaults(Font baseFont, boolean fontStyles) { // Colors used by tokens. Color comment = new Color(0,128,0); Color docComment = new Color(164,0,0); Color markupComment = new Color(0, 96, 0); Color keyword = Color.BLUE; Color dataType = new Color(0,128,128); Color function = new Color(173,128,0); Color preprocessor = new Color(128,128,128); Color operator = new Color(128, 64, 64); Color regex = new Color(0,128,164); Color variable = new Color(255,153,0); Color literalNumber = new Color(100,0,200); Color literalString = new Color(220,0,156); Color error = new Color(148,148,0); // (Possible) special font styles for keywords and comments. if (baseFont==null) { baseFont = RSyntaxTextArea.getDefaultFont(); } Font commentFont = baseFont; Font keywordFont = baseFont; if (fontStyles) { // WORKAROUND for Sun JRE bug 6282887 (Asian font bug in 1.4/1.5) // That bug seems to be hidden now, see 6289072 instead. StyleContext sc = StyleContext.getDefaultStyleContext(); Font boldFont = sc.getFont(baseFont.getFamily(), Font.BOLD, baseFont.getSize()); Font italicFont = sc.getFont(baseFont.getFamily(), Font.ITALIC, baseFont.getSize()); commentFont = italicFont;//baseFont.deriveFont(Font.ITALIC); keywordFont = boldFont;//baseFont.deriveFont(Font.BOLD); } styles[COMMENT_EOL] = new Style(comment, null, commentFont); styles[COMMENT_MULTILINE] = new Style(comment, null, commentFont); styles[COMMENT_DOCUMENTATION] = new Style(docComment, null, commentFont); styles[COMMENT_KEYWORD] = new Style(new Color(255,152,0), null, commentFont); styles[COMMENT_MARKUP] = new Style(Color.gray, null, commentFont); styles[RESERVED_WORD] = new Style(keyword, null, keywordFont); styles[RESERVED_WORD_2] = new Style(keyword, null, keywordFont); styles[FUNCTION] = new Style(function); styles[LITERAL_BOOLEAN] = new Style(literalNumber); styles[LITERAL_NUMBER_DECIMAL_INT] = new Style(literalNumber); styles[LITERAL_NUMBER_FLOAT] = new Style(literalNumber); styles[LITERAL_NUMBER_HEXADECIMAL] = new Style(literalNumber); styles[LITERAL_STRING_DOUBLE_QUOTE] = new Style(literalString); styles[LITERAL_CHAR] = new Style(literalString); styles[LITERAL_BACKQUOTE] = new Style(literalString); styles[DATA_TYPE] = new Style(dataType, null, keywordFont); styles[VARIABLE] = new Style(variable); styles[REGEX] = new Style(regex); styles[ANNOTATION] = new Style(Color.gray); styles[IDENTIFIER] = new Style(null); styles[WHITESPACE] = new Style(Color.gray); styles[SEPARATOR] = new Style(Color.RED); styles[OPERATOR] = new Style(operator); styles[PREPROCESSOR] = new Style(preprocessor); styles[MARKUP_TAG_DELIMITER] = new Style(Color.RED); styles[MARKUP_TAG_NAME] = new Style(Color.BLUE); styles[MARKUP_TAG_ATTRIBUTE] = new Style(new Color(63,127,127)); styles[MARKUP_TAG_ATTRIBUTE_VALUE]= new Style(literalString); styles[MARKUP_COMMENT] = new Style(markupComment, null, commentFont); styles[MARKUP_DTD] = new Style(function); styles[MARKUP_PROCESSING_INSTRUCTION] = new Style(preprocessor); styles[MARKUP_CDATA] = new Style(new Color(0xcc6600)); styles[MARKUP_CDATA_DELIMITER] = new Style(new Color(0x008080)); styles[MARKUP_ENTITY_REFERENCE] = new Style(dataType); styles[ERROR_IDENTIFIER] = new Style(error); styles[ERROR_NUMBER_FORMAT] = new Style(error); styles[ERROR_STRING_DOUBLE] = new Style(error); styles[ERROR_CHAR] = new Style(error); // Issue #34: If an application modifies TokenTypes to add new built-in // token types, we'll get NPEs if not all styles are initialized. for (int i=0; i$', it is assumed to be in hex, otherwise it is * assumed to be decimal. So, for example, both of these: *

	 * "$00ff00"
	 * "65280"
	 * 
* will return new Color(0, 255, 0). * * @param s The string to evaluate. * @return The color. */ private static final Color stringToColor(String s) { // Check for decimal as well as hex, for backward // compatibility (fix from GwynEvans on forums) char ch = s.charAt(0); return new Color((ch=='$' || ch=='#') ? Integer.parseInt(s.substring(1),16) : Integer.parseInt(s)); } /** * Returns this syntax highlighting scheme as a comma-separated list of * values as follows: *
    *
  • If a color is non-null, it is added as a 24-bit integer * of the form ((r<*lt;16) | (g<*lt;8) | (b)); if * it is null, it is added as "-,". *
  • The font and style (bold/italic) is added as an integer like so: * "family, style, size". *
  • The entire syntax highlighting scheme is thus one long string of * color schemes of the format "i,[fg],[bg],uline,[style], * where: *
      *
    • i is the index of the syntax scheme. *
    • fg and bg are the foreground and background * colors for the scheme, and may be null (represented by * -). *
    • uline is whether or not the font should be * underlined, and is either t or f. *
    • style is the family,style,size * triplet described above. *
    *
* * @return A string representing the rgb values of the colors. * @see #loadFromString(String) */ public String toCommaSeparatedString() { StringBuilder sb = new StringBuilder(VERSION); sb.append(','); for (int i=0; iSyntaxScheme from an XML file. */ private static class SyntaxSchemeLoader extends DefaultHandler { private Font baseFont; private SyntaxScheme scheme; public SyntaxSchemeLoader(Font baseFont) { scheme = new SyntaxScheme(baseFont); } public static SyntaxScheme load(Font baseFont, InputStream in) throws IOException { SyntaxSchemeLoader parser = null; try { XMLReader reader = XMLReaderFactory.createXMLReader(); parser = new SyntaxSchemeLoader(baseFont); parser.baseFont = baseFont; reader.setContentHandler(parser); InputSource is = new InputSource(in); is.setEncoding("UTF-8"); reader.parse(is); } catch (SAXException se) { throw new IOException(se.toString()); } return parser.scheme; } @Override public void startElement(String uri, String localName, String qName, Attributes attrs) { if ("style".equals(qName)) { String type = attrs.getValue("token"); Field field = null; try { field = Token.class.getField(type); } catch (RuntimeException re) { throw re; // FindBugs } catch (Exception e) { System.err.println("Invalid token type: " + type); return; } if (field.getType()==int.class) { int index = 0; try { index = field.getInt(scheme); } catch (IllegalArgumentException e) { e.printStackTrace(); return; } catch (IllegalAccessException e) { e.printStackTrace(); return; } String fgStr = attrs.getValue("fg"); if (fgStr!=null) { Color fg = stringToColor(fgStr); scheme.styles[index].foreground = fg; } String bgStr = attrs.getValue("bg"); if (bgStr!=null) { Color bg = stringToColor(bgStr); scheme.styles[index].background = bg; } boolean styleSpecified = false; boolean bold = false; boolean italic = false; String boldStr = attrs.getValue("bold"); if (boldStr!=null) { bold = Boolean.valueOf(boldStr).booleanValue(); styleSpecified = true; } String italicStr = attrs.getValue("italic"); if (italicStr!=null) { italic = Boolean.valueOf(italicStr).booleanValue(); styleSpecified = true; } if (styleSpecified) { int style = 0; if (bold) { style |= Font.BOLD; } if (italic) { style |= Font.ITALIC; } scheme.styles[index].font = baseFont.deriveFont(style); } String ulineStr = attrs.getValue("underline"); if (ulineStr!=null) { boolean uline= Boolean.valueOf(ulineStr).booleanValue(); scheme.styles[index].underline = uline; } } } } } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/SyntaxView.java000066400000000000000000001014111257417003700276030ustar00rootroot00000000000000/* * 02/24/2004 * * SyntaxView.java - The View object used by RSyntaxTextArea when word wrap is * disabled. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.awt.*; import javax.swing.event.*; import javax.swing.text.*; import org.fife.ui.rsyntaxtextarea.folding.Fold; import org.fife.ui.rsyntaxtextarea.folding.FoldManager; /** * The javax.swing.text.View object used by {@link RSyntaxTextArea} * when word wrap is disabled. It implements syntax highlighting for * programming languages using the colors and font styles specified by the * RSyntaxTextArea.

* * You don't really have to do anything to use this class, as * {@link RSyntaxTextAreaUI} automatically sets the text area's view to be * an instance of this class if word wrap is disabled.

* * The tokens that specify how to paint the syntax-highlighted text are gleaned * from the text area's {@link RSyntaxDocument}. * * @author Robert Futrell * @version 0.3 */ public class SyntaxView extends View implements TabExpander, TokenOrientedView, RSTAView { /** * The default font used by the text area. If this changes we need to * recalculate the longest line. */ private Font font; /** * Font metrics for the current font. */ private FontMetrics metrics; /** * The current longest line. This is used to calculate the preferred width * of the view. Since the calculation is potentially expensive, we try to * avoid it by stashing which line is currently the longest. */ private Element longLine; private float longLineWidth; private int tabSize; private int tabBase; /** * Cached for each paint() call so each drawLine() call has access to it. */ private RSyntaxTextArea host; /** * Cached values to speed up the painting a tad. */ private int lineHeight = 0; private int ascent; private int clipStart; private int clipEnd; /** * Temporary token used when we need to "modify" tokens for rendering * purposes. Since tokens returned from RSyntaxDocuments are treated as * immutable, we use this temporary token to do that work. */ private TokenImpl tempToken; /** * Constructs a new SyntaxView wrapped around an element. * * @param elem The element representing the text to display. */ public SyntaxView(Element elem) { super(elem); tempToken = new TokenImpl(); } /** * Iterate over the lines represented by the child elements * of the element this view represents, looking for the line * that is the longest. The longLine variable is updated to * represent the longest line contained. The font variable * is updated to indicate the font used to calculate the * longest line. */ void calculateLongestLine() { Component c = getContainer(); font = c.getFont(); metrics = c.getFontMetrics(font); tabSize = getTabSize() * metrics.charWidth(' '); Element lines = getElement(); int n = lines.getElementCount(); for (int i=0; i longLineWidth) { longLineWidth = w; longLine = line; } } } /** * Gives notification from the document that attributes were changed * in a location that this view is responsible for. * * @param changes the change information from the associated document * @param a the current allocation of the view * @param f the factory to use to rebuild if the view has children * @see View#changedUpdate */ @Override public void changedUpdate(DocumentEvent changes, Shape a, ViewFactory f) { updateDamage(changes, a, f); } /** * Repaint the given line range. * * @param line0 The starting line number to repaint. This must * be a valid line number in the model. * @param line1 The ending line number to repaint. This must * be a valid line number in the model. * @param a The region allocated for the view to render into. * @param host The component hosting the view (used to call repaint). */ protected void damageLineRange(int line0, int line1, Shape a, Component host) { if (a != null) { Rectangle area0 = lineToRect(a, line0); Rectangle area1 = lineToRect(a, line1); if ((area0 != null) && (area1 != null)) { Rectangle dmg = area0.union(area1); // damage. host.repaint(dmg.x, dmg.y, dmg.width, dmg.height); } else host.repaint(); } } /** * Draws the passed-in text using syntax highlighting for the current * language. It is assumed that the entire line is either not in a * selected region, or painting with a selection-foreground color is turned * off. * * @param painter The painter to render the tokens. * @param token The list of tokens to draw. * @param g The graphics context in which to draw. * @param x The x-coordinate at which to draw. * @param y The y-coordinate at which to draw. * @return The x-coordinate representing the end of the painted text. */ private float drawLine(TokenPainter painter, Token token, Graphics2D g, float x, float y, int line) { float nextX = x; // The x-value at the end of our text. boolean paintBG = host.getPaintTokenBackgrounds(line, y); while (token!=null && token.isPaintable() && nextXtoken.getOffset()) { tempToken.copyFrom(token); tempToken.textCount = selStart - tempToken.getOffset(); nextX = painter.paint(tempToken,g,nextX,y,host, this, clipStart); tempToken.textCount = token.length(); tempToken.makeStartAt(selStart); // Clone required since token and tempToken must be // different tokens for else statement below token = new TokenImpl(tempToken); } int tokenLen = token.length(); int selCount = Math.min(tokenLen, selEnd-token.getOffset()); if (selCount==tokenLen) { nextX = painter.paintSelected(token, g, nextX,y, host, this, clipStart, useSTC); } else { tempToken.copyFrom(token); tempToken.textCount = selCount; nextX = painter.paintSelected(tempToken, g, nextX,y, host, this, clipStart, useSTC); tempToken.textCount = token.length(); tempToken.makeStartAt(token.getOffset() + selCount); token = tempToken; nextX = painter.paint(token, g, nextX,y, host, this, clipStart); } } // Selection ends in this token else if (token.containsPosition(selEnd)) { tempToken.copyFrom(token); tempToken.textCount = selEnd - tempToken.getOffset(); nextX = painter.paintSelected(tempToken, g, nextX,y, host, this, clipStart, useSTC); tempToken.textCount = token.length(); tempToken.makeStartAt(selEnd); token = tempToken; nextX = painter.paint(token, g, nextX,y, host, this, clipStart); } // This token is entirely selected else if (token.getOffset()>=selStart && token.getEndOffset()<=selEnd) { nextX = painter.paintSelected(token, g, nextX,y, host, this, clipStart, useSTC); } // This token is entirely unselected else { nextX = painter.paint(token, g, nextX,y, host, this, clipStart); } token = token.getNextToken(); } // NOTE: We should re-use code from Token (paintBackground()) here, // but don't because I'm just too lazy. if (host.getEOLMarkersVisible()) { g.setColor(host.getForegroundForTokenType(Token.WHITESPACE)); g.setFont(host.getFontForTokenType(Token.WHITESPACE)); g.drawString("\u00B6", nextX, y); } // Return the x-coordinate at the end of the painted text. return nextX; } /** * Calculates the width of the line represented by the given element. * * @param line The line for which to get the length. * @param lineNumber The line number of the specified line in the document. * @return The width of the line. */ private float getLineWidth(int lineNumber) { Token tokenList = ((RSyntaxDocument)getDocument()). getTokenListForLine(lineNumber); return RSyntaxUtilities.getTokenListWidth(tokenList, (RSyntaxTextArea)getContainer(), this); } /** * Provides a way to determine the next visually represented model * location that one might place a caret. Some views may not be visible, * they might not be in the same order found in the model, or they just * might not allow access to some of the locations in the model. * * @param pos the position to convert >= 0 * @param a the allocated region to render into * @param direction the direction from the current position that can * be thought of as the arrow keys typically found on a keyboard. * This may be SwingConstants.WEST, SwingConstants.EAST, * SwingConstants.NORTH, or SwingConstants.SOUTH. * @return the location within the model that best represents the next * location visual position. * @exception BadLocationException * @exception IllegalArgumentException for an invalid direction */ @Override public int getNextVisualPositionFrom(int pos, Position.Bias b, Shape a, int direction, Position.Bias[] biasRet) throws BadLocationException { return RSyntaxUtilities.getNextVisualPositionFrom(pos, b, a, direction, biasRet, this); } /** * Determines the preferred span for this view along an * axis. * * @param axis may be either View.X_AXIS or View.Y_AXIS * @return the span the view would like to be rendered into >= 0. * Typically the view is told to render into the span * that is returned, although there is no guarantee. * The parent may choose to resize or break the view. * @exception IllegalArgumentException for an invalid axis */ @Override public float getPreferredSpan(int axis) { updateMetrics(); switch (axis) { case View.X_AXIS: float span = longLineWidth + getRhsCorrection(); // fudge factor if (host.getEOLMarkersVisible()) { span += metrics.charWidth('\u00B6'); } return span; case View.Y_AXIS: // We update lineHeight here as when this method is first // called, lineHeight isn't initialized. If we don't do it // here, we get no vertical scrollbar (as lineHeight==0). lineHeight = host!=null ? host.getLineHeight() : lineHeight; // return getElement().getElementCount() * lineHeight; int visibleLineCount = getElement().getElementCount(); if (host.isCodeFoldingEnabled()) { visibleLineCount -= host.getFoldManager().getHiddenLineCount(); } return visibleLineCount * lineHeight; default: throw new IllegalArgumentException("Invalid axis: " + axis); } } /** * Workaround for JTextComponents allowing the caret to be rendered * entirely off-screen if the entire "previous" character fit entirely. * * @return The amount of space to add to the x-axis preferred span. */ private final int getRhsCorrection() { int rhsCorrection = 10; if (host!=null) { rhsCorrection = host.getRightHandSideCorrection(); } return rhsCorrection; } /** * Returns the tab size set for the document, defaulting to 5. * * @return The tab size. */ private int getTabSize() { Integer i = (Integer)getDocument().getProperty( PlainDocument.tabSizeAttribute); int size = (i != null) ? i.intValue() : 5; return size; } /** * Returns a token list for the physical line above the physical * line containing the specified offset into the document. Note that for * this plain (non-wrapped) view, this is simply the token list for the * logical line above the line containing offset, since lines * are not wrapped. * * @param offset The offset in question. * @return A token list for the physical (and in this view, logical) line * before this one. If offset is in the first line in * the document, null is returned. */ public Token getTokenListForPhysicalLineAbove(int offset) { RSyntaxDocument document = (RSyntaxDocument)getDocument(); Element map = document.getDefaultRootElement(); int line = map.getElementIndex(offset); FoldManager fm = host.getFoldManager(); if (fm==null) { line--; if (line>=0) { return document.getTokenListForLine(line); } } else { line = fm.getVisibleLineAbove(line); if (line>=0) { return document.getTokenListForLine(line); } } // int line = map.getElementIndex(offset) - 1; // if (line>=0) // return document.getTokenListForLine(line); return null; } /** * Returns a token list for the physical line below the physical * line containing the specified offset into the document. Note that for * this plain (non-wrapped) view, this is simply the token list for the * logical line below the line containing offset, since lines * are not wrapped. * * @param offset The offset in question. * @return A token list for the physical (and in this view, logical) line * after this one. If offset is in the last physical * line in the document, null is returned. */ public Token getTokenListForPhysicalLineBelow(int offset) { RSyntaxDocument document = (RSyntaxDocument)getDocument(); Element map = document.getDefaultRootElement(); int lineCount = map.getElementCount(); int line = map.getElementIndex(offset); if (!host.isCodeFoldingEnabled()) { if (line=0 && line * * This is implemented to subtract the width of the second character, as * this view's modelToView actually returns the width of the * character instead of "1" or "0" like the View implementations in * javax.swing.text. Thus, if we don't override this method, * the View implementation will return one character's width * too much for its consumers (implementations of * javax.swing.text.Highlighter). * * @param p0 the position of the first character (>=0) * @param b0 The bias of the first character position, toward the previous * character or the next character represented by the offset, in * case the position is a boundary of two views; b0 * will have one of these values: *

    *
  • Position.Bias.Forward *
  • Position.Bias.Backward *
* @param p1 the position of the last character (>=0) * @param b1 the bias for the second character position, defined * one of the legal values shown above * @param a the area of the view, which encompasses the requested region * @return the bounding box which is a union of the region specified * by the first and last character positions * @exception BadLocationException if the given position does * not represent a valid location in the associated document * @exception IllegalArgumentException if b0 or * b1 are not one of the * legal Position.Bias values listed above * @see View#viewToModel */ @Override public Shape modelToView(int p0, Position.Bias b0, int p1, Position.Bias b1, Shape a) throws BadLocationException { Shape s0 = modelToView(p0, a, b0); Shape s1; if (p1 ==getEndOffset()) { try { s1 = modelToView(p1, a, b1); } catch (BadLocationException ble) { s1 = null; } if (s1 == null) { // Assume extends left to right. Rectangle alloc = (a instanceof Rectangle) ? (Rectangle)a : a.getBounds(); s1 = new Rectangle(alloc.x + alloc.width - 1, alloc.y, 1, alloc.height); } } else { s1 = modelToView(p1, a, b1); } Rectangle r0 = s0 instanceof Rectangle ? (Rectangle)s0 : s0.getBounds(); Rectangle r1 = s1 instanceof Rectangle ? (Rectangle)s1 : s1.getBounds(); if (r0.y != r1.y) { // If it spans lines, force it to be the width of the view. Rectangle alloc = (a instanceof Rectangle) ? (Rectangle)a : a.getBounds(); r0.x = alloc.x; r0.width = alloc.width; } r0.add(r1); // The next line is the only difference between this method and // View's implementation. We're subtracting the width of the second // character. This is because this method is used by Highlighter // implementations to get the area to "highlight", and if we don't do // this, one character too many is highlighted thanks to our // modelToView() implementation returning the actual width of the // character requested! if (p1>p0) r0.width -= r1.width; return r0; } /** * Returns the next tab stop position after a given reference position. * This implementation does not support things like centering so it * ignores the tabOffset argument. * * @param x the current position >= 0 * @param tabOffset the position within the text stream * that the tab occurred at >= 0. * @return the tab stop, measured in points >= 0 */ public float nextTabStop(float x, int tabOffset) { if (tabSize == 0) return x; int ntabs = (((int)x) - tabBase) / tabSize; return tabBase + ((ntabs + 1) * tabSize); } /** * Actually paints the text area. Only lines that have been damaged are * repainted. * * @param g The graphics context with which to paint. * @param a The allocated region in which to render. */ @Override public void paint(Graphics g, Shape a) { RSyntaxDocument document = (RSyntaxDocument)getDocument(); Rectangle alloc = a.getBounds(); tabBase = alloc.x; host = (RSyntaxTextArea)getContainer(); Rectangle clip = g.getClipBounds(); // An attempt to speed things up for files with long lines. Note that // this will actually slow things down a bit for the common case of // regular-length lines, but it doesn't make a perceivable difference. clipStart = clip.x; clipEnd = clipStart + clip.width; lineHeight = host.getLineHeight(); ascent = host.getMaxAscent();//metrics.getAscent(); int heightAbove = clip.y - alloc.y; int linesAbove = Math.max(0, heightAbove / lineHeight); FoldManager fm = host.getFoldManager(); linesAbove += fm.getHiddenLineCountAbove(linesAbove, true); Rectangle lineArea = lineToRect(a, linesAbove); int y = lineArea.y + ascent; int x = lineArea.x; Element map = getElement(); int lineCount = map.getElementCount(); // Whether token styles should always be painted, even in selections int selStart = host.getSelectionStart(); int selEnd = host.getSelectionEnd(); RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter)host.getHighlighter(); Graphics2D g2d = (Graphics2D)g; Token token; //System.err.println("Painting lines: " + linesAbove + " to " + (endLine-1)); TokenPainter painter = host.getTokenPainter(); int line = linesAbove; //int count = 0; while (y=selEnd || endOffset alloc.y + alloc.height) { return host.getLastVisibleOffset(); } // They're asking about a position within the coverage of this view // vertically. So, we figure out which line the point corresponds to. // If the line is greater than the number of lines contained, then // simply use the last line as it represents the last possible place // we can position to. else { Element map = doc.getDefaultRootElement(); int lineIndex = Math.abs((y - alloc.y) / lineHeight);//metrics.getHeight() ); FoldManager fm = host.getFoldManager(); //System.out.print("--- " + lineIndex); lineIndex += fm.getHiddenLineCountAbove(lineIndex, true); //System.out.println(" => " + lineIndex); if (lineIndex >= map.getElementCount()) { return host.getLastVisibleOffset(); } Element line = map.getElement(lineIndex); // If the point is to the left of the line... if (x < alloc.x) return line.getStartOffset(); // If the point is to the right of the line... else if (x > alloc.x + alloc.width) return line.getEndOffset() - 1; else { // Determine the offset into the text int p0 = line.getStartOffset(); Token tokenList = doc.getTokenListForLine(lineIndex); tabBase = alloc.x; int offs = tokenList.getListOffset( (RSyntaxTextArea)getContainer(), this, tabBase, x); return offs!=-1 ? offs : p0; } } // End of else. } /** * {@inheritDoc} */ public int yForLine(Rectangle alloc, int line) throws BadLocationException { //Rectangle lineArea = lineToRect(alloc, lineIndex); updateMetrics(); if (metrics != null) { // NOTE: lineHeight is not initially set here, leading to the // current line not being highlighted when a document is first // opened. So, we set it here just in case. lineHeight = host!=null ? host.getLineHeight() : lineHeight; FoldManager fm = host.getFoldManager(); if (!fm.isLineHidden(line)) { line -= fm.getHiddenLineCountAbove(line); return alloc.y + line*lineHeight; } } return -1; } /** * {@inheritDoc} */ public int yForLineContaining(Rectangle alloc, int offs) throws BadLocationException { Element map = getElement(); int line = map.getElementIndex(offs); return yForLine(alloc, line); } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/TextEditorPane.java000066400000000000000000000532721257417003700303740ustar00rootroot00000000000000/* * 11/25/2008 * * TextEditorPane.java - A syntax highlighting text area that has knowledge of * the file it is editing on disk. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.OutputStream; import java.nio.charset.Charset; import java.nio.charset.UnsupportedCharsetException; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.text.Document; import org.fife.io.UnicodeReader; import org.fife.io.UnicodeWriter; import org.fife.ui.rtextarea.RTextAreaEditorKit; /** * An extension of {@link org.fife.ui.rsyntaxtextarea.RSyntaxTextArea} * that adds information about the file being edited, such as: * *
    *
  • Its name and location. *
  • Is it dirty? *
  • Is it read-only? *
  • The last time it was loaded or saved to disk (local files only). *
  • The file's encoding on disk. *
  • Easy access to the line separator. *
* * Loading and saving is also built into the editor.

* * When saving UTF-8 files, whether or not a BOM is written is controlled by * the {@link UnicodeWriter} class. * Use {@link UnicodeWriter#setWriteUtf8BOM(boolean)} to toggle writing BOMs * for UTF-8 files.

* * Both local and remote files (e.g. ftp) are supported. See the * {@link FileLocation} class for more information. * * @author Robert Futrell * @version 1.0 * @see FileLocation */ public class TextEditorPane extends RSyntaxTextArea implements DocumentListener { private static final long serialVersionUID = 1L; public static final String FULL_PATH_PROPERTY = "TextEditorPane.fileFullPath"; public static final String DIRTY_PROPERTY = "TextEditorPane.dirty"; public static final String READ_ONLY_PROPERTY = "TextEditorPane.readOnly"; /** * The location of the file being edited. */ private FileLocation loc; /** * The charset to use when reading or writing this file. */ private String charSet; /** * Whether the file should be treated as read-only. */ private boolean readOnly; /** * Whether the file is dirty. */ private boolean dirty; /** * The last time this file was modified on disk, for local files. * For remote files, this value should always be * {@link #LAST_MODIFIED_UNKNOWN}. */ private long lastSaveOrLoadTime; /** * The value returned by {@link #getLastSaveOrLoadTime()} for remote files. */ public static final long LAST_MODIFIED_UNKNOWN = 0; /** * The default name given to files if none is specified in a constructor. */ private static final String DEFAULT_FILE_NAME = "Untitled.txt"; /** * Constructor. The file will be given a default name. */ public TextEditorPane() { this(INSERT_MODE); } /** * Constructor. The file will be given a default name. * * @param textMode Either INSERT_MODE or * OVERWRITE_MODE. */ public TextEditorPane(int textMode) { this(textMode, false); } /** * Creates a new TextEditorPane. The file will be given * a default name. * * @param textMode Either INSERT_MODE or * OVERWRITE_MODE. * @param wordWrapEnabled Whether or not to use word wrap in this pane. */ public TextEditorPane(int textMode, boolean wordWrapEnabled) { super(textMode); setLineWrap(wordWrapEnabled); try { init(null, null); } catch (IOException ioe) { // Never happens ioe.printStackTrace(); } } /** * Creates a new TextEditorPane. * * @param textMode Either INSERT_MODE or * OVERWRITE_MODE. * @param wordWrapEnabled Whether or not to use word wrap in this pane. * @param loc The location of the text file being edited. If this value * is null, a file named "Untitled.txt" in the current * directory is used. * @throws IOException If an IO error occurs reading the file at * loc. This of course won't happen if * loc is null. */ public TextEditorPane(int textMode, boolean wordWrapEnabled, FileLocation loc) throws IOException { this(textMode, wordWrapEnabled, loc, null); } /** * Creates a new TextEditorPane. * * @param textMode Either INSERT_MODE or * OVERWRITE_MODE. * @param wordWrapEnabled Whether or not to use word wrap in this pane. * @param loc The location of the text file being edited. If this value * is null, a file named "Untitled.txt" in the current * directory is used. This file is displayed as empty even if it * actually exists. * @param defaultEnc The default encoding to use when opening the file, * if the file is not Unicode. If this value is null, * a system default value is used. * @throws IOException If an IO error occurs reading the file at * loc. This of course won't happen if * loc is null. */ public TextEditorPane(int textMode, boolean wordWrapEnabled, FileLocation loc, String defaultEnc) throws IOException { super(textMode); setLineWrap(wordWrapEnabled); init(loc, defaultEnc); } /** * Callback for when styles in the current document change. * This method is never called. * * @param e The document event. */ public void changedUpdate(DocumentEvent e) { } /** * Returns the default encoding for this operating system. * * @return The default encoding. */ private static final String getDefaultEncoding() { // NOTE: The "file.encoding" system property is not guaranteed to be // set by the spec, so we cannot rely on it. String encoding = Charset.defaultCharset().name(); if (encoding==null) { try { File f = File.createTempFile("rsta", null); FileWriter w = new FileWriter(f); encoding = w.getEncoding(); w.close(); f.deleteOnExit();//delete(); Keep FindBugs happy } catch (IOException ioe) { encoding = "US-ASCII"; } } return encoding; } /** * Returns the encoding to use when reading or writing this file. * * @return The encoding. * @see #setEncoding(String) */ public String getEncoding() { return charSet; } /** * Returns the full path to this document. * * @return The full path to the document. */ public String getFileFullPath() { return loc==null ? null : loc.getFileFullPath(); } /** * Returns the file name of this document. * * @return The file name. */ public String getFileName() { return loc==null ? null : loc.getFileName(); } /** * Returns the timestamp for when this file was last loaded or saved * by this editor pane. If the file has been modified on disk by * another process after it was loaded into this editor pane, this method * will not return the actual file's last modified time.

* * For remote files, this method will always return * {@link #LAST_MODIFIED_UNKNOWN}. * * @return The timestamp when this file was last loaded or saved by this * editor pane, if it is a local file, or * {@link #LAST_MODIFIED_UNKNOWN} if it is a remote file. * @see #isModifiedOutsideEditor() */ public long getLastSaveOrLoadTime() { return lastSaveOrLoadTime; } /** * Returns the line separator used when writing this file (e.g. * "\n", "\r\n", or "\r").

* * Note that this value is an Object and not a * String as that is the way the {@link Document} interface * defines its property values. If you always use * {@link #setLineSeparator(String)} to modify this value, then the value * returned from this method will always be a String. * * @return The line separator. If this value is null, then * the system default line separator is used (usually the value * of System.getProperty("line.separator")). * @see #setLineSeparator(String) * @see #setLineSeparator(String, boolean) */ public Object getLineSeparator() { return getDocument().getProperty( RTextAreaEditorKit.EndOfLineStringProperty); } /** * Initializes this editor with the specified file location. * * @param loc The file location. If this is null, a default * location is used and an empty file is displayed. * @param defaultEnc The default encoding to use when opening the file, * if the file is not Unicode. If this value is null, * a system default value is used. * @throws IOException If an IO error occurs reading from loc. * If loc is null, this cannot happen. */ private void init(FileLocation loc, String defaultEnc) throws IOException { if (loc==null) { // Don't call load() just in case Untitled.txt actually exists, // just to ensure there is no chance of an IOException being thrown // in the default case. this.loc = FileLocation.create(DEFAULT_FILE_NAME); charSet = defaultEnc==null ? getDefaultEncoding() : defaultEnc; // Ensure that line separator always has a value, even if the file // does not exist (or is the "default" file). This makes life // easier for host applications that want to display this value. setLineSeparator(System.getProperty("line.separator")); } else { load(loc, defaultEnc); // Sets this.loc } if (this.loc.isLocalAndExists()) { File file = new File(this.loc.getFileFullPath()); lastSaveOrLoadTime = file.lastModified(); setReadOnly(!file.canWrite()); } else { lastSaveOrLoadTime = LAST_MODIFIED_UNKNOWN; setReadOnly(false); } setDirty(false); } /** * Callback for when text is inserted into the document. * * @param e Information on the insertion. */ public void insertUpdate(DocumentEvent e) { if (!dirty) { setDirty(true); } } /** * Returns whether or not the text in this editor has unsaved changes. * * @return Whether or not the text has unsaved changes. * @see #setDirty(boolean) */ public boolean isDirty() { return dirty; } /** * Returns whether this file is a local file. * * @return Whether this is a local file. */ public boolean isLocal() { return loc.isLocal(); } /** * Returns whether this is a local file that already exists. * * @return Whether this is a local file that already exists. */ public boolean isLocalAndExists() { return loc.isLocalAndExists(); } /** * Returns whether the text file has been modified outside of this editor * since the last load or save operation. Note that if this is a remote * file, this method will always return false.

* * This method may be used by applications to implement a reloading * feature, where the user is prompted to reload a file if it has been * modified since their last open or save. * * @return Whether the text file has been modified outside of this * editor. * @see #getLastSaveOrLoadTime() */ public boolean isModifiedOutsideEditor() { return loc.getActualLastModified()>getLastSaveOrLoadTime(); } /** * Returns whether or not the text area should be treated as read-only. * * @return Whether or not the text area should be treated as read-only. * @see #setReadOnly(boolean) */ public boolean isReadOnly() { return readOnly; } /** * Loads the specified file in this editor. This method fires a property * change event of type {@link #FULL_PATH_PROPERTY}. * * @param loc The location of the file to load. This cannot be * null. * @param defaultEnc The encoding to use when loading/saving the file. * This encoding will only be used if the file is not Unicode. * If this value is null, the system default encoding * is used. * @throws IOException If an IO error occurs. * @see #save() * @see #saveAs(FileLocation) */ public void load(FileLocation loc, String defaultEnc) throws IOException { // For new local files, just go with it. if (loc.isLocal() && !loc.isLocalAndExists()) { this.charSet = defaultEnc!=null ? defaultEnc : getDefaultEncoding(); this.loc = loc; setText(null); discardAllEdits(); setDirty(false); return; } // Old local files and remote files, load 'em up. UnicodeReader will // check for BOMs and handle them correctly in all cases, then pass // rest of stream down to InputStreamReader. UnicodeReader ur = new UnicodeReader(loc.getInputStream(), defaultEnc); // Remove listener so dirty flag doesn't get set when loading a file. Document doc = getDocument(); doc.removeDocumentListener(this); BufferedReader r = new BufferedReader(ur); try { read(r, null); } finally { doc.addDocumentListener(this); r.close(); } // No IOException thrown, so we can finally change the location. charSet = ur.getEncoding(); String old = getFileFullPath(); this.loc = loc; setDirty(false); setCaretPosition(0); firePropertyChange(FULL_PATH_PROPERTY, old, getFileFullPath()); } /** * Reloads this file from disk. The file must exist for this operation * to not throw an exception.

* * The file's "dirty" state will be set to false after this * operation. If this is a local file, its "last modified" time is * updated to reflect that of the actual file.

* * Note that if the file has been modified on disk, and is now a Unicode * encoding when before it wasn't (or if it is a different Unicode now), * this will cause this {@link TextEditorPane}'s encoding to change. * Otherwise, the file's encoding will stay the same. * * @throws IOException If the file does not exist, or if an IO error * occurs reading the file. * @see #isLocalAndExists() */ public void reload() throws IOException { String oldEncoding = getEncoding(); UnicodeReader ur = new UnicodeReader(loc.getInputStream(), oldEncoding); String encoding = ur.getEncoding(); BufferedReader r = new BufferedReader(ur); try { read(r, null); // Dumps old contents. } finally { r.close(); } setEncoding(encoding); setDirty(false); syncLastSaveOrLoadTimeToActualFile(); discardAllEdits(); // Prevent user from being able to undo the reload } /** * Called whenever text is removed from this editor. * * @param e The document event. */ public void removeUpdate(DocumentEvent e) { if (!dirty) { setDirty(true); } } /** * Saves the file in its current encoding.

* * The text area's "dirty" state is set to false, and if * this is a local file, its "last modified" time is updated. * * @throws IOException If an IO error occurs. * @see #saveAs(FileLocation) * @see #load(FileLocation, String) */ public void save() throws IOException { saveImpl(loc); setDirty(false); syncLastSaveOrLoadTimeToActualFile(); } /** * Saves this file in a new local location. This method fires a property * change event of type {@link #FULL_PATH_PROPERTY}. * * @param loc The location to save to. * @throws IOException If an IO error occurs. * @see #save() * @see #load(FileLocation, String) */ public void saveAs(FileLocation loc) throws IOException { saveImpl(loc); // No exception thrown - we can "rename" the file. String old = getFileFullPath(); this.loc = loc; setDirty(false); lastSaveOrLoadTime = loc.getActualLastModified(); firePropertyChange(FULL_PATH_PROPERTY, old, getFileFullPath()); } /** * Saves the text in this editor to the specified location. * * @param loc The location to save to. * @throws IOException If an IO error occurs. */ private void saveImpl(FileLocation loc) throws IOException { OutputStream out = loc.getOutputStream(); BufferedWriter w = new BufferedWriter( new UnicodeWriter(out, getEncoding())); try { write(w); } finally { w.close(); } } /** * Sets whether or not this text in this editor has unsaved changes. * This fires a property change event of type {@link #DIRTY_PROPERTY}.

* * Applications will usually have no need to call this method directly; the * only time you might have a need to call this method directly is if you * have to initialize an instance of TextEditorPane with content that does * not come from a file. TextEditorPane automatically sets its * own dirty flag when its content is edited, when its encoding is changed, * or when its line ending property is changed. It is cleared whenever * load(), reload(), save(), or * saveAs() are called. * * @param dirty Whether or not the text has been modified. * @see #isDirty() */ public void setDirty(boolean dirty) { if (this.dirty!=dirty) { this.dirty = dirty; firePropertyChange(DIRTY_PROPERTY, !dirty, dirty); } } /** * Sets the document for this editor. * * @param doc The new document. */ @Override public void setDocument(Document doc) { Document old = getDocument(); if (old!=null) { old.removeDocumentListener(this); } super.setDocument(doc); doc.addDocumentListener(this); } /** * Sets the encoding to use when reading or writing this file. This * method sets the editor's dirty flag when the encoding is changed. * * @param encoding The new encoding. * @throws UnsupportedCharsetException If the encoding is not supported. * @throws NullPointerException If encoding is * null. * @see #getEncoding() */ public void setEncoding(String encoding) { if (encoding==null) { throw new NullPointerException("encoding cannot be null"); } else if (!Charset.isSupported(encoding)) { throw new UnsupportedCharsetException(encoding); } if (charSet==null || !charSet.equals(encoding)) { charSet = encoding; setDirty(true); } } /** * Sets the line separator sequence to use when this file is saved (e.g. * "\n", "\r\n" or "\r"). * * Besides parameter checking, this method is preferred over * getDocument().putProperty() because it sets the editor's * dirty flag when the line separator is changed. * * @param separator The new line separator. * @throws NullPointerException If separator is * null. * @throws IllegalArgumentException If separator is not one * of "\n", "\r\n" or "\r". * @see #getLineSeparator() */ public void setLineSeparator(String separator) { setLineSeparator(separator, true); } /** * Sets the line separator sequence to use when this file is saved (e.g. * "\n", "\r\n" or "\r"). * * Besides parameter checking, this method is preferred over * getDocument().putProperty() because can set the editor's * dirty flag when the line separator is changed. * * @param separator The new line separator. * @param setDirty Whether the dirty flag should be set if the line * separator is changed. * @throws NullPointerException If separator is * null. * @throws IllegalArgumentException If separator is not one * of "\n", "\r\n" or "\r". * @see #getLineSeparator() */ public void setLineSeparator(String separator, boolean setDirty) { if (separator==null) { throw new NullPointerException("terminator cannot be null"); } if (!"\r\n".equals(separator) && !"\n".equals(separator) && !"\r".equals(separator)) { throw new IllegalArgumentException("Invalid line terminator"); } Document doc = getDocument(); Object old = doc.getProperty( RTextAreaEditorKit.EndOfLineStringProperty); if (!separator.equals(old)) { doc.putProperty(RTextAreaEditorKit.EndOfLineStringProperty, separator); if (setDirty) { setDirty(true); } } } /** * Sets whether or not this text area should be treated as read-only. * This fires a property change event of type {@link #READ_ONLY_PROPERTY}. * * @param readOnly Whether or not the document is read-only. * @see #isReadOnly() */ public void setReadOnly(boolean readOnly) { if (this.readOnly!=readOnly) { this.readOnly = readOnly; firePropertyChange(READ_ONLY_PROPERTY, !readOnly, readOnly); } } /** * Syncs this text area's "last saved or loaded" time to that of the file * being edited, if that file is local and exists. If the file is * remote or is local but does not yet exist, nothing happens.

* * You normally do not have to call this method, as the "last saved or * loaded" time for {@link TextEditorPane}s is kept up-to-date internally * during such operations as {@link #save()}, {@link #reload()}, etc. * * @see #getLastSaveOrLoadTime() * @see #isModifiedOutsideEditor() */ public void syncLastSaveOrLoadTimeToActualFile() { if (loc.isLocalAndExists()) { lastSaveOrLoadTime = loc.getActualLastModified(); } } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/Theme.java000066400000000000000000000674511257417003700265430ustar00rootroot00000000000000/* * 10/30/2011 * * Theme.java - A color theme for RSyntaxTextArea. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.awt.Color; import java.awt.Font; import java.awt.SystemColor; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.lang.reflect.Field; import javax.swing.UIManager; import javax.swing.plaf.ColorUIResource; import javax.swing.text.StyleContext; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.DOMImplementation; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; import org.fife.io.UnicodeWriter; import org.fife.ui.rtextarea.Gutter; import org.fife.ui.rtextarea.RTextArea; /** * A theme is a set of fonts and colors to use to style RSyntaxTextArea. * Themes are defined in XML files that are validated against * themes.dtd. This provides applications and other consumers * with an easy way to style RSyntaxTextArea without having to use the API.

* * Sample themes are included in the source tree under the /themes * folder, but are not a part of the built RSyntaxTextArea jar. Hosting * applications are free to ship and use these themes as-is, modify them, or * create their own.

* * Note that to save a Theme via {@link #save(OutputStream)}, * you must currently create a Theme from a text area wrapped in * an RTextScrollPane, so that the color information for the * gutter can be retrieved. * * @author Robert Futrell * @version 1.0 */ public class Theme { private Font baseFont; private Color bgColor; private Color caretColor; private boolean useSelctionFG; private Color selectionFG; private Color selectionBG; private boolean selectionRoundedEdges; private Color currentLineHighlight; private boolean fadeCurrentLineHighlight; private Color marginLineColor; private Color markAllHighlightColor; private Color markOccurrencesColor; private boolean markOccurrencesBorder; private Color matchedBracketFG; private Color matchedBracketBG; private boolean matchedBracketHighlightBoth; private boolean matchedBracketAnimate; private Color hyperlinkFG; private Color[] secondaryLanguages; private SyntaxScheme scheme; private Color gutterBorderColor; private Color activeLineRangeColor; private boolean iconRowHeaderInheritsGutterBG; private Color lineNumberColor; private String lineNumberFont; private int lineNumberFontSize; private Color foldIndicatorFG; private Color foldBG; /** * Private constructor, used when loading from a stream. * * @param baseFont The default font to use for any "base font" properties * not specified in the theme XML. If this is null, * a default monospaced font will be used. */ private Theme(Font baseFont) { // Optional fields that require a default value. this.baseFont = baseFont!=null ? baseFont : RTextArea.getDefaultFont(); secondaryLanguages = new Color[3]; activeLineRangeColor = Gutter.DEFAULT_ACTIVE_LINE_RANGE_COLOR; } /** * Creates a theme from an RSyntaxTextArea. It should be contained in * an RTextScrollPane to get all gutter color information. * * @param textArea The text area. */ public Theme(RSyntaxTextArea textArea) { baseFont = textArea.getFont(); bgColor = textArea.getBackground(); caretColor = textArea.getCaretColor(); useSelctionFG = textArea.getUseSelectedTextColor(); selectionFG = textArea.getSelectedTextColor(); selectionBG = textArea.getSelectionColor(); selectionRoundedEdges = textArea.getRoundedSelectionEdges(); currentLineHighlight = textArea.getCurrentLineHighlightColor(); fadeCurrentLineHighlight = textArea.getFadeCurrentLineHighlight(); marginLineColor = textArea.getMarginLineColor(); markAllHighlightColor = textArea.getMarkAllHighlightColor(); markOccurrencesColor = textArea.getMarkOccurrencesColor(); markOccurrencesBorder = textArea.getPaintMarkOccurrencesBorder(); matchedBracketBG = textArea.getMatchedBracketBGColor(); matchedBracketFG = textArea.getMatchedBracketBorderColor(); matchedBracketHighlightBoth = textArea.getPaintMatchedBracketPair(); matchedBracketAnimate = textArea.getAnimateBracketMatching(); hyperlinkFG = textArea.getHyperlinkForeground(); int count = textArea.getSecondaryLanguageCount(); secondaryLanguages = new Color[count]; for (int i=0; i0 ? lineNumberFontSize : baseFont.getSize(); Font font = getFont(fontName, Font.PLAIN, fontSize); gutter.setLineNumberFont(font); gutter.setFoldIndicatorForeground(foldIndicatorFG); gutter.setFoldBackground(foldBG); } } private static final String colorToString(Color c) { int color = c.getRGB() & 0xffffff; String str = Integer.toHexString(color); while (str.length()<6) { str = "0" + str; } return str; } /** * Returns the default selection background color to use if "default" is * specified in a theme. * * @return The default selection background to use. * @see #getDefaultSelectionFG() */ private static final Color getDefaultBG() { Color c = UIManager.getColor("nimbusLightBackground"); if (c==null) { // Don't search for "text", as Nimbus defines that as the text // component "text" color, but Basic LAFs use it for text // component backgrounds! Nimbus also defines TextArea.background // as too dark, not what it actually uses for text area backgrounds c = UIManager.getColor("TextArea.background"); if (c==null) { c = new ColorUIResource(SystemColor.text); } } return c; } /** * Returns the default selection background color to use if "default" is * specified in a theme. * * @return The default selection background to use. * @see #getDefaultSelectionFG() */ private static final Color getDefaultSelectionBG() { Color c = UIManager.getColor("TextArea.selectionBackground"); if (c==null) { c = UIManager.getColor("textHighlight"); if (c==null) { c = UIManager.getColor("nimbusSelectionBackground"); if (c==null) { c = new ColorUIResource(SystemColor.textHighlight); } } } return c; } /** * Returns the default "selected text" color to use if "default" is * specified in a theme. * * @return The default selection foreground color to use. * @see #getDefaultSelectionBG() */ private static Color getDefaultSelectionFG() { Color c = UIManager.getColor("TextArea.selectionForeground"); if (c==null) { c = UIManager.getColor("textHighlightText"); if (c==null) { c = UIManager.getColor("nimbusSelectedText"); if (c==null) { c = new ColorUIResource(SystemColor.textHighlightText); } } } return c; } /** * Returns the specified font. * * @param family The font family. * @param style The style of font. * @param size The size of the font. * @return The font. */ private static Font getFont(String family, int style, int size) { // Use StyleContext to get a composite font for Asian glyphs. StyleContext sc = StyleContext.getDefaultStyleContext(); return sc.getFont(family, style, size); } /** * Loads a theme. * * @param in The input stream to read from. This will be closed when this * method returns. * @return The theme. * @throws IOException If an IO error occurs. * @see #save(OutputStream) */ public static Theme load(InputStream in) throws IOException { return load(in, null); } /** * Loads a theme. * * @param in The input stream to read from. This will be closed when this * method returns. * @param baseFont The default font to use for any "base font" properties * not specified in the theme XML. If this is null, * a default monospaced font will be used. * @return The theme. * @throws IOException If an IO error occurs. * @see #save(OutputStream) */ public static Theme load(InputStream in, Font baseFont) throws IOException { Theme theme = new Theme(baseFont); BufferedInputStream bin = new BufferedInputStream(in); try { XmlHandler.load(theme, bin); } finally { bin.close(); } return theme; } /** * Saves this theme to an output stream. * * @param out The output stream to write to. * @throws IOException If an IO error occurs. * @see #load(InputStream) */ public void save(OutputStream out) throws IOException { BufferedOutputStream bout = new BufferedOutputStream(out); try { DocumentBuilder db = DocumentBuilderFactory.newInstance(). newDocumentBuilder(); DOMImplementation impl = db.getDOMImplementation(); Document doc = impl.createDocument(null, "RSyntaxTheme", null); Element root = doc.getDocumentElement(); root.setAttribute("version", "1.0"); Element elem = doc.createElement("baseFont"); if (!baseFont.getFamily().equals( RSyntaxTextArea.getDefaultFont().getFamily())) { elem.setAttribute("family", baseFont.getFamily()); } elem.setAttribute("size", Integer.toString(baseFont.getSize())); root.appendChild(elem); elem = doc.createElement("background"); elem.setAttribute("color", colorToString(bgColor)); root.appendChild(elem); elem = doc.createElement("caret"); elem.setAttribute("color", colorToString(caretColor)); root.appendChild(elem); elem = doc.createElement("selection"); elem.setAttribute("useFG", Boolean.toString(useSelctionFG)); elem.setAttribute("fg", colorToString(selectionFG)); elem.setAttribute("bg", colorToString(selectionBG)); elem.setAttribute("roundedEdges", Boolean.toString(selectionRoundedEdges)); root.appendChild(elem); elem = doc.createElement("currentLineHighlight"); elem.setAttribute("color", colorToString(currentLineHighlight)); elem.setAttribute("fade", Boolean.toString(fadeCurrentLineHighlight)); root.appendChild(elem); elem = doc.createElement("marginLine"); elem.setAttribute("fg", colorToString(marginLineColor)); root.appendChild(elem); elem = doc.createElement("markAllHighlight"); elem.setAttribute("color", colorToString(markAllHighlightColor)); root.appendChild(elem); elem = doc.createElement("markOccurrencesHighlight"); elem.setAttribute("color", colorToString(markOccurrencesColor)); elem.setAttribute("border", Boolean.toString(markOccurrencesBorder)); root.appendChild(elem); elem = doc.createElement("matchedBracket"); elem.setAttribute("fg", colorToString(matchedBracketFG)); elem.setAttribute("bg", colorToString(matchedBracketBG)); elem.setAttribute("highlightBoth", Boolean.toString(matchedBracketHighlightBoth)); elem.setAttribute("animate", Boolean.toString(matchedBracketAnimate)); root.appendChild(elem); elem = doc.createElement("hyperlinks"); elem.setAttribute("fg", colorToString(hyperlinkFG)); root.appendChild(elem); elem = doc.createElement("secondaryLanguages"); for (int i=0; i0) { elem.setAttribute("fontSize", Integer.toString(lineNumberFontSize)); } root.appendChild(elem); elem = doc.createElement("foldIndicator"); elem.setAttribute("fg", colorToString(foldIndicatorFG)); elem.setAttribute("iconBg", colorToString(foldBG)); root.appendChild(elem); elem = doc.createElement("iconRowHeader"); elem.setAttribute("activeLineRange", colorToString(activeLineRangeColor)); elem.setAttribute("inheritsGutterBG", Boolean.toString(iconRowHeaderInheritsGutterBG)); root.appendChild(elem); elem = doc.createElement("tokenStyles"); Field[] fields = TokenTypes.class.getFields(); for (int i=0; i * "$00ff00" * "00ff00" * * will return new Color(0, 255, 0). * * @param s The string to evaluate. * @return The color. */ private static final Color stringToColor(String s) { return stringToColor(s, null); } /** * Returns the color represented by a string. The input is expected to * be a 6-digit hex string, optionally prefixed by a '$'. For example, * either of the following: *

	 * "$00ff00"
	 * "00ff00"
	 * 
* will return new Color(0, 255, 0). * * @param s The string to evaluate. * @param defaultVal The color to use if s is * "default". * @return The color. */ private static final Color stringToColor(String s, Color defaultVal) { if (s==null || "default".equalsIgnoreCase(s)) { return defaultVal; } if (s.length()==6 || s.length()==7) { if (s.charAt(0)=='$') { s = s.substring(1); } return new Color(Integer.parseInt(s, 16)); } return null; } /** * Loads a SyntaxScheme from an XML file. */ private static class XmlHandler extends DefaultHandler { private Theme theme; @Override public void error(SAXParseException e) throws SAXException { throw e; } @Override public void fatalError(SAXParseException e) throws SAXException { throw e; } public static void load(Theme theme, InputStream in) throws IOException { SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setValidating(true); try { SAXParser parser = spf.newSAXParser(); XMLReader reader = parser.getXMLReader(); XmlHandler handler = new XmlHandler(); handler.theme = theme; reader.setEntityResolver(handler); reader.setContentHandler(handler); reader.setDTDHandler(handler); reader.setErrorHandler(handler); InputSource is = new InputSource(in); is.setEncoding("UTF-8"); reader.parse(is); } catch (/*SAX|ParserConfiguration*/Exception se) { se.printStackTrace(); throw new IOException(se.toString()); } } private static final int parseInt(Attributes attrs, String attr, int def) { int value = def; String temp = attrs.getValue(attr); if (temp != null) { try { value = Integer.parseInt(temp); } catch (NumberFormatException nfe) { nfe.printStackTrace(); } } return value; } @Override public InputSource resolveEntity(String publicID, String systemID) throws SAXException { return new InputSource(getClass(). getResourceAsStream("themes/theme.dtd")); } @Override public void startElement(String uri, String localName, String qName, Attributes attrs) { if ("background".equals(qName)) { String color = attrs.getValue("color"); if (color!=null) { theme.bgColor = stringToColor(color, getDefaultBG()); } else { String img = attrs.getValue("image"); if (img!=null) { throw new IllegalArgumentException("Not yet implemented"); } } } // The base font to use in the editor. else if ("baseFont".equals(qName)) { int size = theme.baseFont.getSize(); String sizeStr = attrs.getValue("size"); if (sizeStr!=null) { size = Integer.parseInt(sizeStr); } String family = attrs.getValue("family"); if (family!=null) { theme.baseFont = getFont(family, Font.PLAIN, size); } else if (sizeStr!=null) { // No family specified, keep original family theme.baseFont = theme.baseFont.deriveFont(size*1f); } } else if ("caret".equals(qName)) { String color = attrs.getValue("color"); theme.caretColor = stringToColor(color); } else if ("currentLineHighlight".equals(qName)) { String color = attrs.getValue("color"); theme.currentLineHighlight = stringToColor(color); String fadeStr = attrs.getValue("fade"); boolean fade = Boolean.valueOf(fadeStr).booleanValue(); theme.fadeCurrentLineHighlight = fade; } else if ("foldIndicator".equals(qName)) { String color = attrs.getValue("fg"); theme.foldIndicatorFG = stringToColor(color); color = attrs.getValue("iconBg"); theme.foldBG = stringToColor(color); } else if ("gutterBorder".equals(qName)) { String color = attrs.getValue("color"); theme.gutterBorderColor = stringToColor(color); } else if ("iconRowHeader".equals(qName)) { String color = attrs.getValue("activeLineRange"); theme.activeLineRangeColor = stringToColor(color); String inheritBGStr = attrs.getValue("inheritsGutterBG"); theme.iconRowHeaderInheritsGutterBG = inheritBGStr==null ? false : Boolean.valueOf(inheritBGStr); } else if ("lineNumbers".equals(qName)) { String color = attrs.getValue("fg"); theme.lineNumberColor = stringToColor(color); theme.lineNumberFont = attrs.getValue("fontFamily"); theme.lineNumberFontSize = parseInt(attrs, "fontSize", -1); } else if ("marginLine".equals(qName)) { String color = attrs.getValue("fg"); theme.marginLineColor = stringToColor(color); } else if ("markAllHighlight".equals(qName)) { String color = attrs.getValue("color"); theme.markAllHighlightColor = stringToColor(color); } else if ("markOccurrencesHighlight".equals(qName)) { String color = attrs.getValue("color"); theme.markOccurrencesColor = stringToColor(color); String border = attrs.getValue("border"); theme.markOccurrencesBorder = Boolean.valueOf(border).booleanValue(); } else if ("matchedBracket".equals(qName)) { String fg = attrs.getValue("fg"); theme.matchedBracketFG = stringToColor(fg); String bg = attrs.getValue("bg"); theme.matchedBracketBG = stringToColor(bg); String highlightBoth = attrs.getValue("highlightBoth"); theme.matchedBracketHighlightBoth = Boolean.valueOf(highlightBoth).booleanValue(); String animate = attrs.getValue("animate"); theme.matchedBracketAnimate = Boolean.valueOf(animate).booleanValue(); } else if ("hyperlinks".equals(qName)) { String fg = attrs.getValue("fg"); theme.hyperlinkFG = stringToColor(fg); } else if ("language".equals(qName)) { String indexStr = attrs.getValue("index"); int index = Integer.parseInt(indexStr) - 1; if (theme.secondaryLanguages.length>index) { // Sanity Color bg = stringToColor(attrs.getValue("bg")); theme.secondaryLanguages[index] = bg; } } else if ("selection".equals(qName)) { String useStr = attrs.getValue("useFG"); theme.useSelctionFG = Boolean.valueOf(useStr).booleanValue(); String color = attrs.getValue("fg"); theme.selectionFG = stringToColor(color, getDefaultSelectionFG()); //System.out.println(theme.selectionFG); color = attrs.getValue("bg"); theme.selectionBG = stringToColor(color, getDefaultSelectionBG()); String roundedStr = attrs.getValue("roundedEdges"); theme.selectionRoundedEdges = Boolean.valueOf(roundedStr). booleanValue(); } // Start of the syntax scheme definition else if ("tokenStyles".equals(qName)) { theme.scheme = new SyntaxScheme(theme.baseFont, false); } // A style in the syntax scheme else if ("style".equals(qName)) { String type = attrs.getValue("token"); Field field = null; try { field = Token.class.getField(type); } catch (RuntimeException re) { throw re; // FindBugs } catch (Exception e) { System.err.println("Invalid token type: " + type); return; } if (field.getType()==int.class) { int index = 0; try { index = field.getInt(theme.scheme); } catch (IllegalArgumentException e) { e.printStackTrace(); return; } catch (IllegalAccessException e) { e.printStackTrace(); return; } String fgStr = attrs.getValue("fg"); Color fg = stringToColor(fgStr); theme.scheme.getStyle(index).foreground = fg; String bgStr = attrs.getValue("bg"); Color bg = stringToColor(bgStr); theme.scheme.getStyle(index).background = bg; Font font = theme.baseFont; String familyName = attrs.getValue("fontFamily"); if (familyName!=null) { font = getFont(familyName, font.getStyle(), font.getSize()); } String sizeStr = attrs.getValue("fontSize"); if (sizeStr!=null) { try { float size = Float.parseFloat(sizeStr); size = Math.max(size, 1f); font = font.deriveFont(size); } catch (NumberFormatException nfe) { nfe.printStackTrace(); } } theme.scheme.getStyle(index).font = font; boolean styleSpecified = false; boolean bold = false; boolean italic = false; String boldStr = attrs.getValue("bold"); if (boldStr!=null) { bold = Boolean.valueOf(boldStr).booleanValue(); styleSpecified = true; } String italicStr = attrs.getValue("italic"); if (italicStr!=null) { italic = Boolean.valueOf(italicStr).booleanValue(); styleSpecified = true; } if (styleSpecified) { int style = 0; if (bold) { style |= Font.BOLD; } if (italic) { style |= Font.ITALIC; } Font orig = theme.scheme.getStyle(index).font; theme.scheme.getStyle(index).font = orig.deriveFont(style); } String ulineStr = attrs.getValue("underline"); if (ulineStr!=null) { boolean uline= Boolean.valueOf(ulineStr).booleanValue(); theme.scheme.getStyle(index).underline = uline; } } } } @Override public void warning(SAXParseException e) throws SAXException { throw e; } } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/Token.java000066400000000000000000000441151257417003700265510ustar00rootroot00000000000000/* * 02/21/2004 * * Token.java - A token used in syntax highlighting. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.awt.Rectangle; import javax.swing.text.TabExpander; /** * A generic token that functions as a node in a linked list of syntax * highlighted tokens for some language.

* * A Token is a piece of text representing some logical token in * source code for a programming language. For example, the line of C code:

*

 * int i = 0;
 * 
* would be broken into 8 Tokens: the first representing * int, the second whitespace, the third i, the fourth * whitespace, the fifth =, etc.

* * Note: The tokens returned by {@link RSyntaxDocument}s are pooled and * should always be treated as immutable. Modifying tokens you did not create * yourself can and will result in rendering issues and/or runtime exceptions. * You have been warned! * * @author Robert Futrell * @version 0.3 */ public interface Token extends TokenTypes { /** * Appends HTML code for painting this token, using the given text area's * color scheme. * * @param sb The buffer to append to. * @param textArea The text area whose color scheme to use. * @param fontFamily Whether to include the font family in the HTML for * this token. You can pass false for this parameter * if, for example, you are making all your HTML be monospaced, * and don't want any crazy fonts being used in the editor to be * reflected in your HTML. * @return The buffer appended to. * @see #getHTMLRepresentation(RSyntaxTextArea) */ public StringBuilder appendHTMLRepresentation(StringBuilder sb, RSyntaxTextArea textArea, boolean fontFamily); /** * Appends HTML code for painting this token, using the given text area's * color scheme. * * @param sb The buffer to append to. * @param textArea The text area whose color scheme to use. * @param fontFamily Whether to include the font family in the HTML for * this token. You can pass false for this parameter * if, for example, you are making all your HTML be monospaced, * and don't want any crazy fonts being used in the editor to be * reflected in your HTML. * @param tabsToSpaces Whether to convert tabs into spaces. * @return The buffer appended to. * @see #getHTMLRepresentation(RSyntaxTextArea) */ public StringBuilder appendHTMLRepresentation(StringBuilder sb, RSyntaxTextArea textArea, boolean fontFamily, boolean tabsToSpaces); /** * Returns the character at the specified offset in the token. * * @param index The index. This should be in the range * 0-({@link #length()}-1). * @return The character. * @see #length() */ public char charAt(int index); /** * Returns whether the token straddles the specified position in the * document. * * @param pos The position in the document to check. * @return Whether the specified position is straddled by this token. */ public boolean containsPosition(int pos); /** * Returns the position in the token's internal char array corresponding * to the specified document position.

* Note that this method does NOT do any bounds checking; you can pass in * a document position that does not correspond to a position in this * token, and you will not receive an Exception or any other notification; * it is up to the caller to ensure valid input. * * @param pos A position in the document that is represented by this token. * @return The corresponding token position >= textOffset * and < textOffset+textCount. * @see #tokenToDocument */ public int documentToToken(int pos); /** * Returns whether this token's lexeme ends with the specified characters. * * @param ch The characters. * @return Whether this token's lexeme ends with the specified characters. * @see #startsWith(char[]) */ public boolean endsWith(char[] ch); /** * Returns the end offset of this token in the document (exclusive). In * other words, the token ranges from * [getOffset(), getEndOffset()). * * @return The end offset of this token. * @see #getOffset() */ public int getEndOffset(); /** * Returns a String containing HTML code for painting this * token, using the given text area's color scheme. * * @param textArea The text area whose color scheme to use. * @return The HTML representation of the token. * @see #appendHTMLRepresentation(StringBuilder, RSyntaxTextArea, boolean) */ public String getHTMLRepresentation(RSyntaxTextArea textArea); /** * Returns the language index of this token. * * @return The language index. A value of 0 denotes the * "main" language, any positive value denotes a specific secondary * language. * @see #setLanguageIndex(int) */ public int getLanguageIndex(); /** * Returns the last token in this list that is not whitespace or a * comment. * * @return The last non-comment, non-whitespace token, or null * if there isn't one. */ public Token getLastNonCommentNonWhitespaceToken(); /** * Returns the last paintable token in this token list, or null * if there is no paintable token. * * @return The last paintable token in this token list. */ public Token getLastPaintableToken(); /** * Returns the text of this token, as a string.

* * Note that this method isn't used much by the * ryntaxtextarea package internally, as it tries to limit * memory allocation. * * @return The text of this token. */ public String getLexeme(); /** * Determines the offset into this token list (i.e., into the * document) that covers pixel location x if the token list * starts at pixel location x0

. * This method will return the document position "closest" to the * x-coordinate (i.e., if they click on the "right-half" of the * w in awe, the caret will be placed in * between the w and e; similarly, clicking on * the left-half places the caret between the a and * w). This makes it useful for methods such as * viewToModel found in javax.swing.text.View * subclasses. * * @param textArea The text area from which the token list was derived. * @param e How to expand tabs. * @param x0 The pixel x-location that is the beginning of * tokenList. * @param x The pixel-position for which you want to get the corresponding * offset. * @return The position (in the document, NOT into the token list!) that * covers the pixel location. If tokenList is * null or has type Token.NULL, then * -1 is returned; the caller should recognize this and * return the actual end position of the (empty) line. */ public int getListOffset(RSyntaxTextArea textArea, TabExpander e, float x0, float x); /** * Returns the token after this one in the linked list. * * @return The next token. */ public Token getNextToken(); /** * Returns the offset into the document at which this token resides. * * @return The offset into the document. * @see #getEndOffset() */ public int getOffset(); /** * Returns the position in the document that represents the last character * in the token that will fit into endBeforeX-startX pixels. * For example, if you're using a monospaced 8-pixel-per-character font, * have the token "while" and startX is 0 and * endBeforeX is 30, this method will return the * document position of the "i" in "while", because the "i" ends at pixel * 24, while the "l" ends at 32. If not even the * first character fits in endBeforeX-startX, the first * character's position is still returned so calling methods don't go into * infinite loops. * * @param textArea The text area in which this token is being painted. * @param e How to expand tabs. * @param startX The x-coordinate at which the token will be painted. This * is needed because of tabs. * @param endBeforeX The x-coordinate for which you want to find the last * character of t which comes before it. * @return The last document position that will fit in the specified amount * of pixels. */ /* * @see #getTokenListOffsetBeforeX * FIXME: This method does not compute correctly! It needs to be abstract * and implemented by subclasses. */ public int getOffsetBeforeX(RSyntaxTextArea textArea, TabExpander e, float startX, float endBeforeX); /** * Returns the character array backing the lexeme of this token. This * value should be treated as read-only. * * @return A character array containing the lexeme of this token. * @see #getTextOffset() * @see #length() */ public char[] getTextArray(); /** * Returns the offset into the character array of the lexeme in * {@link #getTextArray()}. * * @return The offset of the lexeme in the character array. * @see #getTextArray() */ public int getTextOffset(); /** * Returns the type of this token. * * @return The type of this token. * @see TokenTypes * @see #setType(int) */ public int getType(); /** * Returns the width of this token given the specified parameters. * * @param textArea The text area in which the token is being painted. * @param e Describes how to expand tabs. This parameter cannot be * null. * @param x0 The pixel-location at which the token begins. This is needed * because of tabs. * @return The width of the token, in pixels. * @see #getWidthUpTo */ public float getWidth(RSyntaxTextArea textArea, TabExpander e, float x0); /** * Returns the width of a specified number of characters in this token. * For example, for the token "while", specifying a value of 3 * here returns the width of the "whi" portion of the token. * * @param numChars The number of characters for which to get the width. * @param textArea The text area in which the token is being painted. * @param e How to expand tabs. This value cannot be null. * @param x0 The pixel-location at which this token begins. This is needed * because of tabs. * @return The width of the specified number of characters in this token. * @see #getWidth */ public float getWidthUpTo(int numChars, RSyntaxTextArea textArea, TabExpander e, float x0); /** * Returns whether this token's lexeme matches a specific character array. * * @param lexeme The lexeme to check for. * @return Whether this token has that lexeme. * @see #is(int, char[]) * @see #is(int, String) * @see #isSingleChar(int, char) * @see #startsWith(char[]) */ public boolean is(char[] lexeme); /** * Returns whether this token is of the specified type, with the specified * lexeme.

* This method is preferred over the other overload in performance-critical * code where this operation may be called frequently, since it does not * involve any String allocations. * * @param type The type to check for. * @param lexeme The lexeme to check for. * @return Whether this token has that type and lexeme. * @see #is(int, String) * @see #is(char[]) * @see #isSingleChar(int, char) * @see #startsWith(char[]) */ public boolean is(int type, char[] lexeme); /** * Returns whether this token is of the specified type, with the specified * lexeme.

* The other overload of this method is preferred over this one in * performance-critical code, as this one involves a String allocation * while the other does not. * * @param type The type to check for. * @param lexeme The lexeme to check for. * @return Whether this token has that type and lexeme. * @see #is(int, char[]) * @see #isSingleChar(int, char) * @see #startsWith(char[]) */ public boolean is(int type, String lexeme); /** * Returns whether this token is a comment. * * @return Whether this token is a comment. * @see #isWhitespace() * @see #isCommentOrWhitespace() */ public boolean isComment(); /** * Returns whether this token is a comment or whitespace. * * @return Whether this token is a comment or whitespace. * @see #isComment() * @see #isWhitespace() */ public boolean isCommentOrWhitespace(); /** * Returns whether this token is a hyperlink. * * @return Whether this token is a hyperlink. * @see #setHyperlink(boolean) */ public boolean isHyperlink(); /** * Returns whether this token is an identifier. * * @return Whether this token is an identifier. */ public boolean isIdentifier(); /** * Returns whether this token is a {@link #SEPARATOR} representing a single * left curly brace. * * @return Whether this token is a left curly brace. * @see #isRightCurly() */ public boolean isLeftCurly(); /** * Returns whether this token is a {@link #SEPARATOR} representing a single * right curly brace. * * @return Whether this token is a right curly brace. * @see #isLeftCurly() */ public boolean isRightCurly(); /** * Returns whether or not this token is "paintable;" i.e., whether or not * the type of this token is one such that it has an associated syntax * style. What this boils down to is whether the token type is greater * than Token.NULL. * * @return Whether or not this token is paintable. */ public boolean isPaintable(); /** * Returns whether this token is the specified single character. * * @param ch The character to check for. * @return Whether this token's lexeme is the single character specified. * @see #isSingleChar(int, char) */ public boolean isSingleChar(char ch); /** * Returns whether this token is the specified single character, and of a * specific type. * * @param type The token type. * @param ch The character to check for. * @return Whether this token is of the specified type, and with a lexeme * Equaling the single character specified. * @see #isSingleChar(char) */ public boolean isSingleChar(int type, char ch); /** * Returns whether or not this token is whitespace. * * @return true iff this token is whitespace. * @see #isComment() * @see #isCommentOrWhitespace() */ public boolean isWhitespace(); /** * Returns the length of this token. * * @return The length of this token. * @see #getOffset() */ public int length(); /** * Returns the bounding box for the specified document location. The * location must be in the specified token list; if it isn't, * null is returned. * * @param textArea The text area from which the token list was derived. * @param e How to expand tabs. * @param pos The position in the document for which to get the bounding * box in the view. * @param x0 The pixel x-location that is the beginning of * tokenList. * @param rect The rectangle in which we'll be returning the results. This * object is reused to keep from frequent memory allocations. * @return The bounding box for the specified position in the model. */ public Rectangle listOffsetToView(RSyntaxTextArea textArea, TabExpander e, int pos, int x0, Rectangle rect); /** * Sets whether this token is a hyperlink. * * @param hyperlink Whether this token is a hyperlink. * @see #isHyperlink() */ public void setHyperlink(boolean hyperlink); /** * Sets the language index for this token. If this value is positive, it * denotes a specific "secondary" language this token represents (such as * JavaScript code or CSS embedded in an HTML file). If this value is * 0, this token is in the "main" language being edited. * Negative values are invalid and treated as 0. * * @param languageIndex The new language index. A value of * 0 denotes the "main" language, any positive value * denotes a specific secondary language. Negative values will * be treated as 0. * @see #getLanguageIndex() */ public void setLanguageIndex(int languageIndex); /** * Sets the type of this token. * * @param type The new token type. * @see TokenTypes * @see #getType() */ public void setType(int type); /** * Returns whether this token starts with the specified characters. * * @param chars The characters. * @return Whether this token starts with those characters. * @see #endsWith(char[]) * @see #is(int, char[]) */ public boolean startsWith(char[] chars); /** * Returns the position in the document corresponding to the specified * position in this token's internal char array (textOffset - * textOffset+textCount-1).

* Note that this method does NOT do any bounds checking; you can pass in * an invalid token position, and you will not receive an Exception or any * other indication that the returned document position is invalid. It is * up to the user to ensure valid input. * * @param pos A position in the token's internal char array * (textOffset - textOffset+textCount). * @return The corresponding position in the document. * @see #documentToToken(int) */ public int tokenToDocument(int pos); }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/TokenFactory.java000066400000000000000000000034511257417003700300770ustar00rootroot00000000000000/* * 10/28/2004 * * TokenFactory.java - Interface for a class that generates tokens of some type. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import javax.swing.text.Segment; /** * Interface for a class that generates tokens somehow. * * @author Robert Futrell * @version 0.1 */ interface TokenFactory { /** * Returns a null token. * * @return A null token. */ public TokenImpl createToken(); /** * Returns a token. * * @param line The segment from which to get the token's text. * @param beg The starting offset of the token's text in the segment. * @param end The ending offset of the token's text in the segment. * @param startOffset The offset in the document of the token. * @param type The type of token. * @return The token. */ public TokenImpl createToken(final Segment line, final int beg, final int end, final int startOffset, final int type); /** * Returns a token. * * @param line The char array from which to get the token's text. * @param beg The starting offset of the token's text in the char array. * @param end The ending offset of the token's text in the char array. * @param startOffset The offset in the document of the token. * @param type The type of token. * @return The token. */ public TokenImpl createToken(final char[] line, final int beg, final int end, final int startOffset, final int type); /** * Resets the state of this token maker. This method should be called * by the TokenMaker every time a token list is generated for * a new line so the tokens can be reused. */ public void resetAllTokens(); }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/TokenImpl.java000066400000000000000000000535161257417003700274000ustar00rootroot00000000000000/* * 02/21/2004 * * Token.java - A token used in syntax highlighting. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Rectangle; import javax.swing.text.Segment; import javax.swing.text.TabExpander; import javax.swing.text.Utilities; /** * The default implementation of {@link Token}.

* * Note: The instances of Token returned by * {@link RSyntaxDocument}s are pooled and should always be treated as * immutable. They should not be cast to TokenImpl and modified. * Modifying tokens you did not create yourself can and will result in * rendering issues and/or runtime exceptions. You have been warned! * * @author Robert Futrell * @version 0.3 */ public class TokenImpl implements Token { /** * The text this token represents. This is implemented as a segment so we * can point directly to the text in the document without having to make a * copy of it. */ public char[] text; public int textOffset; public int textCount; /** * The offset into the document at which this token resides. */ private int offset; /** * The type of token this is; for example, {@link #FUNCTION}. */ private int type; /** * Whether this token is a hyperlink. */ private boolean hyperlink; /** * The next token in this linked list. */ private Token nextToken; /** * The language this token is in, >= 0. */ private int languageIndex; /** * Creates a "null token." The token itself is not null; rather, it * signifies that it is the last token in a linked list of tokens and * that it is not part of a "multi-line token." */ public TokenImpl() { this.text = null; this.textOffset = -1; this.textCount = -1; this.setType(NULL); setOffset(-1); hyperlink = false; nextToken = null; } /** * Constructor. * * @param line The segment from which to get the token. * @param beg The first character's position in line. * @param end The last character's position in line. * @param startOffset The offset into the document at which this * token begins. * @param type A token type listed as "generic" above. * @param languageIndex The language index for this token. */ public TokenImpl(Segment line, int beg, int end, int startOffset, int type, int languageIndex) { this(line.array, beg,end, startOffset, type, languageIndex); } /** * Constructor. * * @param line The segment from which to get the token. * @param beg The first character's position in line. * @param end The last character's position in line. * @param startOffset The offset into the document at which this * token begins. * @param type A token type listed as "generic" above. * @param languageIndex The language index for this token. */ public TokenImpl(char[] line, int beg, int end, int startOffset, int type, int languageIndex) { this(); set(line, beg,end, startOffset, type); setLanguageIndex(languageIndex); } /** * Creates this token as a copy of the passed-in token. * * @param t2 The token from which to make a copy. */ public TokenImpl(Token t2) { this(); copyFrom(t2); } public StringBuilder appendHTMLRepresentation(StringBuilder sb, RSyntaxTextArea textArea, boolean fontFamily) { return appendHTMLRepresentation(sb, textArea, fontFamily, false); } public StringBuilder appendHTMLRepresentation(StringBuilder sb, RSyntaxTextArea textArea, boolean fontFamily, boolean tabsToSpaces) { SyntaxScheme colorScheme = textArea.getSyntaxScheme(); Style scheme = colorScheme.getStyle(getType()); Font font = textArea.getFontForTokenType(getType());//scheme.font; if (font.isBold()) sb.append(""); if (font.isItalic()) sb.append(""); if (scheme.underline || isHyperlink()) sb.append(""); if (!isWhitespace()) { sb.append(""); } // NOTE: Don't use getLexeme().trim() because whitespace tokens will // be turned into NOTHING. appendHtmlLexeme(textArea, sb, tabsToSpaces); if (!isWhitespace()) { sb.append(""); } if (scheme.underline || isHyperlink()) sb.append(""); if (font.isItalic()) sb.append(""); if (font.isBold()) sb.append(""); return sb; } /** * Appends an HTML version of the lexeme of this token (i.e. no style * HTML, but replacing chars such as \t, < * and > with their escapes). * * @param textArea The text area. * @param sb The buffer to append to. * @param tabsToSpaces Whether to convert tabs into spaces. * @return The same buffer. */ private final StringBuilder appendHtmlLexeme(RSyntaxTextArea textArea, StringBuilder sb, boolean tabsToSpaces) { boolean lastWasSpace = false; int i = textOffset; int lastI = i; String tabStr = null; while (i': sb.append(text, lastI, i-lastI); lastI = i+1; sb.append(">"); lastWasSpace = false; break; default: lastWasSpace = false; break; } i++; } if (lastI=getOffset() && postextCount) { return false; } final int start = textOffset + textCount - ch.length; for (int i=0; iString of the form "#xxxxxx" good for use * in HTML, representing the given color. * * @param color The color to get a string for. * @return The HTML form of the color. If color is * null, #000000 is returned. */ private static final String getHTMLFormatForColor(Color color) { if (color==null) { return "black"; } String hexRed = Integer.toHexString(color.getRed()); if (hexRed.length()==1) hexRed = "0" + hexRed; String hexGreen = Integer.toHexString(color.getGreen()); if (hexGreen.length()==1) hexGreen = "0" + hexGreen; String hexBlue = Integer.toHexString(color.getBlue()); if (hexBlue.length()==1) hexBlue = "0" + hexBlue; return "#" + hexRed + hexGreen + hexBlue; } public String getHTMLRepresentation(RSyntaxTextArea textArea) { StringBuilder buf = new StringBuilder(); appendHTMLRepresentation(buf, textArea, true); return buf.toString(); } public int getLanguageIndex() { return languageIndex; } public Token getLastNonCommentNonWhitespaceToken() { Token last = null; for (Token t=this; t!=null && t.isPaintable(); t=t.getNextToken()) { switch (t.getType()) { case COMMENT_DOCUMENTATION: case COMMENT_EOL: case COMMENT_MULTILINE: case COMMENT_KEYWORD: case COMMENT_MARKUP: case WHITESPACE: break; default: last = t; break; } } return last; } public Token getLastPaintableToken() { Token t = this; while (t.isPaintable()) { Token next = t.getNextToken(); if (next==null || !next.isPaintable()) { return t; } t = next; } return null; } public String getLexeme() { return text==null ? null : new String(text, textOffset, textCount); } public int getListOffset(RSyntaxTextArea textArea, TabExpander e, float x0, float x) { // If the coordinate in question is before this line's start, quit. if (x0 >= x) return getOffset(); float currX = x0; // x-coordinate of current char. float nextX = x0; // x-coordinate of next char. float stableX = x0; // Cached ending x-coord. of last tab or token. TokenImpl token = this; int last = getOffset(); FontMetrics fm = null; while (token != null && token.isPaintable()) { fm = textArea.getFontMetricsForTokenType(token.getType()); char[] text = token.text; int start = token.textOffset; int end = start + token.textCount; for (int i = start; i < end; i++) { currX = nextX; if (text[i] == '\t') { nextX = e.nextTabStop(nextX, 0); stableX = nextX; // Cache ending x-coord. of tab. start = i + 1; // Do charsWidth() from next char. } else { nextX = stableX + fm.charsWidth(text, start, i - start + 1); } if (x >= currX && x < nextX) { if ((x - currX) < (nextX - x)) { return last + i - token.textOffset; } return last + i + 1 - token.textOffset; } } stableX = nextX; // Cache ending x-coordinate of token. last += token.textCount; token = (TokenImpl)token.getNextToken(); } // If we didn't find anything, return the end position of the text. return last; } public Token getNextToken() { return nextToken; } public int getOffset() { return offset; } public int getOffsetBeforeX(RSyntaxTextArea textArea, TabExpander e, float startX, float endBeforeX) { FontMetrics fm = textArea.getFontMetricsForTokenType(getType()); int i = textOffset; int stop = i + textCount; float x = startX; while (iendBeforeX) { // If not even the first character fits into the space, go // ahead and say the first char does fit so we don't go into // an infinite loop. int intoToken = Math.max(i-textOffset, 1); return getOffset() + intoToken; } i++; } // If we got here, the whole token fit in (endBeforeX-startX) pixels. return getOffset() + textCount - 1; } public char[] getTextArray() { return text; } public int getTextOffset() { return textOffset; } public int getType() { return type; } public float getWidth(RSyntaxTextArea textArea, TabExpander e, float x0) { return getWidthUpTo(textCount, textArea, e, x0); } public float getWidthUpTo(int numChars, RSyntaxTextArea textArea, TabExpander e, float x0) { float width = x0; FontMetrics fm = textArea.getFontMetricsForTokenType(getType()); if (fm != null) { int w; int currentStart = textOffset; int endBefore = textOffset + numChars; for (int i = currentStart; i < endBefore; i++) { if (text[i] == '\t') { // Since TokenMaker implementations usually group all // adjacent whitespace into a single token, there // aren't usually any characters to compute a width // for here, so we check before calling. w = i - currentStart; if (w > 0) width += fm.charsWidth(text, currentStart, w); currentStart = i + 1; width = e.nextTabStop(width, 0); } } // Most (non-whitespace) tokens will have characters at this // point to get the widths for, so we don't check for w>0 (mini- // optimization). w = endBefore - currentStart; width += fm.charsWidth(text, currentStart, w); } return width - x0; } @Override public int hashCode() { return offset + (getLexeme()==null ? 0 : getLexeme().hashCode()); } public boolean is(char[] lexeme) { if (textCount==lexeme.length) { for (int i=0; i=Token.COMMENT_EOL && getType()<=Token.COMMENT_MARKUP; } public boolean isCommentOrWhitespace() { return isComment() || isWhitespace(); } public boolean isHyperlink() { return hyperlink; } public boolean isIdentifier() { return getType()==IDENTIFIER; } public boolean isLeftCurly() { return getType()==SEPARATOR && isSingleChar('{'); } public boolean isRightCurly() { return getType()==SEPARATOR && isSingleChar('}'); } public boolean isPaintable() { return getType()>Token.NULL; } public boolean isSingleChar(char ch) { return textCount==1 && text[textOffset]==ch; } public boolean isSingleChar(int type, char ch) { return this.getType()==type && isSingleChar(ch); } public boolean isWhitespace() { return getType()==WHITESPACE; } public int length() { return textCount; } public Rectangle listOffsetToView(RSyntaxTextArea textArea, TabExpander e, int pos, int x0, Rectangle rect) { int stableX = x0; // Cached ending x-coord. of last tab or token. TokenImpl token = this; FontMetrics fm = null; Segment s = new Segment(); while (token != null && token.isPaintable()) { fm = textArea.getFontMetricsForTokenType(token.getType()); if (fm == null) { return rect; // Don't return null as things'll error. } char[] text = token.text; int start = token.textOffset; int end = start + token.textCount; // If this token contains the position for which to get the // bounding box... if (token.containsPosition(pos)) { s.array = token.text; s.offset = token.textOffset; s.count = pos - token.getOffset(); // Must use this (actually fm.charWidth()), and not // fm.charsWidth() for returned value to match up with where // text is actually painted on OS X! int w = Utilities.getTabbedTextWidth(s, fm, stableX, e, token.getOffset()); rect.x = stableX + w; end = token.documentToToken(pos); if (text[end] == '\t') { rect.width = fm.charWidth(' '); } else { rect.width = fm.charWidth(text[end]); } return rect; } // If this token does not contain the position for which to get // the bounding box... else { s.array = token.text; s.offset = token.textOffset; s.count = token.textCount; stableX += Utilities.getTabbedTextWidth(s, fm, stableX, e, token.getOffset()); } token = (TokenImpl)token.getNextToken(); } // If we didn't find anything, we're at the end of the line. Return // a width of 1 (so selection highlights don't extend way past line's // text). A ConfigurableCaret will know to paint itself with a larger // width. rect.x = stableX; rect.width = 1; return rect; } /** * Makes this token start at the specified offset into the document.

* * Note: You should not modify Token instances you * did not create yourself (e.g., came from an * RSyntaxDocument). If you do, rendering issues and/or * runtime exceptions will likely occur. You have been warned! * * @param pos The offset into the document this token should start at. * Note that this token must already contain this position; if * it doesn't, an exception is thrown. * @throws IllegalArgumentException If pos is not already contained by * this token. * @see #moveOffset(int) */ public void makeStartAt(int pos) { if (pos=(getOffset()+textCount)) { throw new IllegalArgumentException("pos " + pos + " is not in range " + getOffset() + "-" + (getOffset()+textCount-1)); } int shift = pos - getOffset(); setOffset(pos); textOffset += shift; textCount -= shift; } /** * Moves the starting offset of this token.

* * Note: You should not modify Token instances you * did not create yourself (e.g., came from an * RSyntaxDocument). If you do, rendering issues and/or * runtime exceptions will likely occur. You have been warned! * * @param amt The amount to move the starting offset. This should be * between 0 and textCount, inclusive. * @throws IllegalArgumentException If amt is an invalid value. * @see #makeStartAt(int) */ public void moveOffset(int amt) { if (amt<0 || amt>textCount) { throw new IllegalArgumentException("amt " + amt + " is not in range 0-" + textCount); } setOffset(getOffset() + amt); textOffset += amt; textCount -= amt; } /** * Sets the value of this token to a particular segment of a document. * The "next token" value is cleared. * * @param line The segment from which to get the token. * @param beg The first character's position in line. * @param end The last character's position in line. * @param offset The offset into the document at which this token begins. * @param type A token type listed as "generic" above. */ public void set(final char[] line, final int beg, final int end, final int offset, final int type) { this.text = line; this.textOffset = beg; this.textCount = end - beg + 1; this.setType(type); this.setOffset(offset); nextToken = null; } /** * Sets whether this token is a hyperlink. * * @param hyperlink Whether this token is a hyperlink. * @see #isHyperlink() */ public void setHyperlink(boolean hyperlink) { this.hyperlink = hyperlink; } /** * Sets the language index for this token. If this value is positive, it * denotes a specific "secondary" language this token represents (such as * JavaScript code or CSS embedded in an HTML file). If this value is * 0, this token is in the "main" language being edited. * Negative values are invalid and treated as 0. * * @param languageIndex The new language index. A value of * 0 denotes the "main" language, any positive value * denotes a specific secondary language. Negative values will * be treated as 0. * @see #getLanguageIndex() */ public void setLanguageIndex(int languageIndex) { this.languageIndex = languageIndex; } /** * Sets the "next token" pointer of this token to point to the specified * token. * * @param nextToken The new next token. * @see #getNextToken() */ public void setNextToken(Token nextToken) { this.nextToken = nextToken; } /** * Sets the offset into the document at which this token resides. * * @param offset The new offset into the document. * @see #getOffset() */ public void setOffset(int offset) { this.offset = offset; } /** * {@inheritDoc} */ public void setType(int type) { this.type = type; } /** * {@inheritDoc} */ public boolean startsWith(char[] chars) { if (chars.length<=textCount){ for (int i=0; iString, which is useful for * debugging. * * @return A string describing this token. */ @Override public String toString() { return "[Token: " + (getType()==Token.NULL ? "" : "text: '" + (text==null ? "" : getLexeme() + "'; " + "offset: " + getOffset() + "; type: " + getType() + "; " + "isPaintable: " + isPaintable() + "; nextToken==null: " + (nextToken==null))) + "]"; } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/TokenIterator.java000066400000000000000000000054021257417003700302570ustar00rootroot00000000000000/* * 08/28/2013 * * TokenIterator.java - An iterator over the Tokens in an RSyntaxDocument. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.util.Iterator; /** * Allows you to iterate through all paintable tokens in an * RSyntaxDocument. * * @author Robert Futrell * @version 1.0 */ class TokenIterator implements Iterator { private RSyntaxDocument doc; private int curLine; private Token token; /** * Constructor. * * @param doc The document whose tokens we should iterate over. */ public TokenIterator(RSyntaxDocument doc) { this.doc = doc; loadTokenListForCurLine(); int lineCount = getLineCount(); while ((token==null || !token.isPaintable()) && curLineToken removal is not supported. * * @throws UnsupportedOperationException always. */ public void remove() { throw new UnsupportedOperationException(); } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMaker.java000066400000000000000000000151201257417003700275230ustar00rootroot00000000000000/* * 02/24/2004 * * TokenMaker.java - An object that can take a chunk of text and return a * linked list of Tokens representing it. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import javax.swing.Action; import javax.swing.text.Segment; /** * An implementation of TokenMaker is a class that turns text into * a linked list of Tokens for syntax highlighting * in a particular language. * * @see Token * @see AbstractTokenMaker * * @author Robert Futrell * @version 0.2 */ public interface TokenMaker { /** * Adds a null token to the end of the current linked list of tokens. * This should be put at the end of the linked list whenever the last * token on the current line is NOT a multi-line token. */ public void addNullToken(); /** * Adds the token specified to the current linked list of tokens. * * @param array The character array from which to get the text. * @param start Start offset in segment of token. * @param end End offset in segment of token. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ public void addToken(char[] array, int start, int end, int tokenType, int startOffset); /** * Returns the closest {@link TokenTypes "standard" token type} for a given * "internal" token type (e.g. one whose value is < 0). * * @param type The token type. * @return The closest "standard" token type. If a mapping is not defined * for this language, then type is returned. */ public int getClosestStandardTokenTypeForInternalType(int type); /** * Returns whether this programming language uses curly braces * ('{' and '}') to denote code blocks. * * @param languageIndex The language index at the offset in question. * Since some TokenMakers effectively have nested * languages (such as JavaScript in HTML), this parameter tells the * TokenMaker what sub-language to look at. * @return Whether curly braces denote code blocks. */ public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex); /** * Returns the last token on this line's type if the token is "unfinished", * or {@link Token#NULL} if it was finished. For example, if C-style * syntax highlighting is being implemented, and text * contained a line of code that contained the beginning of a comment but * no end-comment marker ("*\/"), then this method would return * {@link Token#COMMENT_MULTILINE} for that line. This is useful * for doing syntax highlighting. * * @param text The line of tokens to examine. * @param initialTokenType The token type to start with (i.e., the value * of getLastTokenTypeOnLine for the line before * text). * @return The last token on this line's type, or {@link Token#NULL} * if the line was completed. */ public int getLastTokenTypeOnLine(Segment text, int initialTokenType); /** * Returns the text to place at the beginning and end of a * line to "comment" it in this programming language. * * @param languageIndex The language index at the offset in question. * Since some TokenMakers effectively have nested * languages (such as JavaScript in HTML), this parameter tells the * TokenMaker what sub-language to look at. * @return The start and end strings to add to a line to "comment" * it out. A null value for either means there * is no string to add for that part. A value of * null for the array means this language * does not support commenting/uncommenting lines. */ public String[] getLineCommentStartAndEnd(int languageIndex); /** * Returns an action to handle "insert break" key presses (i.e. Enter). * * @return The action, or null if the default action should * be used. */ public Action getInsertBreakAction(); /** * Returns whether tokens of the specified type should have "mark * occurrences" enabled for the current programming language. * * @param type The token type. * @return Whether tokens of this type should have "mark occurrences" * enabled. */ public boolean getMarkOccurrencesOfTokenType(int type); /** * Returns the object in charge of marking all occurrences of the token * at the current caret position, if it is a relevant token. If * null is returned, a default OccurrenceMarker * is used. * * @return The occurrence marker for this language, or null * for none. */ public OccurrenceMarker getOccurrenceMarker(); /** * If a line ends in the specified token, this method returns whether * a new line inserted after that line should be indented. * * @param token The token the previous line ends with. * @return Whether the next line should be indented. */ public boolean getShouldIndentNextLineAfter(Token token); /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset); /** * Returns whether a character could be part of an "identifier" token * in a specific language. This is used to identify such things as the * bounds of the "word" to select on double-clicking. * * @param languageIndex The language index the character was found in. * @param ch The character. * @return Whether the character could be part of an "identifier" token. */ public boolean isIdentifierChar(int languageIndex, char ch); /** * Returns whether this language is a markup language. * * @return Whether this language is markup. */ public boolean isMarkupLanguage(); }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMakerBase.java000066400000000000000000000217041257417003700303230ustar00rootroot00000000000000/* * 08/26/2004 * * TokenMakerBase.java - A base class for token makers. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import javax.swing.Action; import javax.swing.text.Segment; /** * Base class for token makers. * * @author Robert Futrell * @version 1.0 */ public abstract class TokenMakerBase implements TokenMaker { /** * The first token in the returned linked list. */ protected TokenImpl firstToken; /** * Used in the creation of the linked list. */ protected TokenImpl currentToken; /** * Used in the creation of the linked list. */ protected TokenImpl previousToken; /** * The factory that gives us our tokens to use. */ private TokenFactory tokenFactory; /** * Highlights occurrences of the current token in the editor, if it is * relevant. */ private OccurrenceMarker occurrenceMarker; /** * "0" implies this is the "main" language being highlighted. Positive * values imply various "secondary" or "embedded" languages, such as CSS * or JavaScript in HTML. While this value is non-zero, tokens will be * generated with this language index so they can (possibly) be painted * differently, so "embedded" languages can be rendered with a special * background. */ private int languageIndex; /** * Constructor. */ public TokenMakerBase() { firstToken = currentToken = previousToken = null; tokenFactory = new DefaultTokenFactory(); } /** * {@inheritDoc} */ public void addNullToken() { if (firstToken==null) { firstToken = tokenFactory.createToken(); currentToken = firstToken; } else { TokenImpl next = tokenFactory.createToken(); currentToken.setNextToken(next); previousToken = currentToken; currentToken = next; } currentToken.setLanguageIndex(languageIndex); } /** * Adds the token specified to the current linked list of tokens. * * @param segment Segment to get text from. * @param start Start offset in segment of token. * @param end End offset in segment of token. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ public void addToken(Segment segment, int start, int end, int tokenType, int startOffset) { addToken(segment.array, start,end, tokenType, startOffset); } /** * {@inheritDoc} */ public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { addToken(array, start, end, tokenType, startOffset, false); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. * @param hyperlink Whether this token is a hyperlink. */ public void addToken(char[] array, int start, int end, int tokenType, int startOffset, boolean hyperlink) { if (firstToken==null) { firstToken = tokenFactory.createToken(array, start, end, startOffset, tokenType); currentToken = firstToken; // previous token is still null. } else { TokenImpl next = tokenFactory.createToken(array, start,end, startOffset, tokenType); currentToken.setNextToken(next); previousToken = currentToken; currentToken = next; } currentToken.setLanguageIndex(languageIndex); currentToken.setHyperlink(hyperlink); } /** * Returns the occurrence marker to use for this token maker. Subclasses * can override to use different implementations. * * @return The occurrence marker to use. */ protected OccurrenceMarker createOccurrenceMarker() { return new DefaultOccurrenceMarker(); } /** * Returns the closest {@link TokenTypes "standard" token type} for a given * "internal" token type (e.g. one whose value is < 0).

* * The default implementation returns type always, which * denotes that a mapping from internal token types to standard token types * is not defined; subclasses can override. * * @param type The token type. * @return The closest "standard" token type. */ public int getClosestStandardTokenTypeForInternalType(int type) { return type; } /** * Returns whether this programming language uses curly braces * ('{' and '}') to denote code blocks. * * The default implementation returns false; subclasses can * override this method if necessary. * * @param languageIndex The language index at the offset in question. * Since some TokenMakers effectively have nested * languages (such as JavaScript in HTML), this parameter tells the * TokenMaker what sub-language to look at. * @return Whether curly braces denote code blocks. */ public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { return false; } /** * Returns an action to handle "insert break" key presses (i.e. Enter). * The default implementation returns null. Subclasses * can override. * * @return The default implementation always returns null. */ public Action getInsertBreakAction() { return null; } /** * Returns the current language index. * * @return The current language index. * @see #setLanguageIndex(int) */ protected int getLanguageIndex() { return languageIndex; } /** * {@inheritDoc} */ public int getLastTokenTypeOnLine(Segment text, int initialTokenType) { // Last parameter doesn't matter if we're not painting. Token t = getTokenList(text, initialTokenType, 0); while (t.getNextToken()!=null) t = t.getNextToken(); return t.getType(); } /** * {@inheritDoc} */ public String[] getLineCommentStartAndEnd(int languageIndex) { return null; } /** * Returns whether tokens of the specified type should have "mark * occurrences" enabled for the current programming language. The default * implementation returns true if type is {@link Token#IDENTIFIER}. * Subclasses can override this method to support other token types, such * as {@link Token#VARIABLE}. * * @param type The token type. * @return Whether tokens of this type should have "mark occurrences" * enabled. */ public boolean getMarkOccurrencesOfTokenType(int type) { return type==Token.IDENTIFIER; } /** * {@inheritDoc} */ public OccurrenceMarker getOccurrenceMarker() { if (occurrenceMarker==null) { occurrenceMarker = createOccurrenceMarker(); } return occurrenceMarker; } /** * The default implementation returns false always. Languages * that wish to better support auto-indentation can override this method. * * @param token The token the previous line ends with. * @return Whether the next line should be indented. */ public boolean getShouldIndentNextLineAfter(Token token) { return false; } /** * Returns whether a character could be part of an "identifier" token * in a specific language. The default implementation returns * true for letters, numbers, and certain symbols. */ public boolean isIdentifierChar(int languageIndex, char ch) { return Character.isLetterOrDigit(ch) || ch=='_' || ch=='$'; } /** * The default implementation returns false always. * Subclasses that are highlighting a markup language should override this * method to return true. * * @return false always. */ public boolean isMarkupLanguage() { return false; } /** * Deletes the linked list of tokens so we can begin anew. This should * never have to be called by the programmer, as it is automatically * called whenever the user calls * {@link #getLastTokenTypeOnLine(Segment, int)} or * {@link #getTokenList(Segment, int, int)}. */ protected void resetTokenList() { firstToken = currentToken = previousToken = null; tokenFactory.resetAllTokens(); } /** * Sets the language index to assign to tokens moving forward. This * property is used to designate tokens as being in "secondary" languages * (such as CSS or JavaScript in HTML). * * @param languageIndex The new language index. A value of * 0 denotes the "main" language, any positive value * denotes a specific secondary language. Negative values will * be treated as 0. * @see #getLanguageIndex() */ protected void setLanguageIndex(int languageIndex) { this.languageIndex = Math.max(0, languageIndex); } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMakerFactory.java000066400000000000000000000066201257417003700310600ustar00rootroot00000000000000/* * 12/12/2008 * * TokenMakerFactory.java - A factory for TokenMakers. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.util.Set; import org.fife.ui.rsyntaxtextarea.modes.PlainTextTokenMaker; /** * A factory that maps syntax styles to {@link TokenMaker}s capable of splitting * text into tokens for those syntax styles. * * @author Robert Futrell * @version 1.0 */ public abstract class TokenMakerFactory { /** * If this system property is set, a custom TokenMakerFactory * of the specified class will be used as the default token maker factory. */ public static final String PROPERTY_DEFAULT_TOKEN_MAKER_FACTORY = "TokenMakerFactory"; /** * The singleton default TokenMakerFactory instance. */ private static TokenMakerFactory DEFAULT_INSTANCE; /** * Returns the default TokenMakerFactory instance. This is * the factory used by all {@link RSyntaxDocument}s by default. * * @return The factory. * @see #setDefaultInstance(TokenMakerFactory) */ public static synchronized TokenMakerFactory getDefaultInstance() { if (DEFAULT_INSTANCE==null) { String clazz = null; try { clazz= System.getProperty(PROPERTY_DEFAULT_TOKEN_MAKER_FACTORY); } catch (java.security.AccessControlException ace) { clazz = null; // We're in an applet; take default. } if (clazz==null) { clazz = "org.fife.ui.rsyntaxtextarea.DefaultTokenMakerFactory"; } try { DEFAULT_INSTANCE = (TokenMakerFactory)Class.forName(clazz). newInstance(); } catch (RuntimeException re) { // FindBugs throw re; } catch (Exception e) { e.printStackTrace(); throw new InternalError("Cannot find TokenMakerFactory: " + clazz); } } return DEFAULT_INSTANCE; } /** * Returns a {@link TokenMaker} for the specified key. * * @param key The key. * @return The corresponding TokenMaker, or * {@link PlainTextTokenMaker} if none matches the specified key. */ public final TokenMaker getTokenMaker(String key) { TokenMaker tm = getTokenMakerImpl(key); if (tm==null) { tm = new PlainTextTokenMaker(); } return tm; } /** * Returns a {@link TokenMaker} for the specified key. * * @param key The key. * @return The corresponding TokenMaker, or null * if none matches the specified key. */ protected abstract TokenMaker getTokenMakerImpl(String key); /** * Returns the set of keys that this factory maps to token makers. * * @return The set of keys. */ public abstract Set keySet(); /** * Sets the default TokenMakerFactory instance. This is * the factory used by all future {@link RSyntaxDocument}s by default. * RSyntaxDocuments that have already been created are not * affected. * * @param tmf The factory. * @throws IllegalArgumentException If tmf is * null. * @see #getDefaultInstance() */ public static synchronized void setDefaultInstance(TokenMakerFactory tmf) { if (tmf==null) { throw new IllegalArgumentException("tmf cannot be null"); } DEFAULT_INSTANCE = tmf; } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMap.java000066400000000000000000000172061257417003700272100ustar00rootroot00000000000000/* * 08/26/2004 * * TokenMap.java - Similar to a Map in Java, only designed specifically for * org.fife.ui.rsyntaxtextarea.Tokens. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import javax.swing.text.Segment; /** * A hash table for reserved words, etc. defined by a {@link TokenMaker}. * This class is designed for the quick lookup of tokens, as it can compare * Segments without the need to allocate a new string.

* * The org.fife.ui.rsyntaxtextarea package uses this class to help * identify reserved words in programming languages. An instance of * {@link TokenMaker} will create and initialize an instance of this class * containing all reserved words, data types, and all other words that need to * be syntax-highlighted for that particular language. When the token maker * parses a line and identifies an individual token, it is looked up in the * TokenMap to see if it should be syntax-highlighted. * * @author Robert Futrell * @version 0.6 */ public class TokenMap { private int size; private TokenMapToken[] tokenMap; private boolean ignoreCase; private static final int DEFAULT_TOKEN_MAP_SIZE = 52; /** * Constructs a new token map that is case-sensitive. */ public TokenMap() { this(DEFAULT_TOKEN_MAP_SIZE); } /** * Constructs a new token map that is case-sensitive. * * @param size The size of the token map. */ public TokenMap(int size) { this(size, false); } /** * Constructs a new token map. * * @param ignoreCase Whether or not this token map should ignore case * when comparing tokens. */ public TokenMap(boolean ignoreCase) { this(DEFAULT_TOKEN_MAP_SIZE, ignoreCase); } /** * Constructs a new token map. * * @param size The size of the token map. * @param ignoreCase Whether or not this token map should ignore case * when comparing tokens. */ public TokenMap(int size, boolean ignoreCase) { this.size = size; tokenMap = new TokenMapToken[size]; this.ignoreCase = ignoreCase; } /** * Adds a token to a specified bucket in the token map. * * @param bucket The bucket in which to add the token. * @param token The token to add. */ private void addTokenToBucket(int bucket, TokenMapToken token) { TokenMapToken old = tokenMap[bucket]; token.nextToken = old; tokenMap[bucket] = token; } /** * Returns the token type associated with the given text, if the given * text is in this token map. If it isn't, -1 is returned. * * @param text The segment from which to get the text to compare. * @param start The starting index in the segment of the text. * @param end The ending index in the segment of the text. * @return The token type associated with the given text, or * -1 if this token was not specified in this map. */ public int get(Segment text, int start, int end) { return get(text.array, start, end); } /** * Returns the token type associated with the given text, if the given * text is in this token map. If it isn't, -1 is returned. * * @param array1 An array of characters containing the text. * @param start The starting index in the array of the text. * @param end The ending index in the array of the text. * @return The token type associated with the given text, or * -1 if this token was not specified in this map. */ public int get(char[] array1, int start, int end) { int length1 = end - start + 1; int hash = getHashCode(array1, start, length1); TokenMapToken token = tokenMap[hash]; char[] array2; int offset2; int offset1; int length; /* We check whether or not to ignore case before doing any looping to * minimize the number of extraneous comparisons we do. This makes * for slightly redundant code, but it'll be a little more efficient. */ // If matches are case-sensitive (C, C++, Java, etc.)... if (ignoreCase==false) { mainLoop: while (token!=null) { if (token.length==length1) { array2 = token.text; offset2 = token.offset; offset1 = start; length = length1; while (length-- > 0) { if (array1[offset1++]!=array2[offset2++]) { token = token.nextToken; continue mainLoop; } } return token.tokenType; } token = token.nextToken; } } // If matches are NOT case-sensitive (HTML)... // Note that all tokens saved in this map were converted to // lower-case already. else { mainLoop2: while (token!=null) { if (token.length==length1) { array2 = token.text; offset2 = token.offset; offset1 = start; length = length1; while (length-- > 0) { if (RSyntaxUtilities.toLowerCase( array1[offset1++]) != array2[offset2++]) { token = token.nextToken; continue mainLoop2; } } return token.tokenType; } token = token.nextToken; } } // Didn't match any of the tokens in the bucket. return -1; } /** * Returns the hash code for a given string. * * @param text The text to hash. * @param offset The offset into the text at which to start hashing. * @param length The last character in the text to hash. * @return The hash code. */ private final int getHashCode(char[] text, int offset, int length) { return (RSyntaxUtilities.toLowerCase(text[offset]) + RSyntaxUtilities.toLowerCase(text[offset+length-1])) % size; } /** * Returns whether this token map ignores case when checking for tokens. * This property is set in the constructor and cannot be changed, as this * is an intrinsic property of a particular programming language. * * @return Whether or not this token maker is ignoring case. */ protected boolean isIgnoringCase() { return ignoreCase; } /** * Adds a string to this token map. * * @param string The string to add. * @param tokenType The type of token the string is. */ public void put(final String string, final int tokenType) { if (isIgnoringCase()) put(string.toLowerCase().toCharArray(), tokenType); else put(string.toCharArray(), tokenType); } /** * Adds a string to this token map. The char array passed-in will be used * as the actual data for the token, so it may well be modified (such as * lower-casing it if ignoreCase is true). This * shouldn't be an issue though as this method is only called from the * public put method, which allocates a new char array. * * @param string The string to add. * @param tokenType The type of token the string is. */ private void put(char[] string, int tokenType) { int hashCode = getHashCode(string, 0, string.length); addTokenToBucket(hashCode, new TokenMapToken(string, tokenType)); } /** * The "token" used by a token map. Note that this isn't the same thing * as the {@link Token} class, but it's basically a 1-1 correspondence * for reserved words, etc. */ private static class TokenMapToken { char[] text; int offset; int length; int tokenType; TokenMapToken nextToken; TokenMapToken(char[] text, int tokenType) { this.text = text; this.offset = 0; this.length = text.length; this.tokenType = tokenType; } @Override public String toString() { return "[TokenMapToken: " + new String(text,offset,length) + "]"; } } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/TokenOrientedView.java000066400000000000000000000045351257417003700311000ustar00rootroot00000000000000/* * 08/06/2004 * * TokenOrientedView.java - An interface for the syntax-highlighting token- * oriented views for token-oriented methods. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; /** * An interface for the syntax-highlighting token oriented views for * token-oriented methods. This way callers won't need to know what specific * class a view is an instance of to access its tokens.

* * Currently, this interface is only useful for obtaining token lists for * "physical lines" (i.e., a word-wrapped view's logical lines may be * represented as several physical lines, thus getting the "physical line" above * a given position may prove complicated). * * @author Robert Futrell * @version 0.1 */ public interface TokenOrientedView { /** * Returns a token list for the physical line above the physical * line containing the specified offset into the document. Note that for * a plain (non-wrapped) view, this is simply the token list for the * logical line above the line containing offset, since lines * are not wrapped. For a wrapped view, this may or may not be tokens from * the same line. * * @param offset The offset in question. * @return A token list for the physical (and in this view, logical) line * before this one. If no physical line is above the one * containing offset, null is returned. */ public Token getTokenListForPhysicalLineAbove(int offset); /** * Returns a token list for the physical line below the physical * line containing the specified offset into the document. Note that for * a plain (non-wrapped) view, this is simply the token list for the * logical line below the line containing offset, since lines * are not wrapped. For a wrapped view, this may or may not be tokens from * the same line. * * @param offset The offset in question. * @return A token list for the physical (and in this view, logical) line * after this one. If no physical line is after the one * containing offset, null is returned. */ public Token getTokenListForPhysicalLineBelow(int offset); }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/TokenPainter.java000066400000000000000000000105321257417003700300700ustar00rootroot00000000000000/* * 03/16/2013 * * TokenPainter - Renders tokens in an instance of RSyntaxTextArea. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.awt.Graphics2D; import javax.swing.text.TabExpander; /** * Renders tokens in an instance of {@link RSyntaxTextArea}. One instance * may render tokens "regularly," another may render visible whitespace, for * example. * * @author Robert Futrell * @version 1.0 */ interface TokenPainter { /** * Paints this token. * * @param token The token to render. * @param g The graphics context in which to paint. * @param x The x-coordinate at which to paint. * @param y The y-coordinate at which to paint. * @param host The text area this token is in. * @param e How to expand tabs. * @return The x-coordinate representing the end of the painted text. */ public float paint(Token token, Graphics2D g, float x, float y, RSyntaxTextArea host, TabExpander e); /** * Paints this token. * * @param token The token to render. * @param g The graphics context in which to paint. * @param x The x-coordinate at which to paint. * @param y The y-coordinate at which to paint. * @param host The text area this token is in. * @param e How to expand tabs. * @param clipStart The left boundary of the clip rectangle in which we're * painting. This optimizes painting by allowing us to not paint * paint when this token is "to the left" of the clip rectangle. * @return The x-coordinate representing the end of the painted text. */ public float paint(Token token, Graphics2D g, float x, float y, RSyntaxTextArea host, TabExpander e, float clipStart); /** * Paints this token. * * @param token The token to render. * @param g The graphics context in which to paint. * @param x The x-coordinate at which to paint. * @param y The y-coordinate at which to paint. * @param host The text area this token is in. * @param e How to expand tabs. * @param clipStart The left boundary of the clip rectangle in which we're * painting. This optimizes painting by allowing us to not paint * paint when this token is "to the left" of the clip rectangle. * @param paintBG Whether to paint the background. * @return The x-coordinate representing the end of the painted text. */ public float paint(Token token, Graphics2D g, float x, float y, RSyntaxTextArea host, TabExpander e, float clipStart, boolean paintBG); /** * Paints this token as it should appear in a selected region of text * (assuming painting with a selection-foreground color is enabled in the * parent RSyntaxTextArea). * * @param token The token to render. * @param g The graphics context in which to paint. * @param x The x-coordinate at which to paint. * @param y The y-coordinate at which to paint. * @param host The text area this token is in. * @param e How to expand tabs. * @param useSTC Whether to use the text area's "selected text color." * @return The x-coordinate representing the end of the painted text. */ public float paintSelected(Token token, Graphics2D g, float x, float y, RSyntaxTextArea host, TabExpander e, boolean useSTC); /** * Paints this token as it should appear in a selected region of text * (assuming painting with a selection-foreground color is enabled in the * parent RSyntaxTextArea). * * @param token The token to render. * @param g The graphics context in which to paint. * @param x The x-coordinate at which to paint. * @param y The y-coordinate at which to paint. * @param host The text area this token is in. * @param e How to expand tabs. * @param clipStart The left boundary of the clip rectangle in which we're * painting. This optimizes painting by allowing us to not paint * paint when this token is "to the left" of the clip rectangle. * @param useSTC Whether to use the text area's "selected text color." * @return The x-coordinate representing the end of the painted text. */ public float paintSelected(Token token, Graphics2D g, float x, float y, RSyntaxTextArea host, TabExpander e, float clipStart, boolean useSTC); }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/TokenTypes.java000066400000000000000000000055151257417003700275770ustar00rootroot00000000000000/* * 12/04/2011 * * TokenTypes.java - All token types supported by RSyntaxTextArea. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; /** * All token types supported by RSyntaxTextArea.

* * Note that all valid token types are >= 0, so extensions of the TokenMaker * class are free to internally use all ints < 0 ONLY for "end-of-line" * style markers; they are ignored by painting implementations. * * @author Robert Futrell * @version 1.0 */ public interface TokenTypes { /** * Tokens of type NULL mark the end of lines with no * multi-line token at the end (such as a block comment in C++). */ public static final int NULL = 0; public static final int COMMENT_EOL = 1; public static final int COMMENT_MULTILINE = 2; public static final int COMMENT_DOCUMENTATION = 3; public static final int COMMENT_KEYWORD = 4; public static final int COMMENT_MARKUP = 5; public static final int RESERVED_WORD = 6; public static final int RESERVED_WORD_2 = 7; public static final int FUNCTION = 8; public static final int LITERAL_BOOLEAN = 9; public static final int LITERAL_NUMBER_DECIMAL_INT = 10; public static final int LITERAL_NUMBER_FLOAT = 11; public static final int LITERAL_NUMBER_HEXADECIMAL = 12; public static final int LITERAL_STRING_DOUBLE_QUOTE = 13; public static final int LITERAL_CHAR = 14; public static final int LITERAL_BACKQUOTE = 15; public static final int DATA_TYPE = 16; public static final int VARIABLE = 17; public static final int REGEX = 18; public static final int ANNOTATION = 19; public static final int IDENTIFIER = 20; public static final int WHITESPACE = 21; public static final int SEPARATOR = 22; public static final int OPERATOR = 23; public static final int PREPROCESSOR = 24; public static final int MARKUP_TAG_DELIMITER = 25; public static final int MARKUP_TAG_NAME = 26; public static final int MARKUP_TAG_ATTRIBUTE = 27; public static final int MARKUP_TAG_ATTRIBUTE_VALUE = 28; public static final int MARKUP_COMMENT = 29; public static final int MARKUP_DTD = 30; public static final int MARKUP_PROCESSING_INSTRUCTION = 31; public static final int MARKUP_CDATA_DELIMITER = 32; public static final int MARKUP_CDATA = 33; public static final int MARKUP_ENTITY_REFERENCE = 34; public static final int ERROR_IDENTIFIER = 35; public static final int ERROR_NUMBER_FORMAT = 36; public static final int ERROR_STRING_DOUBLE = 37; public static final int ERROR_CHAR = 38; public static final int DEFAULT_NUM_TOKEN_TYPES = 39; }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/TokenUtils.java000066400000000000000000000134001257417003700275630ustar00rootroot00000000000000package org.fife.ui.rsyntaxtextarea; import javax.swing.text.TabExpander; /** * Utility methods for dealing with tokens. * * @author Robert Futrell * @version 1.0 */ public class TokenUtils { private TokenUtils() {} /** * Modifies the passed-in token list to start at the specified offset. * For example, if the token list covered positions 20-60 in the document * (inclusive) like so: *

	 *   [token1] -> [token2] -> [token3] -> [token4]
	 *   20     30   31     40   41     50   51     60
	 * 
* and you used this method to make the token list start at position 44, * then the token list would be modified to be the following: *
	 *   [part-of-old-token3] -> [token4]
	 *   44                 50   51     60
	 * 
* Tokens that come before the specified position are forever lost, and * the token containing that position is made to begin at that position if * necessary. All token types remain the same as they were originally.

* * This method can be useful if you are only interested in part of a token * list (i.e., the line it represents), but you don't want to modify the * token list yourself. * * @param tokenList The list to make start at the specified position. * This parameter is modified. * @param pos The position at which the new token list is to start. If * this position is not in the passed-in token list, * returned token list will either be null or the * unpaintable token(s) at the end of the passed-in token list. * @param e How to expand tabs. * @param textArea The text area from which the token list came. * @param x0 The initial x-pixel position of the old token list. * @return Information about the "sub" token list. This will be * null if pos was not a valid offset * into the token list. * @see #getSubTokenList(Token, int, TabExpander, RSyntaxTextArea, float, TokenImpl) */ public static TokenSubList getSubTokenList(Token tokenList, int pos, TabExpander e, final RSyntaxTextArea textArea, float x0) { return getSubTokenList(tokenList, pos, e, textArea, x0, null); } /** * Modifies the passed-in token list to start at the specified offset. * For example, if the token list covered positions 20-60 in the document * (inclusive) like so: *

	 *   [token1] -> [token2] -> [token3] -> [token4]
	 *   20     30   31     40   41     50   51     60
	 * 
* and you used this method to make the token list start at position 44, * then the token list would be modified to be the following: *
	 *   [part-of-old-token3] -> [token4]
	 *   44                 50   51     60
	 * 
* Tokens that come before the specified position are forever lost, and * the token containing that position is made to begin at that position if * necessary. All token types remain the same as they were originally.

* * This method can be useful if you are only interested in part of a token * list (i.e., the line it represents), but you don't want to modify the * token list yourself. * * @param tokenList The list to make start at the specified position. * This parameter is modified. * @param pos The position at which the new token list is to start. If * this position is not in the passed-in token list, * returned token list will either be null or the * unpaintable token(s) at the end of the passed-in token list. * @param e How to expand tabs. * @param textArea The text area from which the token list came. * @param x0 The initial x-pixel position of the old token list. * @param tempToken A temporary token to use when creating the token list * result. This may be null but callers can pass in * a "buffer" token for performance if desired. * @return Information about the "sub" token list. This will be * null if pos was not a valid offset * into the token list. * @see #getSubTokenList(Token, int, TabExpander, RSyntaxTextArea, float) */ public static TokenSubList getSubTokenList(Token tokenList, int pos, TabExpander e, final RSyntaxTextArea textArea, float x0, TokenImpl tempToken) { if (tempToken==null) { tempToken = new TokenImpl(); } Token t = tokenList; // Loop through the token list until you find the one that contains // pos. Remember the cumulative width of all of these tokens. while (t!=null && t.isPaintable() && !t.containsPosition(pos)) { x0 += t.getWidth(textArea, e, x0); t = t.getNextToken(); } // Make the token that contains pos start at pos. if (t!=null && t.isPaintable()) { if (t.getOffset()!=pos) { // Number of chars between p0 and token start. int difference = pos - t.getOffset(); x0 += t.getWidthUpTo(t.length()-difference+1, textArea, e, x0); tempToken.copyFrom(t); tempToken.makeStartAt(pos); return new TokenSubList(tempToken, x0); } else { // t.getOffset()==pos return new TokenSubList(t, x0); } } // This could be a null token, so we need to just return it. return new TokenSubList(tokenList, x0); //return null; } public static class TokenSubList { /** * The "sub" token list. */ public Token tokenList; /** * The width, in pixels, of the part of the token list "removed from * the front." This way, you know the x-offset of the "new" token list. */ public float x; public TokenSubList(Token tokenList, float x) { this.tokenList = tokenList; this.x = x; } } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/URLFileLocation.java000066400000000000000000000064071257417003700304260ustar00rootroot00000000000000/* * 11/13/2008 * * URLFileLocation.java - The location of a file at a (remote) URL. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.io.InputStream; import java.io.IOException; import java.io.OutputStream; import java.net.URL; /** * The location of a file at a (remote) URL. * * @author Robert Futrell * @version 1.0 */ class URLFileLocation extends FileLocation { /** * URL of the remote file. */ private URL url; /** * A prettied-up full path of the URL (password removed, etc.). */ private String fileFullPath; /** * A prettied-up filename (leading slash, and possibly "%2F", * removed). */ private String fileName; /** * Constructor. * * @param url The URL of the file. */ URLFileLocation(URL url) { this.url = url; fileFullPath = createFileFullPath(); fileName = createFileName(); } /** * Creates a "prettied-up" URL to use. This will be stripped of * sensitive information such as passwords. * * @return The full path to use. */ private String createFileFullPath() { String fullPath = url.toString(); fullPath = fullPath.replaceFirst("://([^:]+)(?:.+)@", "://$1@"); return fullPath; } /** * Creates the "prettied-up" filename to use. * * @return The base name of the file of this URL. */ private String createFileName() { String fileName = url.getPath(); if (fileName.startsWith("/%2F/")) { // Absolute path fileName = fileName.substring(4); } else if (fileName.startsWith("/")) { // All others fileName = fileName.substring(1); } return fileName; } /** * Returns the last time this file was modified, or * {@link TextEditorPane#LAST_MODIFIED_UNKNOWN} if this value cannot be * computed (such as for a remote file). * * @return The last time this file was modified. This will always be * {@link TextEditorPane#LAST_MODIFIED_UNKNOWN} for URL's. */ @Override protected long getActualLastModified() { return TextEditorPane.LAST_MODIFIED_UNKNOWN; } /** * {@inheritDoc} */ @Override public String getFileFullPath() { return fileFullPath; } /** * {@inheritDoc} */ @Override public String getFileName() { return fileName; } /** * {@inheritDoc} */ @Override protected InputStream getInputStream() throws IOException { return url.openStream(); } /** * {@inheritDoc} */ @Override protected OutputStream getOutputStream() throws IOException { return url.openConnection().getOutputStream(); } /** * Returns whether this file location is a local file. * * @return Whether this is a local file. * @see #isLocalAndExists() */ @Override public boolean isLocal() { return "file".equalsIgnoreCase(url.getProtocol()); } /** * Returns whether this file location is a local file and already * exists. This method always returns false since we * cannot check this value easily. * * @return false always. * @see #isLocal() */ @Override public boolean isLocalAndExists() { return false; } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/VisibleWhitespaceTokenPainter.java000066400000000000000000000133531257417003700334270ustar00rootroot00000000000000/* * 03/16/2013 * * VisibleWhitespaceTokenPainter - Renders tokens in an instance of * RSyntaxTextArea, with special glyphs to denote spaces and tabs. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.awt.Color; import java.awt.FontMetrics; import java.awt.Graphics2D; import javax.swing.text.TabExpander; /** * A token painter that visibly renders whitespace (spaces and tabs).

* * The current implementation paints as follows: *

    *
  • The first tab or space, if any, is found in the token.
  • *
  • If a tab was found, all characters up to it are painted as a * group.
  • *
  • If a space was found, all characters up to and including it are * painted (it is painted with a special symbol to denote it as * a space).
  • *
  • If neither a tab nor a whitespace was found, all characters in the * token are painted.
  • *
  • Repeat until all characters are painted.
  • *
* This means that rendering hints are applied to all groups of characters * within a token, excluding whitespace and tabs.

* * A problem with this implementation is that FontMetrics.charsWidth() is still * used to calculate the width of a group of chars painted. Thus, the group of * characters will be painted with the rendering hints specified, but the * following tab (or group of characters if the current group was the end of a * token) will not necessarily be painted at the proper x-coordinate (as * FontMetrics.charsWidth() returns an int and not a * float). The way around this would be to calculate the token's * width in such a way that a float is returned (Font.getStringBounds()?). * * @author Robert Futrell * @version 1.0 */ class VisibleWhitespaceTokenPainter extends DefaultTokenPainter { /** * {@inheritDoc} */ @Override protected float paintImpl(Token token, Graphics2D g, float x, float y, RSyntaxTextArea host, TabExpander e, float clipStart, boolean selected, boolean useSTC) { int origX = (int)x; int textOffs = token.getTextOffset(); char[] text = token.getTextArray(); int end = textOffs + token.length(); float nextX = x; int flushLen = 0; int flushIndex = textOffs; Color fg = useSTC ? host.getSelectedTextColor() : host.getForegroundForToken(token); Color bg = selected ? null : host.getBackgroundForToken(token); g.setFont(host.getFontForTokenType(token.getType())); FontMetrics fm = host.getFontMetricsForTokenType(token.getType()); int ascent = fm.getAscent(); int height = fm.getHeight(); for (int i=textOffs; i 0) { g.drawChars(text, flushIndex, flushLen, (int)x,(int)y); flushLen = 0; } flushIndex = i + 1; // Draw an arrow representing the tab. int halfHeight = height / 2; int quarterHeight = halfHeight / 2; int ymid = (int)y - ascent + halfHeight; g.drawLine((int)nextX,ymid, (int)nextNextX,ymid); g.drawLine((int)nextNextX,ymid, (int)nextNextX-4,ymid-quarterHeight); g.drawLine((int)nextNextX,ymid, (int)nextNextX-4,ymid+quarterHeight); x = nextNextX; break; case ' ': // NOTE: There is a little bit of a "fudge factor" // here when "smooth text" is enabled, as "width" // below may well not be the width given to the space // by fm.charsWidth() (it depends on how it places the // space with respect to the preceding character). // But, we assume the approximation is close enough for // our drawing a dot for the space. // "flushLen+1" ensures text is aligned correctly (or, // aligned the same as in getWidth()). nextX = x+fm.charsWidth(text, flushIndex,flushLen+1); int width = fm.charWidth(' '); // Paint background. if (bg!=null) { paintBackground(x,y, nextX-x,height, g, ascent, host, bg); } g.setColor(fg); // Paint chars before space. if (flushLen>0) { g.drawChars(text, flushIndex, flushLen, (int)x,(int)y); flushLen = 0; } // Paint a dot representing the space. int dotX = (int)(nextX - width/2f); // "2.0f" for FindBugs int dotY = (int)(y - ascent + height/2f); // Ditto g.drawLine(dotX, dotY, dotX, dotY); flushIndex = i + 1; x = nextX; break; case '\f': // ??? // fall-through for now. default: flushLen += 1; break; } } nextX = x+fm.charsWidth(text, flushIndex,flushLen); if (flushLen>0 && nextX>=clipStart) { if (bg!=null) { paintBackground(x,y, nextX-x,height, g, ascent, host, bg); } g.setColor(fg); g.drawChars(text, flushIndex, flushLen, (int)x,(int)y); } if (host.getUnderlineForToken(token)) { g.setColor(fg); int y2 = (int)(y+1); g.drawLine(origX,y2, (int)nextX,y2); } // Don't check if it's whitespace - some TokenMakers may return types // other than Token.WHITESPACE for spaces (such as Token.IDENTIFIER). // This also allows us to paint tab lines for MLC's. if (host.getPaintTabLines() && origX==host.getMargin().left) {// && isWhitespace()) { paintTabLines(token, origX, (int)y, (int)nextX, g, e, host); } return nextX; } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/WrappedSyntaxView.java000066400000000000000000001331611257417003700311350ustar00rootroot00000000000000/* * 08/06/2004 * * WrappedSyntaxView.java - Test implementation of WrappedSyntaxView that * is also aware of RSyntaxTextArea's different fonts per token type. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.awt.*; import javax.swing.text.*; import javax.swing.text.Position.Bias; import javax.swing.event.*; import org.fife.ui.rsyntaxtextarea.TokenUtils.TokenSubList; import org.fife.ui.rsyntaxtextarea.folding.Fold; import org.fife.ui.rsyntaxtextarea.folding.FoldManager; import org.fife.ui.rtextarea.Gutter; /** * The view used by {@link RSyntaxTextArea} when word wrap is enabled. * * @author Robert Futrell * @version 0.2 */ public class WrappedSyntaxView extends BoxView implements TabExpander, RSTAView { boolean widthChanging; int tabBase; int tabSize; /** * This is reused to keep from allocating/deallocating. */ private Segment s, drawSeg; /** * Another variable initialized once to keep from allocating/deallocating. */ private Rectangle tempRect; /** * Cached for each paint() call so each drawView() call has access to it. */ private RSyntaxTextArea host; private FontMetrics metrics; private TokenImpl tempToken; private TokenImpl lineCountTempToken; // /** // * The end-of-line marker. // */ // private static final char[] eolMarker = { '.' }; /** * The width of this view cannot be below this amount, as if the width * is ever 0 (really a bug), we'll go into an infinite loop. */ private static final int MIN_WIDTH = 20; /** * Creates a new WrappedSyntaxView. Lines will be wrapped * on character boundaries. * * @param elem the element underlying the view */ public WrappedSyntaxView(Element elem) { super(elem, Y_AXIS); tempToken = new TokenImpl(); s = new Segment(); drawSeg = new Segment(); tempRect = new Rectangle(); lineCountTempToken = new TokenImpl(); } /** * This is called by the nested wrapped line * views to determine the break location. This can * be reimplemented to alter the breaking behavior. * It will either break at word or character boundaries * depending upon the break argument given at * construction. */ protected int calculateBreakPosition(int p0, Token tokenList, float x0) { //System.err.println("------ beginning calculateBreakPosition() --------"); int p = p0; RSyntaxTextArea textArea = (RSyntaxTextArea)getContainer(); float currentWidth = getWidth(); if (currentWidth==Integer.MAX_VALUE) currentWidth = getPreferredSpan(X_AXIS); // Make sure width>0; this is a huge hack to fix a bug where // loading text into an RTextArea before it is visible if word wrap // is enabled causes an infinite loop in calculateBreakPosition() // because of the 0-width! We cannot simply check in setSize() // because the width is set to 0 somewhere else too somehow... currentWidth = Math.max(currentWidth, MIN_WIDTH); Token t = tokenList; while (t!=null && t.isPaintable()) { // FIXME: Replace the code below with the commented-out line below. This will // allow long tokens to be broken at embedded spaces (such as MLC's). But it // currently throws BadLocationExceptions sometimes... float tokenWidth = t.getWidth(textArea, this, x0); if (tokenWidth>currentWidth) { // If the current token alone is too long for this line, // break at a character boundary. if (p==p0) { return t.getOffsetBeforeX(textArea, this, 0, currentWidth); } // Return the first non-whitespace char (i.e., don't start // off the continuation of a wrapped line with whitespace). return t.isWhitespace() ? p+t.length() : p; //return getBreakLocation(t, fm, x0, currentWidth, this); } currentWidth -= tokenWidth; x0 += tokenWidth; p += t.length(); //System.err.println("*** *** *** token fit entirely (width==" + tokenWidth + "), adding " + t.textCount + " to p, now p==" + p); t = t.getNextToken(); } //System.err.println("... ... whole line fits; returning p==" + p); //System.err.println("------ ending calculateBreakPosition() --------"); // return p; return p + 1; } //private int getBreakLocation(Token t, FontMetrics fm, int x0, int x, // TabExpander e) { // Segment s = new Segment(); // s.array = t.text; // s.offset = t.getTextOffset(); // s.count = t.textCount; // return t.offset + Utilities.getBreakLocation(s, fm, x0, x, e, t.offset); //} /** * Gives notification from the document that attributes were changed * in a location that this view is responsible for. * * @param e the change information from the associated document * @param a the current allocation of the view * @param f the factory to use to rebuild if the view has children * @see View#changedUpdate */ @Override public void changedUpdate(DocumentEvent e, Shape a, ViewFactory f) { updateChildren(e, a); } /** * Sets the allocation rectangle for a given line's view, but sets the * y value to the passed-in value. This should be used instead of * {@link #childAllocation(int, Rectangle)} since it allows you to account * for hidden lines in collapsed fold regions. * * @param line * @param y * @param alloc */ private void childAllocation2(int line, int y, Rectangle alloc) { alloc.x += getOffset(X_AXIS, line); alloc.y += y; alloc.width = getSpan(X_AXIS, line); alloc.height = getSpan(Y_AXIS, line); // FIXME: This is required due to a bug that I can't track down. The // top margin is being added twice somewhere in wrapped views, so we // have to adjust for it here. Insets margin = host.getMargin(); if (margin!=null) { alloc.y -= margin.top; } } /** * Draws a single view (i.e., a line of text for a wrapped view), * wrapping the text onto multiple lines if necessary. * * @param painter The painter to use to render tokens. * @param g The graphics context in which to paint. * @param r The rectangle in which to paint. * @param view The View to paint. * @param fontHeight The height of the font being used. * @param y The y-coordinate at which to begin painting. */ protected void drawView(TokenPainter painter, Graphics2D g, Rectangle r, View view, int fontHeight, int y, int line) { float x = r.x; LayeredHighlighter h = (LayeredHighlighter)host.getHighlighter(); RSyntaxDocument document = (RSyntaxDocument)getDocument(); Element map = getElement(); int p0 = view.getStartOffset(); int lineNumber = map.getElementIndex(p0); int p1 = view.getEndOffset();// - 1; setSegment(p0,p1-1, document, drawSeg); //System.err.println("drawSeg=='" + drawSeg + "' (p0/p1==" + p0 + "/" + p1 + ")"); int start = p0 - drawSeg.offset; Token token = document.getTokenListForLine(lineNumber); // If this line is an empty line, then the token list is simply a // null token. In this case, the line highlight will be skipped in // the loop below, so unfortunately we must manually do it here. if (token!=null && token.getType()==Token.NULL) { h.paintLayeredHighlights(g, p0,p1, r, host, this); return; } // Loop through all tokens in this view and paint them! while (token!=null && token.isPaintable()) { int p = calculateBreakPosition(p0, token, x); x = r.x; h.paintLayeredHighlights(g, p0,p, r, host, this); while (token!=null && token.isPaintable() && token.getEndOffset()-1View to paint. * @param fontHeight The height of the font being used. * @param y The y-coordinate at which to begin painting. * @param selStart The start of the selection. * @param selEnd The end of the selection. */ protected void drawViewWithSelection(TokenPainter painter, Graphics2D g, Rectangle r, View view, int fontHeight, int y, int selStart, int selEnd) { float x = r.x; boolean useSTC = host.getUseSelectedTextColor(); LayeredHighlighter h = (LayeredHighlighter)host.getHighlighter(); RSyntaxDocument document = (RSyntaxDocument)getDocument(); Element map = getElement(); int p0 = view.getStartOffset(); int lineNumber = map.getElementIndex(p0); int p1 = view.getEndOffset();// - 1; setSegment(p0,p1-1, document, drawSeg); //System.err.println("drawSeg=='" + drawSeg + "' (p0/p1==" + p0 + "/" + p1 + ")"); int start = p0 - drawSeg.offset; Token token = document.getTokenListForLine(lineNumber); // If this line is an empty line, then the token list is simply a // null token. In this case, the line highlight will be skipped in // the loop below, so unfortunately we must manually do it here. if (token!=null && token.getType()==Token.NULL) { h.paintLayeredHighlights(g, p0,p1, r, host, this); return; } // Loop through all tokens in this view and paint them! while (token!=null && token.isPaintable()) { int p = calculateBreakPosition(p0, token, x); x = r.x; h.paintLayeredHighlights(g, p0,p, r, host, this); while (token!=null && token.isPaintable() && token.getEndOffset()-1token.getOffset()) { tempToken.copyFrom(token); tempToken.textCount = selStart - tempToken.getOffset(); x = painter.paint(tempToken,g,x,y,host, this); tempToken.textCount = token.length(); tempToken.makeStartAt(selStart); // Clone required since token and tempToken must be // different tokens for else statement below token = new TokenImpl(tempToken); } int selCount = Math.min(token.length(), selEnd-token.getOffset()); if (selCount==token.length()) { x = painter.paintSelected(token, g, x,y, host, this, useSTC); } else { tempToken.copyFrom(token); tempToken.textCount = selCount; x = painter.paintSelected(tempToken, g, x,y, host, this, useSTC); tempToken.textCount = token.length(); tempToken.makeStartAt(token.getOffset() + selCount); token = tempToken; x = painter.paint(token, g, x,y, host, this); } } // Selection ends in this token else if (token.containsPosition(selEnd)) { tempToken.copyFrom(token); tempToken.textCount = selEnd - tempToken.getOffset(); x = painter.paintSelected(tempToken, g, x,y, host, this, useSTC); tempToken.textCount = token.length(); tempToken.makeStartAt(selEnd); token = tempToken; x = painter.paint(token, g, x,y, host, this); } // This token is entirely selected else if (token.getOffset()>=selStart && token.getEndOffset()<=selEnd) { x = painter.paintSelected(token, g, x,y, host, this,useSTC); } // This token is entirely unselected else { x = painter.paint(token, g, x,y, host, this); } token = token.getNextToken(); } // If there's a token that's going to be split onto the next line if (token!=null && token.isPaintable() && token.getOffset()token.getOffset()) { tempToken.copyFrom(token); tempToken.textCount = selStart - tempToken.getOffset(); x = painter.paint(tempToken,g,x,y,host, this); tempToken.textCount = token.length(); tempToken.makeStartAt(selStart); // Clone required since token and tempToken must be // different tokens for else statement below token = new TokenImpl(tempToken); } int selCount = Math.min(token.length(), selEnd-token.getOffset()); if (selCount==token.length()) { x = painter.paintSelected(token, g, x,y, host, this, useSTC); } else { tempToken.copyFrom(token); tempToken.textCount = selCount; x = painter.paintSelected(tempToken, g, x,y, host, this, useSTC); tempToken.textCount = token.length(); tempToken.makeStartAt(token.getOffset() + selCount); token = tempToken; x = painter.paint(token, g, x,y, host, this); } } // Selection ends in this token else if (token.containsPosition(selEnd)) { tempToken.copyFrom(token); tempToken.textCount = selEnd - tempToken.getOffset(); x = painter.paintSelected(tempToken, g, x,y, host, this, useSTC); tempToken.textCount = token.length(); tempToken.makeStartAt(selEnd); token = tempToken; x = painter.paint(token, g, x,y, host, this); } // This token is entirely selected else if (token.getOffset()>=selStart && token.getEndOffset()<=selEnd) { x = painter.paintSelected(token, g, x,y, host, this,useSTC); } // This token is entirely unselected else { x = painter.paint(token, g, x,y, host, this); } token = new TokenImpl(orig); ((TokenImpl)token).makeStartAt(p); } p0 = (p==p0) ? p1 : p; y += fontHeight; } // End of while (token!=null && token.isPaintable()). // NOTE: We should re-use code from Token (paintBackground()) here, // but don't because I'm just too lazy. if (host.getEOLMarkersVisible()) { g.setColor(host.getForegroundForTokenType(Token.WHITESPACE)); g.setFont(host.getFontForTokenType(Token.WHITESPACE)); g.drawString("\u00B6", x, y-fontHeight); } } /** * Fetches the allocation for the given child view.

* Overridden to account for code folding. * * @param index The index of the child, >= 0 &&< getViewCount(). * @param a The allocation to this view * @return The allocation to the child; or null if * a is null; or null if the * layout is invalid */ @Override public Shape getChildAllocation(int index, Shape a) { if (a != null) { Shape ca = getChildAllocationImpl(index, a); if ((ca != null) && (!isAllocationValid())) { // The child allocation may not have been set yet. Rectangle r = (ca instanceof Rectangle) ? (Rectangle) ca : ca .getBounds(); if ((r.width == 0) && (r.height == 0)) { return null; } } return ca; } return null; } /** * Fetches the allocation for the given child view to render into.

* Overridden to account for lines hidden by collapsed folded regions. * * @param line The index of the child, >= 0 &&< getViewCount() * @param a The allocation to this view * @return The allocation to the child */ public Shape getChildAllocationImpl(int line, Shape a) { Rectangle alloc = getInsideAllocation(a); host = (RSyntaxTextArea)getContainer(); FoldManager fm = host.getFoldManager(); int y = alloc.y; // TODO: Make cached getOffset() calls for Y_AXIS valid even for // folding, to speed this up! for (int i=0; isetParent method. * Subclasses can re-implement this to initialize their * child views in a different manner. The default * implementation creates a child view for each * child element. * * @param f the view factory */ @Override protected void loadChildren(ViewFactory f) { Element e = getElement(); int n = e.getElementCount(); if (n > 0) { View[] added = new View[n]; for (int i = 0; i < n; i++) added[i] = new WrappedLine(e.getElement(i)); replace(0, 0, added); } } @Override public Shape modelToView(int pos, Shape a, Position.Bias b) throws BadLocationException { if (! isAllocationValid()) { Rectangle alloc = a.getBounds(); setSize(alloc.width, alloc.height); } boolean isBackward = (b == Position.Bias.Backward); int testPos = (isBackward) ? Math.max(0, pos - 1) : pos; if(isBackward && testPos < getStartOffset()) { return null; } int vIndex = getViewIndexAtPosition(testPos); if ((vIndex != -1) && (vIndex < getViewCount())) { View v = getView(vIndex); if(v != null && testPos >= v.getStartOffset() && testPos < v.getEndOffset()) { Shape childShape = getChildAllocation(vIndex, a); if (childShape == null) { // We are likely invalid, fail. return null; } Shape retShape = v.modelToView(pos, childShape, b); if(retShape == null && v.getEndOffset() == pos) { if(++vIndex < getViewCount()) { v = getView(vIndex); retShape = v.modelToView(pos, getChildAllocation(vIndex, a), b); } } return retShape; } } throw new BadLocationException("Position not represented by view", pos); } /** * Provides a mapping, for a given region, from the document model * coordinate space to the view coordinate space. The specified region is * created as a union of the first and last character positions.

* * This is implemented to subtract the width of the second character, as * this view's modelToView actually returns the width of the * character instead of "1" or "0" like the View implementations in * javax.swing.text. Thus, if we don't override this method, * the View implementation will return one character's width * too much for its consumers (implementations of * javax.swing.text.Highlighter). * * @param p0 the position of the first character (>=0) * @param b0 The bias of the first character position, toward the previous * character or the next character represented by the offset, in * case the position is a boundary of two views; b0 * will have one of these values: *

    *
  • Position.Bias.Forward *
  • Position.Bias.Backward *
* @param p1 the position of the last character (>=0) * @param b1 the bias for the second character position, defined * one of the legal values shown above * @param a the area of the view, which encompasses the requested region * @return the bounding box which is a union of the region specified * by the first and last character positions * @exception BadLocationException if the given position does * not represent a valid location in the associated document * @exception IllegalArgumentException if b0 or * b1 are not one of the * legal Position.Bias values listed above * @see View#viewToModel */ @Override public Shape modelToView(int p0, Position.Bias b0, int p1, Position.Bias b1, Shape a) throws BadLocationException { Shape s0 = modelToView(p0, a, b0); Shape s1; if (p1 ==getEndOffset()) { try { s1 = modelToView(p1, a, b1); } catch (BadLocationException ble) { s1 = null; } if (s1 == null) { // Assume extends left to right. Rectangle alloc = (a instanceof Rectangle) ? (Rectangle)a : a.getBounds(); s1 = new Rectangle(alloc.x + alloc.width - 1, alloc.y, 1, alloc.height); } } else { s1 = modelToView(p1, a, b1); } Rectangle r0 = s0.getBounds(); Rectangle r1 = (s1 instanceof Rectangle) ? (Rectangle) s1 : s1.getBounds(); if (r0.y != r1.y) { // If it spans lines, force it to be the width of the view. Rectangle alloc = (a instanceof Rectangle) ? (Rectangle)a : a.getBounds(); r0.x = alloc.x; r0.width = alloc.width; } r0.add(r1); // The next line is the only difference between this method and // View's implementation. We're subtracting the width of the second // character. This is because this method is used by Highlighter // implementations to get the area to "highlight", and if we don't do // this, one character too many is highlighted thanks to our // modelToView() implementation returning the actual width of the // character requested! if (p1>p0) r0.width -= r1.width; return r0; } /** * Returns the next tab stop position after a given reference position. * This implementation does not support things like centering so it * ignores the tabOffset argument. * * @param x the current position >= 0 * @param tabOffset the position within the text stream * that the tab occurred at >= 0. * @return the tab stop, measured in points >= 0 */ public float nextTabStop(float x, int tabOffset) { if (tabSize == 0) return x; int ntabs = ((int) x - tabBase) / tabSize; return tabBase + ((ntabs + 1) * tabSize); } /** * Paints the word-wrapped text. * * @param g The graphics context in which to paint. * @param a The shape (usually a rectangle) in which to paint. */ @Override public void paint(Graphics g, Shape a) { Rectangle alloc = (a instanceof Rectangle) ? (Rectangle)a : a.getBounds(); tabBase = alloc.x; Graphics2D g2d = (Graphics2D)g; host = (RSyntaxTextArea)getContainer(); int ascent = host.getMaxAscent(); int fontHeight = host.getLineHeight(); FoldManager fm = host.getFoldManager(); TokenPainter painter = host.getTokenPainter(); Element root = getElement(); // Whether token styles should always be painted, even in selections int selStart = host.getSelectionStart(); int selEnd = host.getSelectionEnd(); int curLine = host.getCaretLineNumber(); int n = getViewCount(); // Number of lines. int x = alloc.x + getLeftInset(); tempRect.y = alloc.y + getTopInset(); Rectangle clip = g.getClipBounds(); for (int i = 0; i < n; i++) { tempRect.x = x + getOffset(X_AXIS, i); //tempRect.y = y + getOffset(Y_AXIS, i); tempRect.width = getSpan(X_AXIS, i); tempRect.height = getSpan(Y_AXIS, i); //System.err.println("For line " + i + ": tempRect==" + tempRect); if (tempRect.intersects(clip)) { Element lineElement = root.getElement(i); int startOffset = lineElement.getStartOffset(); int endOffset = lineElement.getEndOffset()-1; // Why always "-1"? View view = getView(i); if (selStart==selEnd || startOffset>=selEnd || endOffsetSegment point to the text in our * document between the given positions. Note that the positions MUST be * valid positions in the document. * * @param p0 The first position in the document. * @param p1 The second position in the document. * @param document The document from which you want to get the text. * @param seg The segment in which to load the text. */ private void setSegment(int p0, int p1, Document document, Segment seg) { try { //System.err.println("... in setSharedSegment, p0/p1==" + p0 + "/" + p1); document.getText(p0, p1-p0, seg); //System.err.println("... in setSharedSegment: s=='" + s + "'; line/numLines==" + line + "/" + numLines); } catch (BadLocationException ble) { // Never happens ble.printStackTrace(); } } /** * Sets the size of the view. This should cause layout of the view along * the given axis, if it has any layout duties. * * @param width the width >= 0 * @param height the height >= 0 */ @Override public void setSize(float width, float height) { updateMetrics(); if ((int) width != getWidth()) { // invalidate the view itself since the childrens // desired widths will be based upon this views width. preferenceChanged(null, true, true); widthChanging = true; } super.setSize(width, height); widthChanging = false; } /** * Update the child views in response to a * document event. */ void updateChildren(DocumentEvent e, Shape a) { Element elem = getElement(); DocumentEvent.ElementChange ec = e.getChange(elem); // This occurs when syntax highlighting only changes on lines // (i.e. beginning a multiline comment). if (e.getType()==DocumentEvent.EventType.CHANGE) { //System.err.println("Updating the damage due to a CHANGE event..."); // FIXME: Make me repaint more intelligently. getContainer().repaint(); //damageLineRange(startLine,endLine, a, host); } else if (ec != null) { // the structure of this element changed. Element[] removedElems = ec.getChildrenRemoved(); Element[] addedElems = ec.getChildrenAdded(); View[] added = new View[addedElems.length]; for (int i = 0; i < addedElems.length; i++) added[i] = new WrappedLine(addedElems[i]); //System.err.println("Replacing " + removedElems.length + // " children with " + addedElems.length); replace(ec.getIndex(), removedElems.length, added); // should damge a little more intelligently. if (a != null) { preferenceChanged(null, true, true); getContainer().repaint(); } } // update font metrics which may be used by the child views updateMetrics(); } final void updateMetrics() { Component host = getContainer(); Font f = host.getFont(); metrics = host.getFontMetrics(f); // Metrics for the default font. tabSize = getTabSize() * metrics.charWidth('m'); } @Override public int viewToModel(float x, float y, Shape a, Position.Bias[] bias) { int offs = -1; if (! isAllocationValid()) { Rectangle alloc = a.getBounds(); setSize(alloc.width, alloc.height); } // Get the child view for the line at (x,y), and ask it for the // specific offset. Rectangle alloc = getInsideAllocation(a); View v = getViewAtPoint((int) x, (int) y, alloc); if (v != null) { offs = v.viewToModel(x, y, alloc, bias); } // Code folding may have hidden the last line. If so, return the last // visible offset instead of the last offset. if (host.isCodeFoldingEnabled() && v==getView(getViewCount()-1) && offs==v.getEndOffset()-1) { offs = host.getLastVisibleOffset(); } return offs; } /** * {@inheritDoc} */ public int yForLine(Rectangle alloc, int line) throws BadLocationException { return yForLineContaining(alloc, getElement().getElement(line).getStartOffset()); //return alloc.y + getOffset(Y_AXIS, line); } /** * {@inheritDoc} */ public int yForLineContaining(Rectangle alloc, int offs) throws BadLocationException { if (isAllocationValid()) { // TODO: make cached Y_AXIS offsets valid even with folding enabled // to speed this back up! Rectangle r = (Rectangle)modelToView(offs, alloc, Bias.Forward); if (r!=null) { if (host.isCodeFoldingEnabled()) { int line = host.getLineOfOffset(offs); FoldManager fm = host.getFoldManager(); if (fm.isLineHidden(line)) { return -1; } } return r.y; } } return -1; } /** * Simple view of a line that wraps if it doesn't * fit within the horizontal space allocated. * This class tries to be lightweight by carrying little * state of it's own and sharing the state of the outer class * with it's siblings. */ class WrappedLine extends View { int nlines; WrappedLine(Element elem) { super(elem); } /** * Calculate the number of lines that will be rendered * by logical line when it is wrapped. */ final int calculateLineCount() { int nlines = 0; int startOffset = getStartOffset(); int p1 = getEndOffset(); // Get the token list for this line so we don't have to keep // recomputing it if this logical line spans multiple physical // lines. RSyntaxTextArea textArea = (RSyntaxTextArea)getContainer(); RSyntaxDocument doc = (RSyntaxDocument)getDocument(); Element map = doc.getDefaultRootElement(); int line = map.getElementIndex(startOffset); Token tokenList = doc.getTokenListForLine(line); float x0 = 0;// FIXME: should be alloc.x!! alloc.x;//0; //System.err.println(">>> calculateLineCount: " + startOffset + "-" + p1); for (int p0=startOffset; p0>> >>> calculated number of lines for this view (line " + line + "/" + numLines + ": " + nlines); */ return nlines; } /** * Determines the preferred span for this view along an * axis. * * @param axis may be either X_AXIS or Y_AXIS * @return the span the view would like to be rendered into. * Typically the view is told to render into the span * that is returned, although there is no guarantee. * The parent may choose to resize or break the view. * @see View#getPreferredSpan */ @Override public float getPreferredSpan(int axis) { switch (axis) { case View.X_AXIS: float width = getWidth(); if (width == Integer.MAX_VALUE) { // We have been initially set to MAX_VALUE, but we don't // want this as our preferred. return 100f; } return width; case View.Y_AXIS: if (nlines == 0 || widthChanging) nlines = calculateLineCount(); int h = nlines * ((RSyntaxTextArea)getContainer()).getLineHeight(); return h; default: throw new IllegalArgumentException("Invalid axis: " + axis); } } /** * Renders using the given rendering surface and area on that * surface. The view may need to do layout and create child * views to enable itself to render into the given allocation. * * @param g the rendering surface to use * @param a the allocated region to render into * @see View#paint */ @Override public void paint(Graphics g, Shape a) { // This is done by drawView() above. } /** * Provides a mapping from the document model coordinate space * to the coordinate space of the view mapped to it. * * @param pos the position to convert * @param a the allocated region to render into * @return the bounding box of the given position is returned * @exception BadLocationException if the given position does not * represent a valid location in the associated document. */ @Override public Shape modelToView(int pos, Shape a, Position.Bias b) throws BadLocationException { //System.err.println("--- begin modelToView ---"); Rectangle alloc = a.getBounds(); RSyntaxTextArea textArea = (RSyntaxTextArea)getContainer(); alloc.height = textArea.getLineHeight();//metrics.getHeight(); alloc.width = 1; int p0 = getStartOffset(); int p1 = getEndOffset(); int testP = (b == Position.Bias.Forward) ? pos : Math.max(p0, pos - 1); // Get the token list for this line so we don't have to keep // recomputing it if this logical line spans multiple physical // lines. RSyntaxDocument doc = (RSyntaxDocument)getDocument(); Element map = doc.getDefaultRootElement(); int line = map.getElementIndex(p0); Token tokenList = doc.getTokenListForLine(line); float x0 = alloc.x;//0; while (p0 < p1) { TokenSubList subList = TokenUtils.getSubTokenList(tokenList, p0, WrappedSyntaxView.this, textArea, x0, lineCountTempToken); x0 = subList!=null ? subList.x : x0; tokenList = subList!=null ? subList.tokenList : null; int p = calculateBreakPosition(p0, tokenList, x0); if ((pos >= p0) && (testP p0) { alloc = RSyntaxUtilities.getLineWidthUpTo( textArea, s, p0, pos, WrappedSyntaxView.this, alloc, alloc.x); } //System.err.println("--- end modelToView ---"); return alloc; } p0 = (p == p0) ? p1 : p; //System.err.println("... ... Incrementing y"); alloc.y += alloc.height; } throw new BadLocationException(null, pos); } /** * Provides a mapping from the view coordinate space to the logical * coordinate space of the model. * * @param fx the X coordinate * @param fy the Y coordinate * @param a the allocated region to render into * @return the location within the model that best represents the * given point in the view * @see View#viewToModel */ @Override public int viewToModel(float fx, float fy, Shape a, Position.Bias[] bias) { // PENDING(prinz) implement bias properly bias[0] = Position.Bias.Forward; Rectangle alloc = (Rectangle) a; RSyntaxDocument doc = (RSyntaxDocument)getDocument(); int x = (int) fx; int y = (int) fy; if (y < alloc.y) { // above the area covered by this icon, so the the position // is assumed to be the start of the coverage for this view. return getStartOffset(); } else if (y > alloc.y + alloc.height) { // below the area covered by this icon, so the the position // is assumed to be the end of the coverage for this view. return getEndOffset() - 1; } else { // positioned within the coverage of this view vertically, // so we figure out which line the point corresponds to. // if the line is greater than the number of lines // contained, then simply use the last line as it represents // the last possible place we can position to. RSyntaxTextArea textArea = (RSyntaxTextArea)getContainer(); alloc.height = textArea.getLineHeight(); int p1 = getEndOffset(); // Get the token list for this line so we don't have to keep // recomputing it if this logical line spans multiple // physical lines. Element map = doc.getDefaultRootElement(); int p0 = getStartOffset(); int line = map.getElementIndex(p0); Token tlist = doc.getTokenListForLine(line); // Look at each physical line-chunk of this logical line. while (p0=alloc.y) && (y<(alloc.y+alloc.height))) { // Point is to the left of the line if (x < alloc.x) { return p0; } // Point is to the right of the line else if (x > alloc.x + alloc.width) { return p - 1; } // Point is in this physical line! else { // Start at alloc.x since this chunk starts // at the beginning of a physical line. int n = tlist.getListOffset(textArea, WrappedSyntaxView.this, alloc.x, x); // NOTE: We needed to add the max() with // p0 as getTokenListForLine returns -1 // for empty lines (just a null token). // How did this work before? // FIXME: Have null tokens have their // offset but a -1 length. return Math.max(Math.min(n, p1-1), p0); } // End of else. } // End of if ((y>=alloc.y) && ... p0 = (p == p0) ? p1 : p; alloc.y += alloc.height; } // End of while (p0WrappedSyntaxView class, designed to * be faster with large wrapped documents. Heavily based off of * BoxView, but streamlined to only care about the y-axis, and * takes code folding into account.

* * This class is not currently used. * * @author Robert Futrell * @version 1.0 */ public class WrappedSyntaxView2 {//extends CompositeView { // private Rectangle tempRect; // private int[] cachedOffsets; // private int[] cachedSpans; // private boolean sizeRequirementsValid; public WrappedSyntaxView2(Element root) { //super(root); // tempRect = new Rectangle(); // cachedOffsets = new int[0]; // cachedSpans = new int[0]; // sizeRequirementsValid = false; } // protected void childAllocation(int index, Rectangle alloc) { // alloc.y += getOffset(index); // alloc.height = getHeight(index); // } // // // private int getHeight(int childIndex) { // return cachedSpans[childIndex]; // } // // // private int getOffset(int childIndex) { // return cachedOffsets[childIndex]; // } // // // protected View getViewAtPoint(int x, int y, Rectangle alloc) { // // TODO Auto-generated method stub // return null; // } // // // /** // * @param alloc The allocated region; this is the area inside of the insets // * @return Whether the point lies after the region. // */ // protected boolean isAfter(int x, int y, Rectangle alloc) { // return y > (alloc.y + alloc.height); // } // // // /** // * @param alloc The allocated region; this is the area inside of the insets // * @return Whether the point lies before the region. // */ // protected boolean isBefore(int x, int y, Rectangle alloc) { // return y < alloc.y; // } // // // public float getPreferredSpan(int axis) { // if (axis==X_AXIS) { // return preferredWidth + getLeftInset() + getRightInset(); // } // else { // return preferredHeight + getTopInset() + getBottomInset(); // } // } // // // public void paint(Graphics g, Shape allocation) { // // Rectangle alloc = (allocation instanceof Rectangle) ? // (Rectangle)allocation : allocation.getBounds(); // int n = getViewCount(); // // int x = alloc.x + getLeftInset(); // int y = alloc.y + getTopInset(); // Rectangle clip = g.getClipBounds(); // int preferredWidth = (int)getPreferredSpan(X_AXIS); // // for (int i = 0; i < n; i++) { // tempRect.x = x; // tempRect.y = y + getOffset(i); // tempRect.width = preferredWidth; // tempRect.height = getHeight(i); // if (tempRect.intersects(clip)) { // paintChild(g, tempRect, i); // } // } // // } // // // /** // * Called when a child view's preferred span changes. This invalidates // * our layout cache and calls the super implementation. // */ // public void preferenceChanged(View child, boolean widthPreferenceChanged, // boolean heightPreferenceChanged) { // // if (heightPreferenceChanged) { // sizeRequirementsValid = false; //// majorAllocValid = false; // } //// if (width) { //// minorReqValid = false; //// minorAllocValid = false; //// } // // super.preferenceChanged(child, widthPreferenceChanged, heightPreferenceChanged); // // } // // public void replace(int index, int length, View[] elems) { // // super.replace(index, length, elems); // // // Invalidate cache // int insertCount = elems==null ? 0 : elems.length; // cachedOffsets = updateLayoutArray(cachedOffsets, index, insertCount); // majorReqValid = false; // majorAllocValid = false; // // } // // // private int[] updateLayoutArray(int[] oldArray, int offset, int nInserted) { // int n = getViewCount(); // Called after super.replace() so this is accurate // int[] newArray = new int[n]; // System.arraycopy(oldArray, 0, newArray, 0, offset); // System.arraycopy(oldArray, offset, // newArray, offset + nInserted, n - nInserted - offset); // return newArray; // } // }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/XmlOccurrenceMarker.java000066400000000000000000000131451257417003700314030ustar00rootroot00000000000000/* * 03/09/2013 * * XmlOccurrenceMarker - Marks occurrences of the current token for XML. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import java.util.ArrayList; import java.util.List; import javax.swing.text.BadLocationException; import javax.swing.text.Element; import org.fife.ui.rtextarea.SmartHighlightPainter; /** * Marks occurrences of the current token for XML. * * @author Robert Futrell * @version 1.0 */ public class XmlOccurrenceMarker implements OccurrenceMarker { private static final char[] CLOSE_TAG_START = { '<', '/' }; private static final char[] TAG_SELF_CLOSE = { '/', '>' }; /** * {@inheritDoc} */ public Token getTokenToMark(RSyntaxTextArea textArea) { return HtmlOccurrenceMarker.getTagNameTokenForCaretOffset( textArea, this); } /** * {@inheritDoc} */ public boolean isValidType(RSyntaxTextArea textArea, Token t) { return textArea.getMarkOccurrencesOfTokenType(t.getType()); } /** * {@inheritDoc} */ public void markOccurrences(RSyntaxDocument doc, Token t, RSyntaxTextAreaHighlighter h, SmartHighlightPainter p) { char[] lexeme = t.getLexeme().toCharArray(); int tokenOffs = t.getOffset(); Element root = doc.getDefaultRootElement(); int lineCount = root.getElementCount(); int curLine = root.getElementIndex(t.getOffset()); int depth = 0; // For now, we only check for tags on the current line, for // simplicity. Tags spanning multiple lines aren't common anyway. boolean found = false; boolean forward = true; t = doc.getTokenListForLine(curLine); while (t!=null && t.isPaintable()) { if (t.getType()==Token.MARKUP_TAG_DELIMITER) { if (t.isSingleChar('<') && t.getOffset()+1==tokenOffs) { found = true; break; } else if (t.is(CLOSE_TAG_START) && t.getOffset()+2==tokenOffs) { found = true; forward = false; break; } } t = t.getNextToken(); } if (!found) { return; } if (forward) { t = t.getNextToken().getNextToken(); do { while (t!=null && t.isPaintable()) { if (t.getType()==Token.MARKUP_TAG_DELIMITER) { if (t.is(CLOSE_TAG_START)) { Token match = t.getNextToken(); if (match!=null && match.is(lexeme)) { if (depth>0) { depth--; } else { try { int end = match.getOffset() + match.length(); h.addMarkedOccurrenceHighlight(match.getOffset(), end, p); end = tokenOffs + match.length(); h.addMarkedOccurrenceHighlight(tokenOffs, end, p); } catch (BadLocationException ble) { ble.printStackTrace(); // Never happens } return; // We're done! } } } else if (t.isSingleChar('<')) { t = t.getNextToken(); if (t!=null && t.is(lexeme)) { depth++; } } } t = t==null ? null : t.getNextToken(); } if (++curLine openCloses = new ArrayList(); boolean inPossibleMatch = false; t = doc.getTokenListForLine(curLine); final int endBefore = tokenOffs - 2; // Stop before "')) { inPossibleMatch = false; } else if (inPossibleMatch && t.is(TAG_SELF_CLOSE)) { openCloses.remove(openCloses.size()-1); inPossibleMatch = false; } else if (t.is(CLOSE_TAG_START)) { Token next = t.getNextToken(); if (next!=null) { // Invalid XML might not have a match if (next.is(lexeme)) { openCloses.add(new Entry(false, next)); } t = next; } } } t = t.getNextToken(); } for (int i=openCloses.size()-1; i>=0; i--) { Entry entry = openCloses.get(i); depth += entry.open ? -1 : 1; if (depth==-1) { try { Token match = entry.t; int end = match.getOffset() + match.length(); h.addMarkedOccurrenceHighlight(match.getOffset(), end, p); end = tokenOffs + match.length(); h.addMarkedOccurrenceHighlight(tokenOffs, end, p); } catch (BadLocationException ble) { ble.printStackTrace(); // Never happens } openCloses.clear(); return; } } openCloses.clear(); if (--curLine>=0) { t = doc.getTokenListForLine(curLine); } } while (curLine>=0); } } /** * Used internally when searching backward for a matching "open" tag. */ private static class Entry { public boolean open; public Token t; public Entry(boolean open, Token t) { this.open = open; this.t = t; } } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/000077500000000000000000000000001257417003700273015ustar00rootroot00000000000000RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip.java000066400000000000000000000242441257417003700325320ustar00rootroot00000000000000/* * 07/29/2009 * * FocusableTip.java - A focusable tool tip, like those in Eclipse. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.focusabletip; import java.awt.Component; import java.awt.ComponentOrientation; import java.awt.Dimension; import java.awt.Point; import java.awt.Rectangle; import java.awt.Window; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.net.URL; import java.util.ResourceBundle; import javax.swing.*; import javax.swing.event.CaretEvent; import javax.swing.event.CaretListener; import javax.swing.event.HyperlinkListener; import javax.swing.event.MouseInputAdapter; import org.fife.ui.rsyntaxtextarea.PopupWindowDecorator; /** * A focusable tool tip, similar to those found in Eclipse. The user * can click in the tip and it becomes a "real," resizable window. * * @author Robert Futrell * @version 1.0 */ public class FocusableTip { private JTextArea textArea; private TipWindow tipWindow; private URL imageBase; private TextAreaListener textAreaListener; private HyperlinkListener hyperlinkListener; private String lastText; private Dimension maxSize; // null to automatic. /** * The screen bounds in which the mouse has to stay for the currently * displayed tip to stay visible. */ private Rectangle tipVisibleBounds; /** * Margin from mouse cursor at which to draw focusable tip. */ private static final int X_MARGIN = 18; /** * Margin from mouse cursor at which to draw focusable tip. */ private static final int Y_MARGIN = 12; private static final String MSG = "org.fife.ui.rsyntaxtextarea.focusabletip.FocusableTip"; private static final ResourceBundle msg = ResourceBundle.getBundle(MSG); public FocusableTip(JTextArea textArea, HyperlinkListener listener) { setTextArea(textArea); this.hyperlinkListener = listener; textAreaListener = new TextAreaListener(); tipVisibleBounds = new Rectangle(); } /** * Compute the bounds in which the user can move the mouse without the * tip window disappearing. */ private void computeTipVisibleBounds() { // Compute area that the mouse can move in without hiding the // tip window. Note that Java 1.4 can only detect mouse events // in Java windows, not globally. Rectangle r = tipWindow.getBounds(); Point p = r.getLocation(); SwingUtilities.convertPointFromScreen(p, textArea); r.setLocation(p); tipVisibleBounds.setBounds(r.x,r.y-15, r.width,r.height+15*2); } private void createAndShowTipWindow(final MouseEvent e, final String text) { Window owner = SwingUtilities.getWindowAncestor(textArea); tipWindow = new TipWindow(owner, this, text); tipWindow.setHyperlinkListener(hyperlinkListener); // Give apps a chance to decorate us with drop shadows, etc. PopupWindowDecorator decorator = PopupWindowDecorator.get(); if (decorator!=null) { decorator.decorate(tipWindow); } // TODO: Position tip window better (handle RTL, edges of screen, etc.). // Wrap in an invokeLater() to work around a JEditorPane issue where it // doesn't return its proper preferred size until after it is displayed. // See http://forums.sun.com/thread.jspa?forumID=57&threadID=574810 // for a discussion. SwingUtilities.invokeLater(new Runnable() { public void run() { // If a new FocusableTip is requested while another one is // *focused* and visible, the focused tip (i.e. "tipWindow") // will be disposed of. If this Runnable is run after the // dispose(), tipWindow will be null. All of this is done on // the EDT so no synchronization should be necessary. if (tipWindow==null) { return; } tipWindow.fixSize(); ComponentOrientation o = textArea.getComponentOrientation(); Point p = e.getPoint(); SwingUtilities.convertPointToScreen(p, textArea); // Ensure tool tip is in the window bounds. // Multi-monitor support - make sure the completion window (and // description window, if applicable) both fit in the same // window in a multi-monitor environment. To do this, we decide // which monitor the rectangle "p" is in, and use that one. Rectangle sb = TipUtil.getScreenBoundsForPoint(p.x, p.y); //Dimension ss = tipWindow.getToolkit().getScreenSize(); // Try putting our stuff "below" the mouse first. int y = p.y + Y_MARGIN; if (y+tipWindow.getHeight()>=sb.y+sb.height) { y = p.y - Y_MARGIN - tipWindow.getHeight(); } // Get x-coordinate of completions. Try to align left edge // with the mouse first (with a slight margin). int x = p.x - X_MARGIN; // ltr if (!o.isLeftToRight()) { x = p.x - tipWindow.getWidth() + X_MARGIN; } if (xsb.x+sb.width) { // completions don't fit x = sb.x + sb.width - tipWindow.getWidth(); } tipWindow.setLocation(x, y); tipWindow.setVisible(true); computeTipVisibleBounds(); // Do after tip is visible textAreaListener.install(textArea); lastText = text; } }); } /** * Returns the base URL to use when loading images in this focusable tip. * * @return The base URL to use. * @see #setImageBase(URL) */ public URL getImageBase() { return imageBase; } /** * The maximum size for unfocused tool tips. * * @return The maximum size for unfocused tool tips. A value of * null will use a default size. * @see #setMaxSize(Dimension) */ public Dimension getMaxSize() { return maxSize; } /** * Returns localized text for the given key. * * @param key The key into the resource bundle. * @return The localized text. */ static String getString(String key) { return msg.getString(key); } /** * Disposes of the focusable tip currently displayed, if any. */ public void possiblyDisposeOfTipWindow() { if (tipWindow != null) { tipWindow.dispose(); tipWindow = null; textAreaListener.uninstall(); tipVisibleBounds.setBounds(-1, -1, 0, 0); lastText = null; textArea.requestFocus(); } } void removeListeners() { //System.out.println("DEBUG: Removing text area listeners"); textAreaListener.uninstall(); } /** * Sets the base URL to use when loading images in this focusable tip. * * @param url The base URL to use. * @see #getImageBase() */ public void setImageBase(URL url) { imageBase = url; } /** * Sets the maximum size for unfocused tool tips. * * @param maxSize The new maximum size. A value of null will * cause a default size to be used. * @see #getMaxSize() */ public void setMaxSize(Dimension maxSize) { this.maxSize = maxSize; } private void setTextArea(JTextArea textArea) { this.textArea = textArea; // Is okay to do multiple times. ToolTipManager.sharedInstance().registerComponent(textArea); } public void toolTipRequested(MouseEvent e, String text) { if (text==null || text.length()==0) { possiblyDisposeOfTipWindow(); lastText = text; return; } if (lastText==null || text.length()!=lastText.length() || !text.equals(lastText)) { possiblyDisposeOfTipWindow(); createAndShowTipWindow(e, text); } } private class TextAreaListener extends MouseInputAdapter implements CaretListener, ComponentListener, FocusListener, KeyListener { public void caretUpdate(CaretEvent e) { Object source = e.getSource(); if (source == textArea) { possiblyDisposeOfTipWindow(); } } public void componentHidden(ComponentEvent e) { handleComponentEvent(e); } public void componentMoved(ComponentEvent e) { handleComponentEvent(e); } public void componentResized(ComponentEvent e) { handleComponentEvent(e); } public void componentShown(ComponentEvent e) { handleComponentEvent(e); } public void focusGained(FocusEvent e) { } public void focusLost(FocusEvent e) { // Only dispose of tip if it wasn't the TipWindow that was clicked // "c" can be null, at least on OS X, so we must check that before // calling SwingUtilities.getWindowAncestor() to guard against an // NPE. Component c = e.getOppositeComponent(); boolean tipClicked = (c instanceof TipWindow) || (c!=null && SwingUtilities.getWindowAncestor(c) instanceof TipWindow); if (!tipClicked) { possiblyDisposeOfTipWindow(); } } private void handleComponentEvent(ComponentEvent e) { possiblyDisposeOfTipWindow(); } public void install(JTextArea textArea) { textArea.addCaretListener(this); textArea.addComponentListener(this); textArea.addFocusListener(this); textArea.addKeyListener(this); textArea.addMouseListener(this); textArea.addMouseMotionListener(this); } public void keyPressed(KeyEvent e) { if (e.getKeyCode()==KeyEvent.VK_ESCAPE) { possiblyDisposeOfTipWindow(); } else if (e.getKeyCode()==KeyEvent.VK_F2) { if (tipWindow!=null && !tipWindow.getFocusableWindowState()) { tipWindow.actionPerformed(null); e.consume(); // Don't do bookmarking stuff } } } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { } @Override public void mouseExited(MouseEvent e) { // possiblyDisposeOfTipWindow(); } @Override public void mouseMoved(MouseEvent e) { if (tipVisibleBounds==null || !tipVisibleBounds.contains(e.getPoint())) { possiblyDisposeOfTipWindow(); } } public void uninstall() { textArea.removeCaretListener(this); textArea.removeComponentListener(this); textArea.removeFocusListener(this); textArea.removeKeyListener(this); textArea.removeMouseListener(this); textArea.removeMouseMotionListener(this); } } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/SizeGrip.java000066400000000000000000000151631257417003700317060ustar00rootroot00000000000000/* * 12/23/2008 * * SizeGrip.java - A size grip component that sits at the bottom of the window, * allowing the user to easily resize that window. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.focusabletip; import java.awt.Color; import java.awt.ComponentOrientation; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import java.awt.Point; import java.awt.Window; import java.awt.event.MouseEvent; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import javax.imageio.ImageIO; import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.event.MouseInputAdapter; /** * A component that allows its parent window to be resizable, similar to the * size grip seen on status bars. * * @author Robert Futrell * @version 1.0 */ class SizeGrip extends JPanel { /** * The size grip to use if we're on OS X. */ private Image osxSizeGrip; public SizeGrip() { MouseHandler adapter = new MouseHandler(); addMouseListener(adapter); addMouseMotionListener(adapter); setPreferredSize(new Dimension(16, 16)); } /** * Overridden to ensure that the cursor for this component is appropriate * for the orientation. * * @param o The new orientation. */ @Override public void applyComponentOrientation(ComponentOrientation o) { possiblyFixCursor(o.isLeftToRight()); super.applyComponentOrientation(o); } /** * Creates and returns the OS X size grip image. * * @return The OS X size grip. */ private Image createOSXSizeGrip() { ClassLoader cl = getClass().getClassLoader(); URL url = cl.getResource("org/fife/ui/rsyntaxtextarea/focusabletip/osx_sizegrip.png"); if (url==null) { // We're not running in a jar - we may be debugging in Eclipse, // for example File f = new File("../RSyntaxTextArea/src/org/fife/ui/rsyntaxtextarea/focusabletip/osx_sizegrip.png"); if (f.isFile()) { try { url = f.toURI().toURL(); } catch (MalformedURLException mue) { // Never happens mue.printStackTrace(); return null; } } else { return null; // Can't find resource or image file } } Image image = null; try { image = ImageIO.read(url); } catch (IOException ioe) { // Never happens ioe.printStackTrace(); } return image; } /** * Paints this panel. * * @param g The graphics context. */ @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Dimension dim = getSize(); if (osxSizeGrip!=null) { g.drawImage(osxSizeGrip, dim.width-16, dim.height-16, null); return; } Color c1 = UIManager.getColor("Label.disabledShadow"); Color c2 = UIManager.getColor("Label.disabledForeground"); ComponentOrientation orientation = getComponentOrientation(); if (orientation.isLeftToRight()) { int width = dim.width -= 3; int height = dim.height -= 3; g.setColor(c1); g.fillRect(width-9,height-1, 3,3); g.fillRect(width-5,height-1, 3,3); g.fillRect(width-1,height-1, 3,3); g.fillRect(width-5,height-5, 3,3); g.fillRect(width-1,height-5, 3,3); g.fillRect(width-1,height-9, 3,3); g.setColor(c2); g.fillRect(width-9,height-1, 2,2); g.fillRect(width-5,height-1, 2,2); g.fillRect(width-1,height-1, 2,2); g.fillRect(width-5,height-5, 2,2); g.fillRect(width-1,height-5, 2,2); g.fillRect(width-1,height-9, 2,2); } else { int height = dim.height -= 3; g.setColor(c1); g.fillRect(10,height-1, 3,3); g.fillRect(6,height-1, 3,3); g.fillRect(2,height-1, 3,3); g.fillRect(6,height-5, 3,3); g.fillRect(2,height-5, 3,3); g.fillRect(2,height-9, 3,3); g.setColor(c2); g.fillRect(10,height-1, 2,2); g.fillRect(6,height-1, 2,2); g.fillRect(2,height-1, 2,2); g.fillRect(6,height-5, 2,2); g.fillRect(2,height-5, 2,2); g.fillRect(2,height-9, 2,2); } } /** * Ensures that the cursor for this component is appropriate for the * orientation. * * @param ltr Whether the current component orientation is LTR. */ protected void possiblyFixCursor(boolean ltr) { int cursor = Cursor.NE_RESIZE_CURSOR; if (ltr) { cursor = Cursor.NW_RESIZE_CURSOR; } if (cursor!=getCursor().getType()) { setCursor(Cursor.getPredefinedCursor(cursor)); } } @Override public void updateUI() { super.updateUI(); // TODO: Key off of Aqua LaF, not just OS X, as this size grip looks // bad on other LaFs on Mac such as Nimbus. if (System.getProperty("os.name").contains("OS X")) { if (osxSizeGrip==null) { osxSizeGrip = createOSXSizeGrip(); } } else { // Clear memory in case of runtime LaF change. osxSizeGrip = null; } } /** * Listens for mouse events on this panel and resizes the parent window * appropriately. */ /* * NOTE: We use SwingUtilities.convertPointToScreen() instead of just using * the locations relative to the corner component because the latter proved * buggy - stretch the window too wide and some kind of arithmetic error * started happening somewhere - our window would grow way too large. */ private class MouseHandler extends MouseInputAdapter { private Point origPos; @Override public void mouseDragged(MouseEvent e) { Point newPos = e.getPoint(); SwingUtilities.convertPointToScreen(newPos, SizeGrip.this); int xDelta = newPos.x - origPos.x; int yDelta = newPos.y - origPos.y; Window wind = SwingUtilities.getWindowAncestor(SizeGrip.this); if (wind!=null) { // Should always be true if (getComponentOrientation().isLeftToRight()) { int w = wind.getWidth(); if (newPos.x>=wind.getX()) { w += xDelta; } int h = wind.getHeight(); if (newPos.y>=wind.getY()) { h += yDelta; } wind.setSize(w,h); } else { // RTL int newW = Math.max(1, wind.getWidth()-xDelta); int newH = Math.max(1, wind.getHeight()+yDelta); wind.setBounds(newPos.x, wind.getY(), newW, newH); } // invalidate()/validate() needed pre-1.6. wind.invalidate(); wind.validate(); } origPos.setLocation(newPos); } @Override public void mousePressed(MouseEvent e) { origPos = e.getPoint(); SwingUtilities.convertPointToScreen(origPos, SizeGrip.this); } @Override public void mouseReleased(MouseEvent e) { origPos = null; } } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/TipUtil.java000066400000000000000000000153721257417003700315460ustar00rootroot00000000000000/* * 08/13/2009 * * TipUtil.java - Utility methods for homemade tool tips. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.focusabletip; import java.awt.Color; import java.awt.Font; import java.awt.GraphicsConfiguration; import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; import java.awt.Rectangle; import java.awt.SystemColor; import javax.swing.BorderFactory; import javax.swing.JEditorPane; import javax.swing.UIManager; import javax.swing.border.Border; import javax.swing.plaf.ColorUIResource; import javax.swing.text.html.HTMLDocument; import org.fife.ui.rsyntaxtextarea.RSyntaxUtilities; /** * Static utility methods for focusable tips. * * @author Robert Futrell * @version 1.0 */ public class TipUtil { private TipUtil() { } /** * Returns a hex string for the specified color, suitable for HTML. * * @param c The color. * @return The string representation, in the form "#rrggbb", * or null if c is null. */ private static final String getHexString(Color c) { if (c==null) { return null; } StringBuilder sb = new StringBuilder("#"); int r = c.getRed(); if (r<16) { sb.append('0'); } sb.append(Integer.toHexString(r)); int g = c.getGreen(); if (g<16) { sb.append('0'); } sb.append(Integer.toHexString(g)); int b = c.getBlue(); if (b<16) { sb.append('0'); } sb.append(Integer.toHexString(b)); return sb.toString(); } /** * Returns the screen coordinates for the monitor that contains the * specified point. This is useful for setups with multiple monitors, * to ensure that popup windows are positioned properly. * * @param x The x-coordinate, in screen coordinates. * @param y The y-coordinate, in screen coordinates. * @return The bounds of the monitor that contains the specified point. */ public static Rectangle getScreenBoundsForPoint(int x, int y) { GraphicsEnvironment env = GraphicsEnvironment. getLocalGraphicsEnvironment(); GraphicsDevice[] devices = env.getScreenDevices(); for (int i=0; iJEditorPane so it can be used to render the * content in a focusable pseudo-tool tip. It is assumed that the editor * pane is using an HTMLDocument. * * @param textArea The editor pane to tweak. */ public static void tweakTipEditorPane(JEditorPane textArea) { // Jump through a few hoops to get things looking nice in Nimbus boolean isNimbus = isNimbusLookAndFeel(); if (isNimbus) { Color selBG = textArea.getSelectionColor(); Color selFG = textArea.getSelectedTextColor(); textArea.setUI(new javax.swing.plaf.basic.BasicEditorPaneUI()); textArea.setSelectedTextColor(selFG); textArea.setSelectionColor(selBG); } textArea.setEditable(false); // Required for links to work! textArea.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); // Make selection visible even though we are not (initially) focusable. textArea.getCaret().setSelectionVisible(true); // Set the foreground color. Important because when rendering HTML, // default foreground becomes black, which may not match all LAF's // (e.g. Substance). Color fg = UIManager.getColor("Label.foreground"); if (fg==null || (isNimbus && isDerivedColor(fg))) { fg = SystemColor.textText; } textArea.setForeground(fg); // Make it use the "tool tip" background color. textArea.setBackground(TipUtil.getToolTipBackground()); // Force JEditorPane to use a certain font even in HTML. // All standard LookAndFeels, even Nimbus (!), define Label.font. Font font = UIManager.getFont("Label.font"); if (font == null) { // Try to make a sensible default font = new Font("SansSerif", Font.PLAIN, 12); } HTMLDocument doc = (HTMLDocument) textArea.getDocument(); doc.getStyleSheet().addRule( "body { font-family: " + font.getFamily() + "; font-size: " + font.getSize() + "pt" + "; color: " + getHexString(fg) + "; }"); // Always add link foreground rule. Unfortunately these CSS rules // stack each time the LaF is changed (how can we overwrite them // without clearing out the important "standard" ones?). Color linkFG = RSyntaxUtilities.getHyperlinkForeground(); doc.getStyleSheet().addRule( "a { color: " + getHexString(linkFG) + "; }"); } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/TipWindow.java000066400000000000000000000237671257417003700321070ustar00rootroot00000000000000/* * 07/29/2009 * * TipWindow.java - The actual window component representing the tool tip. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.focusabletip; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.Font; import java.awt.Point; import java.awt.Rectangle; import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.BorderFactory; import javax.swing.JEditorPane; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSeparator; import javax.swing.JWindow; import javax.swing.SwingConstants; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.border.Border; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; import javax.swing.event.MouseInputAdapter; import javax.swing.text.BadLocationException; import javax.swing.text.html.HTMLDocument; import org.fife.ui.rsyntaxtextarea.RSyntaxUtilities; /** * The actual tool tip component. * * @author Robert Futrell * @version 1.0 */ class TipWindow extends JWindow implements ActionListener { private FocusableTip ft; private JEditorPane textArea; private String text; private TipListener tipListener; private HyperlinkListener userHyperlinkListener; private static TipWindow visibleInstance; /** * Constructor. * * @param owner The parent window. * @param msg The text of the tool tip. This can be HTML. */ public TipWindow(Window owner, FocusableTip ft, String msg) { super(owner); this.ft = ft; // Render plain text tool tips correctly. if (msg!=null && msg.length()>=6 && !msg.substring(0,6).toLowerCase().equals("")) { msg = "" + RSyntaxUtilities.escapeForHtml(msg, "
", false); } this.text = msg; tipListener = new TipListener(); JPanel cp = new JPanel(new BorderLayout()); cp.setBorder(TipUtil.getToolTipBorder()); cp.setBackground(TipUtil.getToolTipBackground()); textArea = new JEditorPane("text/html", text); TipUtil.tweakTipEditorPane(textArea); if (ft.getImageBase()!=null) { // Base URL for images ((HTMLDocument)textArea.getDocument()).setBase(ft.getImageBase()); } textArea.addMouseListener(tipListener); textArea.addHyperlinkListener(new HyperlinkListener() { public void hyperlinkUpdate(HyperlinkEvent e) { if (e.getEventType()==HyperlinkEvent.EventType.ACTIVATED) { TipWindow.this.ft.possiblyDisposeOfTipWindow(); } } }); cp.add(textArea); setFocusableWindowState(false); setContentPane(cp); setBottomPanel(); // Must do after setContentPane() pack(); // InputMap/ActionMap combo doesn't work for JWindows (even when // using the JWindow's JRootPane), so we'll resort to KeyListener KeyAdapter ka = new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { if (e.getKeyCode()==KeyEvent.VK_ESCAPE) { TipWindow.this.ft.possiblyDisposeOfTipWindow(); } } }; addKeyListener(ka); textArea.addKeyListener(ka); // Ensure only 1 TipWindow is ever visible. If the caller does what // they're supposed to and only creates these on the EDT, the // synchronization isn't necessary, but we'll be extra safe. synchronized (TipWindow.class) { if (visibleInstance!=null) { visibleInstance.dispose(); } visibleInstance = this; } } public void actionPerformed(ActionEvent e) { if (!getFocusableWindowState()) { setFocusableWindowState(true); setBottomPanel(); textArea.removeMouseListener(tipListener); pack(); addWindowFocusListener(new WindowAdapter() { @Override public void windowLostFocus(WindowEvent e) { ft.possiblyDisposeOfTipWindow(); } }); ft.removeListeners(); if (e==null) { // Didn't get here via our mouseover timer requestFocus(); } } } /** * Disposes of this window. */ @Override public void dispose() { //System.out.println("[DEBUG]: Disposing..."); Container cp = getContentPane(); for (int i=0; id.height) { d.height = r.y + r.height + 5; if(ft.getMaxSize() != null) { d.height = Math.min(d.height, MAX_WINDOW_H); } textArea.setPreferredSize(d); } } catch (BadLocationException ble) { // Never happens ble.printStackTrace(); } pack(); // Must re-pack to calculate proper size. } public String getText() { return text; } private void setBottomPanel() { final JPanel panel = new JPanel(new BorderLayout()); panel.add(new JSeparator(), BorderLayout.NORTH); boolean focusable = getFocusableWindowState(); if (focusable) { SizeGrip sg = new SizeGrip(); sg.applyComponentOrientation(sg.getComponentOrientation()); // Workaround panel.add(sg, BorderLayout.LINE_END); MouseInputAdapter adapter = new MouseInputAdapter() { private Point lastPoint; @Override public void mouseDragged(MouseEvent e) { Point p = e.getPoint(); SwingUtilities.convertPointToScreen(p, panel); if (lastPoint==null) { lastPoint = p; } else { int dx = p.x - lastPoint.x; int dy = p.y - lastPoint.y; setLocation(getX()+dx, getY()+dy); lastPoint = p; } } @Override public void mousePressed(MouseEvent e) { lastPoint = e.getPoint(); SwingUtilities.convertPointToScreen(lastPoint, panel); } }; panel.addMouseListener(adapter); panel.addMouseMotionListener(adapter); // Don't add tipListener to the panel or SizeGrip } else { panel.setOpaque(false); JLabel label = new JLabel(FocusableTip.getString("FocusHotkey")); Color fg = UIManager.getColor("Label.disabledForeground"); Font font = textArea.getFont(); font = font.deriveFont(font.getSize2D() - 1.0f); label.setFont(font); if (fg==null) { // Non BasicLookAndFeel-derived Looks fg = Color.GRAY; } label.setOpaque(true); Color bg = TipUtil.getToolTipBackground(); label.setBackground(bg); label.setForeground(fg); label.setHorizontalAlignment(SwingConstants.TRAILING); label.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); panel.add(label); panel.addMouseListener(tipListener); } // Replace the previous SOUTH Component with the new one. Container cp = getContentPane(); if (cp.getComponentCount()==2) { // Skip first time through Component comp = cp.getComponent(0); cp.remove(0); JScrollPane sp = new JScrollPane(comp); Border emptyBorder = BorderFactory.createEmptyBorder(); sp.setBorder(emptyBorder); sp.setViewportBorder(emptyBorder); sp.setBackground(textArea.getBackground()); sp.getViewport().setBackground(textArea.getBackground()); cp.add(sp); // What was component 1 is now 0. cp.getComponent(0).removeMouseListener(tipListener); cp.remove(0); } cp.add(panel, BorderLayout.SOUTH); } /** * Sets the listener for hyperlink events in this tip window. * * @param listener The new listener. The old listener (if any) is * removed. A value of null means "no listener." */ public void setHyperlinkListener(HyperlinkListener listener) { // We've added a separate listener, so remove only the user's. if (userHyperlinkListener!=null) { textArea.removeHyperlinkListener(userHyperlinkListener); } userHyperlinkListener = listener; if (userHyperlinkListener!=null) { textArea.addHyperlinkListener(userHyperlinkListener); } } /** * Listens for events in this window. */ private class TipListener extends MouseAdapter { public TipListener() { } @Override public void mousePressed(MouseEvent e) { actionPerformed(null); // Manually create "real" window } @Override public void mouseExited(MouseEvent e) { // Since we registered this listener on the child components of // the JWindow, not the JWindow iteself, we have to be careful. Component source = (Component)e.getSource(); Point p = e.getPoint(); SwingUtilities.convertPointToScreen(p, source); if (!TipWindow.this.getBounds().contains(p)) { ft.possiblyDisposeOfTipWindow(); } } } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/package.html000066400000000000000000000001211257417003700315540ustar00rootroot00000000000000 An implementation of a focusable tooltip. RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/folding/000077500000000000000000000000001257417003700262435ustar00rootroot00000000000000RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/folding/CurlyFoldParser.java000066400000000000000000000221651257417003700321740ustar00rootroot00000000000000/* * 10/08/2011 * * CurlyFoldParser.java - Fold parser for languages with C-style syntax. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.folding; import java.util.ArrayList; import java.util.List; import javax.swing.text.BadLocationException; import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; import org.fife.ui.rsyntaxtextarea.Token; import org.fife.ui.rsyntaxtextarea.TokenMaker; /** * A basic fold parser that can be used for languages such as C, that use * curly braces to denote code blocks. This parser searches for curly brace * pairs and creates code folds out of them. It can also optionally find * C-style multi-line comments ("/* ... */") and make them * foldable as well.

* * This parser knows nothing about language semantics; it uses * RSyntaxTextArea's syntax highlighting tokens to identify * curly braces. By default, it looks for single-char tokens of type * {@link Token#SEPARATOR}, with lexemes '{' or '}'. * If your {@link TokenMaker} uses a different token type for curly braces, you * should override the {@link #isLeftCurly(Token)} and * {@link #isRightCurly(Token)} methods with your own definitions. In theory, * you could extend this fold parser to parse languages that use completely * different tokens than curly braces to denote foldable regions by overriding * those two methods.

* * Note also that this class may impose somewhat of a performance penalty on * large source files, since it re-parses the entire document each time folds * are reevaluated. * * @author Robert Futrell * @version 1.0 */ public class CurlyFoldParser implements FoldParser { /** * Whether to scan for C-style multi-line comments and make them foldable. */ private boolean foldableMultiLineComments; /** * Whether this parser is folding Java. */ private final boolean java; /** * Used to find import statements when folding Java code. */ private static final char[] KEYWORD_IMPORT = "import".toCharArray(); /** * Ending of a multi-line comment in C, C++, Java, etc. */ protected static final char[] C_MLC_END = "*/".toCharArray(); /** * Creates a fold parser that identifies foldable regions via curly braces * as well as C-style multi-line comments. */ public CurlyFoldParser() { this(true, false); } /** * Constructor. * * @param cStyleMultiLineComments Whether to scan for C-style multi-line * comments and make them foldable. * @param java Whether this parser is folding Java. This adds extra * parsing rules, such as grouping all import statements into a * fold section. */ public CurlyFoldParser(boolean cStyleMultiLineComments, boolean java) { this.foldableMultiLineComments = cStyleMultiLineComments; this.java = java; } /** * Returns whether multi-line comments are foldable with this parser. * * @return Whether multi-line comments are foldable. * @see #setFoldableMultiLineComments(boolean) */ public boolean getFoldableMultiLineComments() { return foldableMultiLineComments; } /** * {@inheritDoc} */ public List getFolds(RSyntaxTextArea textArea) { List folds = new ArrayList(); Fold currentFold = null; int lineCount = textArea.getLineCount(); boolean inMLC = false; int mlcStart = 0; int importStartLine = -1; int lastSeenImportLine = -1; int importGroupStartOffs = -1; int importGroupEndOffs = -1; try { for (int line=0; line-1) { if (lastSeenImportLine>importStartLine) { Fold fold = null; // Any imports found *should* be a top-level fold, // but we're extra lenient here and allow groups // of them anywhere to keep our parser better-behaved // if they have random "imports" throughout code. if (currentFold==null) { fold = new Fold(FoldType.IMPORTS, textArea, importGroupStartOffs); folds.add(fold); } else { fold = currentFold.createChild(FoldType.IMPORTS, importGroupStartOffs); } fold.setEndOffset(importGroupEndOffs); } importStartLine = lastSeenImportLine = importGroupStartOffs = importGroupEndOffs = -1; } } if (inMLC) { // If we found the end of an MLC that started // on a previous line... if (t.endsWith(C_MLC_END)) { int mlcEnd = t.getEndOffset() - 1; if (currentFold==null) { currentFold = new Fold(FoldType.COMMENT, textArea, mlcStart); currentFold.setEndOffset(mlcEnd); folds.add(currentFold); currentFold = null; } else { currentFold = currentFold.createChild(FoldType.COMMENT, mlcStart); currentFold.setEndOffset(mlcEnd); currentFold = currentFold.getParent(); } //System.out.println("Ending MLC at: " + mlcEnd + ", parent==" + currentFold); inMLC = false; mlcStart = 0; } // Otherwise, this MLC is continuing on to yet // another line. } else { // If we're an MLC that ends on a later line... if (t.getType()!=Token.COMMENT_EOL && !t.endsWith(C_MLC_END)) { //System.out.println("Starting MLC at: " + t.offset); inMLC = true; mlcStart = t.getOffset(); } } } else if (isLeftCurly(t)) { // Java-specific stuff if (java) { if (importStartLine>-1) { if (lastSeenImportLine>importStartLine) { Fold fold = null; // Any imports found *should* be a top-level fold, // but we're extra lenient here and allow groups // of them anywhere to keep our parser better-behaved // if they have random "imports" throughout code. if (currentFold==null) { fold = new Fold(FoldType.IMPORTS, textArea, importGroupStartOffs); folds.add(fold); } else { fold = currentFold.createChild(FoldType.IMPORTS, importGroupStartOffs); } fold.setEndOffset(importGroupEndOffs); } importStartLine = lastSeenImportLine = importGroupStartOffs = importGroupEndOffs = -1; } } if (currentFold==null) { currentFold = new Fold(FoldType.CODE, textArea, t.getOffset()); folds.add(currentFold); } else { currentFold = currentFold.createChild(FoldType.CODE, t.getOffset()); } } else if (isRightCurly(t)) { if (currentFold!=null) { currentFold.setEndOffset(t.getOffset()); Fold parentFold = currentFold.getParent(); //System.out.println("... Adding regular fold at " + t.offset + ", parent==" + parentFold); // Don't add fold markers for single-line blocks if (currentFold.isOnSingleLine()) { if (!currentFold.removeFromParent()) { folds.remove(folds.size()-1); } } currentFold = parentFold; } } // Java-specific folding rules else if (java) { if (t.is(Token.RESERVED_WORD, KEYWORD_IMPORT)) { if (importStartLine==-1) { importStartLine = line; importGroupStartOffs = t.getOffset(); importGroupEndOffs = t.getOffset(); } lastSeenImportLine = line; } else if (importStartLine>-1 && t.isIdentifier() &&//SEPARATOR && t.isSingleChar(';')) { importGroupEndOffs = t.getOffset(); } } t = t.getNextToken(); } } } catch (BadLocationException ble) { // Should never happen ble.printStackTrace(); } return folds; } /** * Returns whether the token is a left curly brace. This method exists * so subclasses can provide their own curly brace definition. * * @param t The token. * @return Whether it is a left curly brace. * @see #isRightCurly(Token) */ public boolean isLeftCurly(Token t) { return t.isLeftCurly(); } /** * Returns whether the token is a right curly brace. This method exists * so subclasses can provide their own curly brace definition. * * @param t The token. * @return Whether it is a right curly brace. * @see #isLeftCurly(Token) */ public boolean isRightCurly(Token t) { return t.isRightCurly(); } /** * Sets whether multi-line comments are foldable with this parser. * * @param foldable Whether multi-line comments are foldable. * @see #getFoldableMultiLineComments() */ public void setFoldableMultiLineComments(boolean foldable) { this.foldableMultiLineComments = foldable; } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/folding/Fold.java000066400000000000000000000367031257417003700300030ustar00rootroot00000000000000/* * 10/08/2011 * * Fold.java - A foldable region of text in an RSyntaxTextArea instance. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.folding; import java.util.ArrayList; import java.util.List; import javax.swing.text.BadLocationException; import javax.swing.text.Element; import javax.swing.text.Position; import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; /** * Information about a foldable region.

* * A Fold has zero or more children, and Folds thus * form a hierarchical structure, with "parent" folds containing the info about * any "child" folds they contain.

* * Fold regions are denoted by a starting and ending offset, but the actual * folding is done on a per-line basis, so Fold instances provide * methods for retrieving both starting and ending offsets and lines. The * starting and ending offsets/lines are "sticky" and correctly track their * positions even as the document is modified. * * @author Robert Futrell * @version 1.0 */ public class Fold implements Comparable { private int type; private RSyntaxTextArea textArea; private Position startOffs; private Position endOffs; private Fold parent; private List children; private boolean collapsed; private int childCollapsedLineCount; private int lastStartOffs = -1; private int cachedStartLine; private int lastEndOffs = -1; private int cachedEndLine; public Fold(int type, RSyntaxTextArea textArea, int startOffs) throws BadLocationException { this.type = type; this.textArea = textArea; this.startOffs = textArea.getDocument().createPosition(startOffs); } /** * Creates a fold that is a child of this one. * * @param type The type of fold. * @param startOffs The starting offset of the fold. * @return The child fold. * @throws BadLocationException If startOffs is invalid. * @see FoldType */ public Fold createChild(int type, int startOffs) throws BadLocationException { Fold child = new Fold(type, textArea, startOffs); child.parent = this; if (children==null) { children = new ArrayList(); } children.add(child); return child; } /** * Two folds are considered equal if they start at the same offset. * * @param otherFold Another fold to compare this one to. * @return How this fold compares to the other. */ public int compareTo(Fold otherFold) { int result = -1; if (otherFold!=null) { result = startOffs.getOffset() - otherFold.startOffs.getOffset(); //result = getStartLine() - otherFold.getStartLine(); } return result; } /** * Returns whether the specified line would be hidden in this fold. Since * RSTA displays the "first" line in a fold, this means that the line must * must be between (getStartLine()+1) and * getEndLine(), inclusive. * * @param line The line to check. * @return Whether the line would be hidden if this fold is collapsed. * @see #containsOffset(int) * @see #containsOrStartsOnLine(int) */ public boolean containsLine(int line) { return line>getStartLine() && line<=getEndLine(); } /** * Returns whether the given line is in the range * [getStartLine(), getEndLine()], inclusive. * * @param line The line to check. * @return Whether this fold contains, or starts on, the line. * @see #containsLine(int) */ public boolean containsOrStartsOnLine(int line) { return line>=getStartLine() && line<=getEndLine(); } /** * Returns whether the specified offset is "inside" the fold. This method * returns true if the offset is greater than the fold start * offset, and no further than the last offset of the last folded line. * * @param offs The offset to check. * @return Whether the offset is "inside" the fold. * @see #containsLine(int) */ public boolean containsOffset(int offs) { boolean contained = false; if (offs>getStartOffset()) { // Use Elements to avoid BadLocationExceptions Element root = textArea.getDocument().getDefaultRootElement(); int line = root.getElementIndex(offs); contained = line<=getEndLine(); } return contained; } /** * Two folds are considered equal if they have the same starting offset. * * @param otherFold Another fold to compare this one to. * @return Whether the two folds are equal. * @see #compareTo(Fold) */ @Override public boolean equals(Object otherFold) { return otherFold instanceof Fold && compareTo((Fold)otherFold)==0; } /** * Returns a specific child fold. * * @param index The index of the child fold. * @return The child fold. * @see #getChildCount() */ public Fold getChild(int index) { return children.get(index); } /** * Returns the number of child folds. * * @return The number of child folds. * @see #getChild(int) */ public int getChildCount() { return children==null ? 0 : children.size(); } /** * Returns the array of child folds. This is a shallow copy. * * @return The array of child folds, or null if there are * none. */ List getChildren() { return children; } /** * Returns the number of collapsed lines under this fold. If this fold * is collapsed, this method returns {@link #getLineCount()}, otherwise * it returns the sum of all collapsed lines of all child folds of this * one.

* * The value returned is cached, so this method returns quickly and * shouldn't affect performance. * * @return The number of collapsed lines under this fold. */ public int getCollapsedLineCount() { return collapsed ? getLineCount() : childCollapsedLineCount; } /** * Returns the "deepest" fold containing the specified offset. It is * assumed that it's already been verified that offs is indeed * contained in this fold. * * @param offs The offset. * @return The fold, or null if no child fold also contains * the offset. * @see FoldManager#getDeepestFoldContaining(int) */ Fold getDeepestFoldContaining(int offs) { Fold deepestFold = this; for (int i=0; ioffs is * indeed contained in this fold. * * @param offs The offset. * @return The fold, or null if no open fold contains the * offset. * @see FoldManager#getDeepestOpenFoldContaining(int) */ Fold getDeepestOpenFoldContaining(int offs) { Fold deepestFold = this; for (int i=0; i * * The value returned by this method will automatically update as the * text area's contents are modified, to track the ending line of the * code block. * * @return The end line of this code block. * @see #getEndOffset() * @see #getStartLine() */ public int getEndLine() { int endOffs = getEndOffset(); if (lastEndOffs==endOffs) { return cachedEndLine; } lastEndOffs = endOffs; Element root = textArea.getDocument().getDefaultRootElement(); return cachedEndLine = root.getElementIndex(endOffs); } /** * Returns the end offset of this fold. For example, in languages such as * C and Java, this might be the offset of the closing curly brace of a * code block.

* * The value returned by this method will automatically update as the * text area's contents are modified, to track the ending offset of the * code block. * * @return The end offset of this code block, or {@link Integer#MAX_VALUE} * if this fold region isn't closed properly. The latter causes * this fold to collapsed all lines through the end of the file. * @see #getEndLine() * @see #getStartOffset() */ public int getEndOffset() { return endOffs!=null ? endOffs.getOffset() : Integer.MAX_VALUE; } /** * Returns the type of fold this is. This will be one of the values in * {@link FoldType}, or a user-defined value. * * @return The type of fold this is. */ public int getFoldType() { return type; } /** * Returns whether this fold has any child folds. * * @return Whether this fold has any children. * @see #getChildCount() */ public boolean getHasChildFolds() { return getChildCount()>0; } /** * Returns the last child fold. * * @return The last child fold, or null if this fold does not * have any children. * @see #getChild(int) * @see #getHasChildFolds() */ public Fold getLastChild() { int childCount = getChildCount(); return childCount==0 ? null : getChild(childCount-1); } /** * Returns the number of lines that are hidden when this fold is * collapsed. * * @return The number of lines hidden. * @see #getStartLine() * @see #getEndLine() */ public int getLineCount() { return getEndLine() - getStartLine(); } /** * Returns the parent fold of this one. * * @return The parent fold, or null if this is a top-level * fold. */ public Fold getParent() { return parent; } /** * Returns the starting line of this fold region. This is the only line * in the fold region that is not hidden when a fold is collapsed.

* * The value returned by this method will automatically update as the * text area's contents are modified, to track the starting line of the * code block. * * @return The starting line of the code block. * @see #getEndLine() * @see #getStartOffset() */ public int getStartLine() { int startOffs = getStartOffset(); if (lastStartOffs==startOffs) { return cachedStartLine; } lastStartOffs = startOffs; Element root = textArea.getDocument().getDefaultRootElement(); return cachedStartLine = root.getElementIndex(startOffs); } /** * Returns the starting offset of this fold region. For example, for * languages such as C and Java, this would be the offset of the opening * curly brace of a code block.

* * The value returned by this method will automatically update as the * text area's contents are modified, to track the starting offset of the * code block. * * @return The start offset of this fold. * @see #getStartLine() * @see #getEndOffset() */ public int getStartOffset() { return startOffs.getOffset(); } @Override public int hashCode() { return getStartLine(); } /** * Returns whether this fold is collapsed. * * @return Whether this fold is collapsed. * @see #setCollapsed(boolean) * @see #toggleCollapsedState() */ public boolean isCollapsed() { return collapsed; } /** * Returns whether this fold is entirely on a single line. In general, * a {@link FoldParser} should not remember fold regions all on a single * line, since there's really nothing to fold. * * @return Whether this fold is on a single line. * @see #removeFromParent() */ public boolean isOnSingleLine() { return getStartLine()==getEndLine(); } /** * Removes this fold from its parent. This should only be called by * {@link FoldParser} implementations if they determine that a fold is all * on a single line (and thus shouldn't be remembered) after creating it. * * @return Whether this fold had a parent to be removed from. * @see #isOnSingleLine() */ public boolean removeFromParent() { if (parent!=null) { parent.removeMostRecentChild(); parent = null; return true; } return false; } private void removeMostRecentChild() { children.remove(children.size()-1); } /** * Sets whether this Fold is collapsed. Calling this method * will update both the text area and all Gutter components. * * @param collapsed Whether this fold should be collapsed. * @see #isCollapsed() * @see #toggleCollapsedState() */ public void setCollapsed(boolean collapsed) { if (collapsed!=this.collapsed) { // Change our fold state and cached info about folded line count. int lineCount = getLineCount(); int linesToCollapse = lineCount - childCollapsedLineCount; if (!collapsed) { // If we're expanding linesToCollapse = -linesToCollapse; } //System.out.println("Hiding lines: " + linesToCollapse + // " (" + lineCount + ", " + linesToCollapse + ")"); this.collapsed = collapsed; if (parent!=null) { parent.updateChildCollapsedLineCount(linesToCollapse); } // If an end point of the selection is being hidden, move the caret // "out" of the fold. if (collapsed) { int dot = textArea.getSelectionStart(); // Forgive variable name Element root = textArea.getDocument().getDefaultRootElement(); int dotLine = root.getElementIndex(dot); boolean updateCaret = containsLine(dotLine); if (!updateCaret) { int mark = textArea.getSelectionEnd(); if (mark!=dot) { int markLine = root.getElementIndex(mark); updateCaret = containsLine(markLine); } } if (updateCaret) { dot = root.getElement(getStartLine()).getEndOffset() - 1; textArea.setCaretPosition(dot); } } textArea.foldToggled(this); } } /** * Sets the ending offset of this fold, such as the closing curly brace * of a code block in C or Java. {@link FoldParser} implementations should * call this on an existing Fold upon finding its end. If * this method isn't called, then this Fold is considered to * have no end, i.e., it will collapse everything to the end of the file. * * @param endOffs The end offset of this fold. * @throws BadLocationException If endOffs is not a valid * location in the text area. */ public void setEndOffset(int endOffs) throws BadLocationException { this.endOffs = textArea.getDocument().createPosition(endOffs); } /** * Toggles the collapsed state of this fold. * * @see #setCollapsed(boolean) */ public void toggleCollapsedState() { setCollapsed(!collapsed); } private void updateChildCollapsedLineCount(int count) { childCollapsedLineCount += count; //if (childCollapsedLineCount>getLineCount()) { // Thread.dumpStack(); //} if (!collapsed && parent!=null) { parent.updateChildCollapsedLineCount(count); } } /** * Overridden for debugging purposes. * * @return A string representation of this Fold. */ @Override public String toString() { return "[Fold: " + "startOffs=" + getStartOffset() + ", endOffs=" + getEndOffset() + ", collapsed=" + collapsed + "]"; } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/folding/FoldCollapser.java000066400000000000000000000045271257417003700316470ustar00rootroot00000000000000/* * 10/23/2011 * * FoldCollapser.java - Goes through an RSTA instance and collapses folds of * specific types, such as comments. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.folding; import java.util.ArrayList; import java.util.List; /** * Collapses folds based on their type. You can create an instance of this * class to collapse all comment blocks when opening a new file, for example. * * @author Robert Futrell * @version 1.0 */ public class FoldCollapser { private List typesToCollapse; /** * Creates an instance that collapses all comment blocks. */ public FoldCollapser() { this(FoldType.COMMENT); } /** * Creates an instance that collapses all blocks of the specified * type. * * @param typeToCollapse The type to collapse. * @see FoldType */ public FoldCollapser(int typeToCollapse) { typesToCollapse = new ArrayList(3); addTypeToCollapse(typeToCollapse); } /** * Adds a type of fold to collapse. * * @param typeToCollapse The type of fold to collapse. */ public void addTypeToCollapse(int typeToCollapse) { typesToCollapse.add(Integer.valueOf(typeToCollapse)); } /** * Collapses any relevant folds known by the fold manager. * * @param fm The fold manager. */ public void collapseFolds(FoldManager fm) { for (int i=0; i folds; private boolean codeFoldingEnabled; private PropertyChangeSupport support; private Listener l; /** * Property fired when folds have been updated. */ public static final String PROPERTY_FOLDS_UPDATED = "FoldsUpdated"; /** * Constructor. * * @param textArea The text area whose folds we are managing. */ public FoldManager(RSyntaxTextArea textArea) { this.textArea = textArea; support = new PropertyChangeSupport(this); l = new Listener(); textArea.getDocument().addDocumentListener(l); textArea.addPropertyChangeListener(RSyntaxTextArea.SYNTAX_STYLE_PROPERTY, l); textArea.addPropertyChangeListener("document", l); folds = new ArrayList(); updateFoldParser(); } /** * Adds a property change listener to this fold manager. * * @param l The new listener. * @see #removePropertyChangeListener(PropertyChangeListener) */ public void addPropertyChangeListener(PropertyChangeListener l) { support.addPropertyChangeListener(l); } /** * Removes all folds. */ public void clear() { folds.clear(); } /** * Ensures that the specified offset is not hidden in a collapsed fold. * Any folds containing this offset that are collapsed will be expanded. * * @param offs The offset. * @return Whether any folds had to be opened. * @see #getDeepestFoldContaining(int) */ public boolean ensureOffsetNotInClosedFold(int offs) { boolean foldsOpened = false; Fold fold = getDeepestFoldContaining(offs); while (fold!=null) { if (fold.isCollapsed()) { fold.setCollapsed(false); foldsOpened = true; } fold = fold.getParent(); } return foldsOpened; } /** * Returns the "deepest" nested fold containing the specified offset. * * @param offs The offset. * @return The deepest fold containing the offset, or null if * no fold contains the offset. */ public Fold getDeepestFoldContaining(int offs) { Fold deepestFold = null; if (offs>-1) { for (int i=0; inull if no open fold contains the * offset. */ public Fold getDeepestOpenFoldContaining(int offs) { Fold deepestFold = null; if (offs>-1) { for (int i=0; inull if the line is not the start * of a fold region. * @see #isFoldStartLine(int) */ public Fold getFoldForLine(int line) { return getFoldForLineImpl(null, folds, line); } private Fold getFoldForLineImpl(Fold parent, List folds, int line) { int low = 0; int high = folds.size() - 1; while (low <= high) { int mid = (low + high) >> 1; Fold midFold = folds.get(mid); int startLine = midFold.getStartLine(); if (line==startLine) { return midFold; } else if (line=endLine) { low = mid + 1; } else { // line>startLine && line<=endLine List children = midFold.getChildren(); return children!=null ? getFoldForLineImpl(midFold, children, line) : null; } } } return null; // No fold for this line } /** * Returns the total number of hidden (folded) lines. * * @return The total number of hidden (folded) lines. * @see #getHiddenLineCountAbove(int) */ public int getHiddenLineCount() { int count = 0; for (Fold fold : folds) { count += fold.getCollapsedLineCount(); } return count; } /** * Returns the number of lines "hidden" by collapsed folds above the * specified line. * * @param line The line. This is the line number for a logical line. * For the line number of a physical line (i.e. visible, not folded), * use getHiddenLineCountAbove(int, true). * @return The number of lines hidden in folds above line. * @see #getHiddenLineCountAbove(int, boolean) */ public int getHiddenLineCountAbove(int line) { return getHiddenLineCountAbove(line, false); } /** * Returns the number of lines "hidden" by collapsed folds above the * specified line. * * @param line The line. * @param physical Whether line is the number of a physical * line (i.e. visible, not code-folded), or a logical one (i.e. any * line from the model). If line was determined by a * raw line calculation (i.e. (visibleTopY / lineHeight)), * this value should be true. It should be * false when it was calculated from an offset in the * document (for example). * @return The number of lines hidden in folds above line. */ public int getHiddenLineCountAbove(int line, boolean physical) { int count = 0; for (Fold fold : folds) { int comp = physical ? line+count : line; if (fold.getStartLine()>=comp) { break; } count += getHiddenLineCountAboveImpl(fold, comp, physical); } return count; } /** * Returns the number of lines "hidden" by collapsed folds above the * specified line. * * @param fold The current fold in the recursive algorithm. It and its * children are examined. * @param line The line. * @param physical Whether line is the number of a physical * line (i.e. visible, not code-folded), or a logical one (i.e. any * line from the model). If line was determined by a * raw line calculation (i.e. (visibleTopY / lineHeight)), * this value should be true. It should be * false when it was calculated from an offset in the * document (for example). * @return The number of lines hidden in folds that are descendants of * fold, or fold itself, above * line. */ private int getHiddenLineCountAboveImpl(Fold fold, int line, boolean physical) { int count = 0; if (fold.getEndLine()=comp) { break; } count += getHiddenLineCountAboveImpl(child, comp, physical); } } return count; } /** * Returns the last visible line in the text area, taking into account * folds. * * @return The last visible line. */ public int getLastVisibleLine() { int lastLine = textArea.getLineCount() - 1; if (isCodeFoldingSupportedAndEnabled()) { int foldCount = getFoldCount(); if (foldCount>0) { Fold lastFold = getFold(foldCount-1); if (lastFold.containsLine(lastLine)) { if (lastFold.isCollapsed()) { lastLine = lastFold.getStartLine(); } else { // Child fold may end on the same line as parent while (lastFold.getHasChildFolds()) { lastFold = lastFold.getLastChild(); if (lastFold.containsLine(lastLine)) { if (lastFold.isCollapsed()) { lastLine = lastFold.getStartLine(); break; } } else { // Higher up break; } } } } } } return lastLine; } public int getVisibleLineAbove(int line) { if (line<=0 || line>=textArea.getLineCount()) { return -1; } do { line--; } while (line>=0 && isLineHidden(line)); return line; } public int getVisibleLineBelow(int line) { int lineCount = textArea.getLineCount(); if (line<0 || line>=lineCount-1) { return -1; } do { line++; } while (line> 1; // Fold midVal = (Fold)allFolds.get(mid); // if (midVal.containsLine(line)) { // return mid; // } // if (line<=midVal.getStartLine()) { // high = mid - 1; // } // else { // line > midVal.getEndLine() // low = mid + 1; // } // } // // return -(low + 1); // key not found // // } /** * Returns whether code folding is enabled. Note that only certain * languages support code folding; those that do not will ignore this * property. * * @return Whether code folding is enabled. * @see #setCodeFoldingEnabled(boolean) */ public boolean isCodeFoldingEnabled() { return codeFoldingEnabled; } /** * Returns true if and only if code folding is enabled for * this text area, AND folding is supported for the language it is editing. * Whether or not folding is supported for a language depends on whether * a fold parser is registered for that language with the * FoldParserManager. * * @return Whether folding is supported and enabled for this text area. * @see FoldParserManager */ public boolean isCodeFoldingSupportedAndEnabled() { return codeFoldingEnabled && parser!=null; } /** * Returns whether the specified line contains the start of a fold region. * * @param line The line. * @return Whether the line contains the start of a fold region. * @see #getFoldForLine(int) */ public boolean isFoldStartLine(int line) { return getFoldForLine(line)!=null; } /** * Returns whether a line is hidden in a collapsed fold. * * @param line The line to check. * @return Whether the line is hidden in a collapsed fold. */ public boolean isLineHidden(int line) { for (Fold fold : folds) { if (fold.containsLine(line)) { if (fold.isCollapsed()) { return true; } else { return isLineHiddenImpl(fold, line); } } } return false; } private boolean isLineHiddenImpl(Fold parent, int line) { for (int i=0; i oldFolds) { int previousLoc = Collections.binarySearch(oldFolds, newFold); //System.out.println(newFold + " => " + previousLoc); if (previousLoc>=0) { Fold prevFold = oldFolds.get(previousLoc); newFold.setCollapsed(prevFold.isCollapsed()); } else { //previousLoc = -(insertion point) - 1; int insertionPoint = -(previousLoc + 1); if (insertionPoint>0) { Fold possibleParentFold = oldFolds.get(insertionPoint-1); if (possibleParentFold.containsOffset( newFold.getStartOffset())) { List children = possibleParentFold.getChildren(); if (children!=null) { keepFoldState(newFold, children); } } } } } /** * Called when new folds come in from the fold parser. Checks whether any * folds from the "old" fold list are still in the "new" list; if so, their * collapsed state is preserved. * * @param newFolds The "new" folds after an edit occurred. This cannot be * null. * @param oldFolds The previous folds before the edit occurred. */ private void keepFoldStates(List newFolds, List oldFolds) { for (Fold newFold : newFolds) { keepFoldState(newFold, folds); List newChildFolds = newFold.getChildren(); if (newChildFolds!=null) { keepFoldStates(newChildFolds, oldFolds); } } } /** * Removes a property change listener from this fold manager. * * @param l The listener to remove. * @see #addPropertyChangeListener(PropertyChangeListener) */ public void removePropertyChangeListener(PropertyChangeListener l) { support.removePropertyChangeListener(l); } /** * Forces an immediate reparsing for folds, if folding is enabled. This * usually does not need to be called by the programmer, since fold * parsing is done automatically by RSTA. */ public void reparse() { if (codeFoldingEnabled && parser!=null) { // Re-calculate folds. Keep the fold state of folds that are // still around. List newFolds = parser.getFolds(textArea); if (newFolds==null) { newFolds = Collections.emptyList(); } else { keepFoldStates(newFolds, folds); } folds = newFolds; // Let folks (gutter, etc.) know that folds have been updated. support.firePropertyChange(PROPERTY_FOLDS_UPDATED, null, folds); textArea.repaint(); } else { folds.clear(); } } /** * Sets whether code folding is enabled. Note that only certain * languages will support code folding out of the box. Those languages * which do not support folding will ignore this property. * * @param enabled Whether code folding should be enabled. * @see #isCodeFoldingEnabled() */ public void setCodeFoldingEnabled(boolean enabled) { if (enabled!=codeFoldingEnabled) { codeFoldingEnabled = enabled; if (tempParser!=null) { textArea.removeParser(tempParser); } if (enabled) { tempParser = new AbstractParser() { public ParseResult parse(RSyntaxDocument doc, String style) { reparse(); return new DefaultParseResult(this); } }; textArea.addParser(tempParser); support.firePropertyChange(PROPERTY_FOLDS_UPDATED, null, null); //reparse(); } else { folds = Collections.emptyList(); textArea.repaint(); support.firePropertyChange(PROPERTY_FOLDS_UPDATED, null, null); } } } private Parser tempParser; /** * Sets the folds for this fold manager. * * @param folds The new folds. This should not be null. */ public void setFolds(List folds) { this.folds = folds; } /** * Updates the fold parser to be the one appropriate for the language * currently being highlighted. */ private void updateFoldParser() { parser = FoldParserManager.get().getFoldParser( textArea.getSyntaxEditingStyle()); } /** * Listens for events in the text editor. */ private class Listener implements DocumentListener, PropertyChangeListener { public void changedUpdate(DocumentEvent e) { } public void insertUpdate(DocumentEvent e) { // Adding text containing a newline to the visible line of a folded // Fold causes that Fold to unfold. Check only start offset of // insertion since that's the line that was "modified". int startOffs = e.getOffset(); int endOffs = startOffs + e.getLength(); Document doc = e.getDocument(); Element root = doc.getDefaultRootElement(); int startLine = root.getElementIndex(startOffs); int endLine = root.getElementIndex(endOffs); if (startLine!=endLine) { // Inserted text covering > 1 line... Fold fold = getFoldForLine(startLine); if (fold!=null && fold.isCollapsed()) { fold.toggleCollapsedState(); } } } public void propertyChange(PropertyChangeEvent e) { String name = e.getPropertyName(); if (RSyntaxTextArea.SYNTAX_STYLE_PROPERTY.equals(name)) { // Syntax style changed in editor. updateFoldParser(); reparse(); // Even if no fold parser change, highlighting did } else if ("document".equals(name)) { // The document switched out from under us RDocument old = (RDocument)e.getOldValue(); if (old != null) { old.removeDocumentListener(this); } RDocument newDoc = (RDocument)e.getNewValue(); if (newDoc != null) { newDoc.addDocumentListener(this); } reparse(); } } public void removeUpdate(DocumentEvent e) { // Removing text from the visible line of a folded Fold causes that // Fold to unfold. We only need to check the removal offset since // that's the new caret position. int offs = e.getOffset(); try { int lastLineModified = textArea.getLineOfOffset(offs); //System.out.println(">>> " + lastLineModified); Fold fold = getFoldForLine(lastLineModified); //System.out.println("&&& " + fold); if (fold!=null && fold.isCollapsed()) { fold.toggleCollapsedState(); } } catch (BadLocationException ble) { ble.printStackTrace(); // Never happens } } } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/folding/FoldParser.java000066400000000000000000000022531257417003700311510ustar00rootroot00000000000000/* * 10/08/2011 * * FoldParser.java - Locates folds in an RSyntaxTextArea instance. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.folding; import java.util.List; import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; /** * Locates folds in a document. If you are implementing a language that has * sections of source code that can be logically "folded," you can create an * instance of this interface that locates those regions and represents them * as {@link Fold}s. RSyntaxTextArea knows how to take it from * there and implement code folding in the editor. * * @author Robert Futrell * @version 1.0 * @see CurlyFoldParser * @see XmlFoldParser */ public interface FoldParser { /** * Returns a list of all folds in the text area. * * @param textArea The text area whose contents should be analyzed. * @return The list of folds. If this method returns null, * it is treated as if no folds were found. */ public List getFolds(RSyntaxTextArea textArea); }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/folding/FoldParserManager.java000066400000000000000000000101561257417003700324450ustar00rootroot00000000000000/* * 10/08/2011 * * FoldParserManager.java - Used by RSTA to determine what fold parser to use * for each language it supports. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.folding; import java.util.HashMap; import java.util.Map; import org.fife.ui.rsyntaxtextarea.SyntaxConstants; /** * Manages fold parsers. Instances of RSyntaxTextArea call into * this class to retrieve fold parsers for whatever language they're editing. * Folks implementing custom languages can add a {@link FoldParser} * implementation for their language to this manager and it will be used by * RSTA. * * @author Robert Futrell * @version 1.0 */ public class FoldParserManager implements SyntaxConstants { /** * Map from syntax styles to fold parsers. */ private Map foldParserMap; private static final FoldParserManager INSTANCE = new FoldParserManager(); /** * Private constructor to prevent instantiation. */ private FoldParserManager() { foldParserMap = createFoldParserMap(); } /** * Adds a mapping from a syntax style to a fold parser. The parser * specified will be shared among all RSTA instances editing that language, * so it should be stateless (which should not be difficult for a fold * parser). You can also override the fold parser for built-in languages, * such as SYNTAX_STYLE_JAVA, with your own parser * implementations. * * @param syntaxStyle The syntax style. * @param parser The parser. * @see SyntaxConstants */ public void addFoldParserMapping(String syntaxStyle, FoldParser parser) { foldParserMap.put(syntaxStyle, parser); } /** * Creates the syntax style-to-fold parser mapping for built-in languages. * * @return The style-to-fold parser mapping. */ private Map createFoldParserMap() { Map map = new HashMap(); map.put(SYNTAX_STYLE_C, new CurlyFoldParser()); map.put(SYNTAX_STYLE_CPLUSPLUS, new CurlyFoldParser()); map.put(SYNTAX_STYLE_CSHARP, new CurlyFoldParser()); map.put(SYNTAX_STYLE_CLOJURE, new LispFoldParser()); map.put(SYNTAX_STYLE_CSS, new CurlyFoldParser()); map.put(SYNTAX_STYLE_D, new CurlyFoldParser()); map.put(SYNTAX_STYLE_DART, new CurlyFoldParser()); map.put(SYNTAX_STYLE_GROOVY, new CurlyFoldParser()); map.put(SYNTAX_STYLE_HTACCESS, new XmlFoldParser()); map.put(SYNTAX_STYLE_HTML, new HtmlFoldParser(HtmlFoldParser.LANGUAGE_HTML)); map.put(SYNTAX_STYLE_JAVA, new CurlyFoldParser(true, true)); map.put(SYNTAX_STYLE_JAVASCRIPT, new CurlyFoldParser()); map.put(SYNTAX_STYLE_JSHINTRC, new JsonFoldParser()); map.put(SYNTAX_STYLE_JSON, new JsonFoldParser()); map.put(SYNTAX_STYLE_JSP, new HtmlFoldParser(HtmlFoldParser.LANGUAGE_JSP)); map.put(SYNTAX_STYLE_LATEX, new LatexFoldParser()); map.put(SYNTAX_STYLE_LESS, new CurlyFoldParser()); map.put(SYNTAX_STYLE_LISP, new LispFoldParser()); map.put(SYNTAX_STYLE_MXML, new XmlFoldParser()); map.put(SYNTAX_STYLE_NSIS, new NsisFoldParser()); map.put(SYNTAX_STYLE_PERL, new CurlyFoldParser()); map.put(SYNTAX_STYLE_PHP, new HtmlFoldParser(HtmlFoldParser.LANGUAGE_PHP)); map.put(SYNTAX_STYLE_SCALA, new CurlyFoldParser()); map.put(SYNTAX_STYLE_XML, new XmlFoldParser()); return map; } /** * Returns the singleton instance of this class. * * @return The singleton instance. */ public static FoldParserManager get() { return INSTANCE; } /** * Returns a fold parser to use for an editor highlighting code of a * specific language. * * @param syntaxStyle A value from {@link SyntaxConstants}, such as * SYNTAX_STYLE_JAVA. * @return A fold parser to use, or null if none is registered * for the language. */ public FoldParser getFoldParser(String syntaxStyle) { return foldParserMap.get(syntaxStyle); } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/folding/FoldType.java000066400000000000000000000041261257417003700306370ustar00rootroot00000000000000/* * 10/08/2011 * * FoldType.java - Types of folds found in many programming languages. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.folding; /** * Constants representing the "type" of a folded region. Implementations of * {@link FoldParser} can also define their own folded region types, provided * they give them values of at least {@link #FOLD_TYPE_USER_DEFINED_MIN}. This * allows you to identify and auto-fold specific regions of source code when * opening files; for example, a Java editor could identify all import * statements in a file as a foldable region, and give it a user-defined value * for fold type. Then, the UI could provide a means for the user to specify * that they always want the import region folded when opening a new file.

* * The majority of the time, however, code editors won't need to be that fancy, * and can simply use the standard CODE and COMMENT * fold types. * * @author Robert Futrell * @version 1.0 * @see Fold */ public interface FoldType { /** * Denotes a Fold as being a region of code. */ public static final int CODE = 0; /** * Denotes a Fold as being a multi-line comment. */ public static final int COMMENT = 1; /** * Denotes a Fold as being a section of import statements * (Java), include statements (C), etc. */ public static final int IMPORTS = 2; /** * Users building advanced editors such as IDE's, that want to allow their * users to auto-expand/collapse foldable regions of a specific type other * than comments, should define their custom fold types using values * FOLD_TYPE_USER_DEFINED_MIN + n. That way, if * new default fold types are added to this interface in the future, your * code won't suddenly break when upgrading to a new version of RSTA. */ public static final int FOLD_TYPE_USER_DEFINED_MIN = 1000; }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/folding/HtmlFoldParser.java000066400000000000000000000271661257417003700320100ustar00rootroot00000000000000/* * 09/30/2012 * * HtmlFoldParser.java - Fold parser for HTML 5 and PHP. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.folding; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.Stack; import javax.swing.text.BadLocationException; import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; import org.fife.ui.rsyntaxtextarea.Token; /** * Fold parser for HTML 5, PHP and JSP. For HTML, we currently don't fold * everything possible, just the "big" stuff. For PHP, we only fold * the "big" HTML stuff and PHP regions, not code blocks in the actual PHP. * For JSP we only fold the "big" HTML stuff and JSP blocks, not anything in * the actual Java code. * * @author Robert Futrell * @version 1.0 */ public class HtmlFoldParser implements FoldParser { /** * Constant denoting we're folding HTML. */ public static final int LANGUAGE_HTML = -1; /** * Constant denoting we're folding PHP. */ public static final int LANGUAGE_PHP = 0; /** * Constant denoting we're folding JSP. */ public static final int LANGUAGE_JSP = 1; /** * The language we're folding. */ private final int language; /** * The set of tags we allow to be folded. These are tags that must have * explicit close tags in both HTML 4 and HTML 5. */ private static final Set FOLDABLE_TAGS; private static final char[] MARKUP_CLOSING_TAG_START = "".toCharArray(); private static final char[] MLC_START = "".toCharArray(); private static final char[] PHP_START = "".toCharArray(); // Scriptlets, declarations, and expressions all start the same way. private static final char[] JSP_START = "<%".toCharArray(); private static final char[] JSP_END = "%>".toCharArray(); private static final char[][] LANG_START = { PHP_START, JSP_START }; private static final char[][] LANG_END = { PHP_END, JSP_END }; private static final char[] JSP_COMMENT_START = "<%--".toCharArray(); private static final char[] JSP_COMMENT_END = "--%>".toCharArray(); static { FOLDABLE_TAGS = new HashSet(); FOLDABLE_TAGS.add("body"); FOLDABLE_TAGS.add("canvas"); FOLDABLE_TAGS.add("div"); FOLDABLE_TAGS.add("form"); FOLDABLE_TAGS.add("head"); FOLDABLE_TAGS.add("html"); FOLDABLE_TAGS.add("ol"); FOLDABLE_TAGS.add("pre"); FOLDABLE_TAGS.add("script"); FOLDABLE_TAGS.add("span"); FOLDABLE_TAGS.add("style"); FOLDABLE_TAGS.add("table"); FOLDABLE_TAGS.add("tfoot"); FOLDABLE_TAGS.add("thead"); FOLDABLE_TAGS.add("tr"); FOLDABLE_TAGS.add("td"); FOLDABLE_TAGS.add("ul"); } /** * Constructor. * * @param language The language to fold, such as {@link #LANGUAGE_PHP}. */ public HtmlFoldParser(int language) { if (languageLANGUAGE_JSP) { throw new IllegalArgumentException("Invalid language: " + language); } this.language = language; } /** * {@inheritDoc} */ public List getFolds(RSyntaxTextArea textArea) { List folds = new ArrayList(); Stack tagNameStack = new Stack(); boolean inSublanguage = false; Fold currentFold = null; int lineCount = textArea.getLineCount(); boolean inMLC = false; boolean inJSMLC = false; TagCloseInfo tci = new TagCloseInfo(); try { for (int line=0; line=0 && t.getType()==Token.SEPARATOR) { // or %> else if (t.startsWith(LANG_END[language])) { int phpEnd = t.getEndOffset() - 1; currentFold.setEndOffset(phpEnd); Fold parentFold = currentFold.getParent(); // Don't add fold markers for single-line blocks if (currentFold.isOnSingleLine()) { removeFold(currentFold, folds); } currentFold = parentFold; inSublanguage = false; t = t.getNextToken(); continue; } } if (!inSublanguage) { if (t.getType()==Token.COMMENT_MULTILINE) { // Continuing an MLC from a previous line if (inMLC) { // Found the end of the MLC starting on a previous line... if (t.endsWith(MLC_END)) { int mlcEnd = t.getEndOffset() - 1; currentFold.setEndOffset(mlcEnd); Fold parentFold = currentFold.getParent(); // Don't add fold markers for single-line blocks if (currentFold.isOnSingleLine()) { removeFold(currentFold, folds); } currentFold = parentFold; inMLC = false; } // Otherwise, this MLC is continuing on to yet // another line. } // Continuing a JS MLC from a previous line else if (inJSMLC) { // Found the end of the MLC starting on a previous line... if (t.endsWith(JSP_COMMENT_END)) { int mlcEnd = t.getEndOffset() - 1; currentFold.setEndOffset(mlcEnd); Fold parentFold = currentFold.getParent(); // Don't add fold markers for single-line blocks if (currentFold.isOnSingleLine()) { removeFold(currentFold, folds); } currentFold = parentFold; inJSMLC = false; } // Otherwise, this MLC is continuing on to yet // another line. } // Starting a MLC that ends on a later line... else if (t.startsWith(MLC_START) && !t.endsWith(MLC_END)) { if (currentFold==null) { currentFold = new Fold(FoldType.COMMENT, textArea, t.getOffset()); folds.add(currentFold); } else { currentFold = currentFold.createChild(FoldType.COMMENT, t.getOffset()); } inMLC = true; } // Starting a JSP comment that ends on a later line... else if (language==LANGUAGE_JSP && t.startsWith(JSP_COMMENT_START) && !t.endsWith(JSP_COMMENT_END)) { if (currentFold==null) { currentFold = new Fold(FoldType.COMMENT, textArea, t.getOffset()); folds.add(currentFold); } else { currentFold = currentFold.createChild(FoldType.COMMENT, t.getOffset()); } inJSMLC = true; } } // If we're starting a new tag... else if (t.isSingleChar(Token.MARKUP_TAG_DELIMITER, '<')) { Token tagStartToken = t; Token tagNameToken = t.getNextToken(); if (isFoldableTag(tagNameToken)) { int newLine = getTagCloseInfo(tagNameToken, textArea, line, tci); if (tci.line==-1) { // EOF reached before end of tag return folds; } // We have found either ">" or "/>" with tci. System.out.println(line + ", "+ tci + ", " + t); Token tagCloseToken = tci.closeToken; if (tagCloseToken.isSingleChar(Token.MARKUP_TAG_DELIMITER, '>')) { if (currentFold==null) { currentFold = new Fold(FoldType.CODE, textArea, tagStartToken.getOffset()); folds.add(currentFold); } else { currentFold = currentFold.createChild(FoldType.CODE, tagStartToken.getOffset()); } tagNameStack.push(tagNameToken.getLexeme()); } t = tagCloseToken; // Continue parsing after tag line = newLine; } } // If we've found a closing tag (e.g. ""). else if (t.is(Token.MARKUP_TAG_DELIMITER, MARKUP_CLOSING_TAG_START)) { if (currentFold!=null) { Token tagNameToken = t.getNextToken(); if (isFoldableTag(tagNameToken) && isEndOfLastFold(tagNameStack, tagNameToken)) { tagNameStack.pop(); currentFold.setEndOffset(t.getOffset()); Fold parentFold = currentFold.getParent(); // Don't add fold markers for single-line blocks if (currentFold.isOnSingleLine()) { removeFold(currentFold, folds); } currentFold = parentFold; t = tagNameToken; } } } } t = t.getNextToken(); } } } catch (BadLocationException ble) { // Should never happen ble.printStackTrace(); } return folds; } /** * Grabs the token representing the closing of a tag (i.e. * ">" or "/>"). This should only be * called after a tag name has been parsed, to ensure the "closing" of * other tags is not identified. * * @param tagNameToken The token denoting the name of the tag. * @param textArea The text area whose contents are being parsed. * @param line The line we're currently on. * @param info On return, information about the closing of the tag is * returned in this object. * @return The line number of the closing tag token. */ private int getTagCloseInfo(Token tagNameToken, RSyntaxTextArea textArea, int line, TagCloseInfo info) { info.reset(); Token t = tagNameToken.getNextToken(); do { while (t!=null && t.getType()!=Token.MARKUP_TAG_DELIMITER) { t = t.getNextToken(); } if (t!=null) { info.closeToken = t; info.line = line; break; } } while (++line</...>") with a * specific name is the closing tag of our current fold region. * * @param tagNameStack The stack of fold regions. * @param tagNameToken The tag name of the most recently parsed closing * tag. * @return Whether it's the end of the current fold region. */ private static final boolean isEndOfLastFold(Stack tagNameStack, Token tagNameToken) { if (tagNameToken!=null && !tagNameStack.isEmpty()) { return tagNameToken.getLexeme().equalsIgnoreCase(tagNameStack.peek()); } return false; } /** * Returns whether a tag is one we allow as a foldable region. * * @param tagNameToken The tag's name token. This may be null. * @return Whether this tag can be a foldable region. */ private static final boolean isFoldableTag(Token tagNameToken) { return tagNameToken!=null && FOLDABLE_TAGS.contains(tagNameToken.getLexeme().toLowerCase()); } /** * If this fold has a parent fold, this method removes it from its parent. * Otherwise, it's assumed to be the most recent (top-level) fold in the * folds list, and is removed from that. * * @param fold The fold to remove. * @param folds The list of top-level folds. */ private static final void removeFold(Fold fold, List folds) { if (!fold.removeFromParent()) { folds.remove(folds.size()-1); } } /** * A simple wrapper for the token denoting the closing of a tag (i.e. * ">" or "/>"). */ private static class TagCloseInfo { private Token closeToken; private int line; public void reset() { closeToken = null; line = -1; } @Override public String toString() { return "[TagCloseInfo: " + "closeToken=" + closeToken + ", line=" + line + "]"; } } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/folding/JsonFoldParser.java000066400000000000000000000104711257417003700320040ustar00rootroot00000000000000/* * 12/23/2012 * * JsonFoldParser.java - Fold parser for JSON. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.folding; import java.util.ArrayList; import java.util.List; import java.util.Stack; import javax.swing.text.BadLocationException; import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; import org.fife.ui.rsyntaxtextarea.Token; import org.fife.ui.rsyntaxtextarea.TokenTypes; /** * The fold parser for JSON. Objects ("{ ... }") and arrays * ("[ ... ]") that span multiple lines are considered fold * regions. * * @author Robert Futrell * @version 1.0 */ public class JsonFoldParser implements FoldParser { private static final Object OBJECT_BLOCK = new Object(); private static final Object ARRAY_BLOCK = new Object(); /** * {@inheritDoc} */ public List getFolds(RSyntaxTextArea textArea) { Stack blocks = new Stack(); List folds = new ArrayList(); Fold currentFold = null; int lineCount = textArea.getLineCount(); try { for (int line=0; linetrue. Otherwise, return false. * * @param stack The stack. * @param value The value to check for. * @return Whether the value was found on top of the stack. */ private static final boolean popOffTop(Stack stack, Object value) { if (stack.size()>0 && stack.peek()==value) { stack.pop(); return true; } return false; } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/folding/LatexFoldParser.java000066400000000000000000000054511257417003700321520ustar00rootroot00000000000000/* * 04/24/2012 * * LatexFoldParser.java - Fold parser for LaTeX. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.folding; import java.util.ArrayList; import java.util.List; import java.util.Stack; import javax.swing.text.BadLocationException; import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; import org.fife.ui.rsyntaxtextarea.Token; /** * A fold parser for LaTeX documents. This is likely incomplete and/or not * quite right; feedback is appreciated. * * @author Robert Futrell * @version 1.0 */ public class LatexFoldParser implements FoldParser { private static final char[] BEGIN = "\\begin".toCharArray(); private static final char[] END = "\\end".toCharArray(); /** * {@inheritDoc} */ public List getFolds(RSyntaxTextArea textArea) { List folds = new ArrayList(); Stack expectedStack = new Stack(); Fold currentFold = null; int lineCount = textArea.getLineCount(); try { for (int line=0; line * * Note that this class may impose somewhat of a performance penalty on large * source files, since it re-parses the entire document each time folds are * reevaluated. * * @author Robert Futrell * @version 1.0 */ public class NsisFoldParser implements FoldParser { private static final char[] KEYWORD_FUNCTION = "Function".toCharArray(); private static final char[] KEYWORD_FUNCTION_END = "FunctionEnd".toCharArray(); private static final char[] KEYWORD_SECTION = "Section".toCharArray(); private static final char[] KEYWORD_SECTION_END = "SectionEnd".toCharArray(); protected static final char[] C_MLC_END = "*/".toCharArray(); private static final boolean foundEndKeyword(char[] keyword, Token t, Stack endWordStack) { return t.is(Token.RESERVED_WORD, keyword) && !endWordStack.isEmpty() && keyword==endWordStack.peek(); } /** * {@inheritDoc} */ public List getFolds(RSyntaxTextArea textArea) { List folds = new ArrayList(); Fold currentFold = null; int lineCount = textArea.getLineCount(); boolean inMLC = false; int mlcStart = 0; Stack endWordStack = new Stack(); try { for (int line=0; line' }; private static final char[] MLC_END = { '-', '-', '>' }; /** * {@inheritDoc} */ public List getFolds(RSyntaxTextArea textArea) { List folds = new ArrayList(); Fold currentFold = null; int lineCount = textArea.getLineCount(); boolean inMLC = false; int mlcStart = 0; try { for (int line=0; linefolds list, and is removed from that. * * @param fold The fold to remove. * @param folds The list of top-level folds. */ private static final void removeFold(Fold fold, List folds) { if (!fold.removeFromParent()) { folds.remove(folds.size()-1); } } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/folding/package.html000066400000000000000000000001021257417003700305150ustar00rootroot00000000000000 Code folding functionality. RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/000077500000000000000000000000001257417003700257305ustar00rootroot00000000000000RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/AbstractMarkupTokenMaker.java000066400000000000000000000021071257417003700334770ustar00rootroot00000000000000/* * 10/03/2009 * * AbstractMarkupTokenMaker.java - Base class for token makers for markup * languages. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import org.fife.ui.rsyntaxtextarea.AbstractJFlexTokenMaker; /** * Base class for token makers for markup languages. * * @author Robert Futrell * @version 1.0 */ public abstract class AbstractMarkupTokenMaker extends AbstractJFlexTokenMaker { /** * Returns whether markup close tags should be completed. * * @return Whether closing markup tags are to be completed. */ public abstract boolean getCompleteCloseTags(); /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "" }; } /** * Overridden to return true. * * @return true always. */ @Override public final boolean isMarkupLanguage() { return true; } }RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ActionScriptTokenMaker.flex000066400000000000000000000335521257417003700332030ustar00rootroot00000000000000/* * 04/27/2010 * * ActionScriptTokenMaker.java - Scanner for ActionScript. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for the ActionScript.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated ActionScriptTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.5 * */ %% %public %class ActionScriptTokenMaker %extends AbstractJFlexCTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public ActionScriptTokenMaker() { } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addHyperlinkToken(int, int, int) */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, false); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. * @param hyperlink Whether this token is a hyperlink. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset, boolean hyperlink) { super.addToken(array, start,end, tokenType, startOffset, hyperlink); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.COMMENT_MULTILINE: state = MLC; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} Letter = [A-Za-z] LetterOrUnderscore = ({Letter}|"_") NonzeroDigit = [1-9] Digit = ("0"|{NonzeroDigit}) HexDigit = ({Digit}|[A-Fa-f]) OctalDigit = ([0-7]) AnyCharacterButApostropheOrBackSlash = ([^\\']) AnyCharacterButDoubleQuoteOrBackSlash = ([^\\\"\n]) EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) Escape = ("\\"(([btnfr\"'\\])|([0123]{OctalDigit}?{OctalDigit}?)|({OctalDigit}{OctalDigit}?)|{EscapedSourceCharacter})) NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\") IdentifierStart = ({LetterOrUnderscore}|"$") IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) LineTerminator = (\n) WhiteSpace = ([ \t\f]) CharLiteral = ([\']({AnyCharacterButApostropheOrBackSlash}|{Escape})[\']) UnclosedCharLiteral = ([\'][^\'\n]*) ErrorCharLiteral = ({UnclosedCharLiteral}[\']) StringLiteral = ([\"]({AnyCharacterButDoubleQuoteOrBackSlash}|{Escape})*[\"]) UnclosedStringLiteral = ([\"]([\\].|[^\\\"])*[^\"]?) ErrorStringLiteral = ({UnclosedStringLiteral}[\"]) MLCBegin = ("/*") MLCEnd = ("*/") LineCommentBegin = ("//") IntegerHelper1 = (({NonzeroDigit}{Digit}*)|"0") IntegerHelper2 = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) IntegerLiteral = ({IntegerHelper1}[lL]?) HexLiteral = ({IntegerHelper2}[lL]?) FloatHelper1 = ([fFdD]?) FloatHelper2 = ([eE][+-]?{Digit}+{FloatHelper1}) FloatLiteral1 = ({Digit}+"."({FloatHelper1}|{FloatHelper2}|{Digit}+({FloatHelper1}|{FloatHelper2}))) FloatLiteral2 = ("."{Digit}+({FloatHelper1}|{FloatHelper2})) FloatLiteral3 = ({Digit}+{FloatHelper2}) FloatLiteral = ({FloatLiteral1}|{FloatLiteral2}|{FloatLiteral3}|({Digit}+[fFdD])) ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+) BooleanLiteral = ("true"|"false") Separator = ([\(\)\{\}\[\]]) Separator2 = ([\;,.]) NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"|"|"&&"|">>>") AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") Operator = ({NonAssignmentOperator}|{AssignmentOperator}) Identifier = ({IdentifierStart}{IdentifierPart}*) ErrorIdentifier = ({NonSeparator}+) URLGenDelim = ([:\/\?#\[\]@]) URLSubDelim = ([\!\$&'\(\)\*\+,;=]) URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) URLCharacters = ({URLCharacter}*) URLEndCharacter = ([\/\$]|{Letter}|{Digit}) URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) %state MLC %state EOL_COMMENT %% { /* Keywords */ "add" | "and" | "break" | "case" | "catch" | "class" | "const" | "continue" | "default" | "delete" | "do" | "dynamic" | "else" | "eq" | "extends" | "final" | "finally" | "for" | "for each" | "function" | "ge" | "get" | "gt" | "if" | "ifFrameLoaded" | "implements" | "import" | "in" | "include" | "interface" | "internal" | "label" | "le" | "lt" | "namespace" | "native" | "ne" | "new" | "not" | "on" | "onClipEvent" | "or" | "override" | "package" | "private" | "protected" | "public" | "return" | "set" | "static" | "super" | "switch" | "tellTarget" | "this" | "throw" | "try" | "typeof" | "use" | "var" | "void" | "while" | "with" | "null" | "undefined" { addToken(Token.RESERVED_WORD); } /* Built-in objects (good idea not to use these names!) */ "Array" | "Boolean" | "Color" | "Date" | "Function" | "int" | "Key" | "MovieClip" | "Math" | "Mouse" | "Null" | "Number" | "Object" | "Selection" | "Sound" | "String" | "uint" | "Vector" | "void" | "XML" | "XMLNode" | "XMLSocket" { addToken(Token.DATA_TYPE); } /* Global functions */ "call" | "escape" | "eval" | "fscommand" | "getProperty" | "getTimer" | "getURL" | "getVersion" | "gotoAndPlay" | "gotoAndStop" | "#include" | "int" | "isFinite" | "isNaN" | "loadMovie" | "loadMovieNum" | "loadVariables" | "loadVariablesNum" | "maxscroll" | "newline" | "nextFrame" | "nextScene" | "Number" | "parseFloat" | "parseInt" | "play" | "prevFrame" | "prevScene" | "print" | "printAsBitmap" | "printAsBitmapNum" | "printNum" | "random" | "removeMovieClip" | "scroll" | "setProperty" | "startDrag" | "stop" | "stopAllSounds" | "stopDrag" | "String" | "targetPath" | "tellTarget" | "toggleHighQuality" | "trace" | "unescape" | "unloadMovie" | "unloadMovieNum" | "updateAfterEvent" { addToken(Token.FUNCTION); } /* Booleans. */ {BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } {LineTerminator} { addNullToken(); return firstToken; } {Identifier} { addToken(Token.IDENTIFIER); } {WhiteSpace}+ { addToken(Token.WHITESPACE); } /* String/Character literals. */ {CharLiteral} { addToken(Token.LITERAL_CHAR); } {UnclosedCharLiteral} { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; } {ErrorCharLiteral} { addToken(Token.ERROR_CHAR); } {StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } {UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } {ErrorStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); } /* Comment literals. */ "/**/" { addToken(Token.COMMENT_MULTILINE); } {MLCBegin} { start = zzMarkedPos-2; yybegin(MLC); } {LineCommentBegin} { start = zzMarkedPos-2; yybegin(EOL_COMMENT); } /* Separators. */ {Separator} { addToken(Token.SEPARATOR); } {Separator2} { addToken(Token.IDENTIFIER); } /* Operators. */ {Operator} { addToken(Token.OPERATOR); } /* Numbers */ {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } {FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } {ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } /* Ended with a line not in a string or comment. */ <> { addNullToken(); return firstToken; } /* Catch any other (unhandled) characters and flag them as bad. */ . { addToken(Token.ERROR_IDENTIFIER); } } { [^hwf\n\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } [hwf] {} \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } \* {} <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } } { [^hwf\n]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } [hwf] {} \n { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ActionScriptTokenMaker.java000066400000000000000000002431111257417003700331600ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 5/12/10 4:49 PM */ /* * 04/27/2010 * * ActionScriptTokenMaker.java - Scanner for ActionScript. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for the ActionScript.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated ActionScriptTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.5 * */ public class ActionScriptTokenMaker extends AbstractJFlexCTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int EOL_COMMENT = 2; public static final int YYINITIAL = 0; public static final int MLC = 1; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\21\1\10\1\0\1\21\1\17\22\0\1\72\1\50\1\15"+ "\1\20\1\1\1\50\1\52\1\7\2\55\1\23\1\43\1\42\1\31"+ "\1\32\1\22\1\4\3\16\4\6\2\3\1\53\1\42\1\44\1\45"+ "\1\47\1\51\1\54\1\100\1\5\1\76\1\26\1\30\1\74\1\1"+ "\1\114\1\113\1\1\1\101\1\25\1\102\1\103\1\104\1\110\1\115"+ "\1\112\1\106\1\77\1\111\1\107\1\1\1\24\2\1\1\55\1\11"+ "\1\55\1\46\1\2\1\0\1\36\1\14\1\64\1\62\1\35\1\27"+ "\1\73\1\56\1\60\1\105\1\63\1\37\1\67\1\13\1\65\1\57"+ "\1\70\1\34\1\40\1\33\1\12\1\75\1\61\1\71\1\66\1\1"+ "\1\41\1\46\1\41\1\51\uff81\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\3\0\1\1\1\2\2\3\1\2\1\4\1\5\3\2"+ "\1\6\2\1\1\7\2\10\3\2\1\10\7\2\1\11"+ "\1\2\5\10\22\2\1\12\1\13\5\12\1\14\3\12"+ "\1\1\1\15\1\3\1\16\1\15\1\16\1\15\1\17"+ "\1\15\1\2\1\4\1\20\1\0\1\4\5\2\1\21"+ "\3\2\2\6\1\22\1\1\1\23\1\24\21\2\1\21"+ "\12\2\1\0\1\10\4\2\2\21\11\2\1\21\2\2"+ "\1\21\17\2\1\25\10\0\1\1\1\16\1\0\2\17"+ "\1\2\1\4\1\26\2\4\1\20\1\4\6\2\1\21"+ "\4\2\1\6\1\27\1\6\1\1\1\0\1\30\5\2"+ "\1\21\23\2\1\21\11\2\1\30\20\2\1\21\4\2"+ "\1\30\12\2\10\0\1\1\1\2\1\4\10\2\1\6"+ "\1\1\1\31\5\2\1\0\1\32\13\2\1\33\3\2"+ "\1\33\40\2\2\0\1\34\2\0\1\35\1\1\1\2"+ "\1\4\7\2\1\6\1\1\4\2\1\21\1\0\17\2"+ "\1\33\23\2\4\0\1\1\1\2\1\4\6\2\1\6"+ "\1\1\4\2\1\0\35\2\1\1\2\2\1\0\24\2"+ "\1\33\1\2\1\21\25\2\1\33\40\2"; private static int [] zzUnpackAction() { int [] result = new int[531]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\116\0\234\0\352\0\u0138\0\u0186\0\u01d4\0\u0222"+ "\0\u0270\0\u02be\0\u030c\0\u035a\0\u03a8\0\u03f6\0\u02be\0\u0444"+ "\0\u0492\0\u04e0\0\u052e\0\u057c\0\u05ca\0\u0618\0\u0666\0\u06b4"+ "\0\u0702\0\u0750\0\u079e\0\u07ec\0\u083a\0\u0888\0\u02be\0\u02be"+ "\0\u08d6\0\u0924\0\u0972\0\u02be\0\u09c0\0\u0a0e\0\u0a5c\0\u0aaa"+ "\0\u0af8\0\u0b46\0\u0b94\0\u0be2\0\u0c30\0\u0c7e\0\u0ccc\0\u0d1a"+ "\0\u0d68\0\u0db6\0\u0e04\0\u0e52\0\u0ea0\0\u0eee\0\u0f3c\0\u0f8a"+ "\0\u02be\0\u0fd8\0\u1026\0\u1074\0\u10c2\0\u1110\0\u02be\0\u115e"+ "\0\u11ac\0\u11fa\0\u1248\0\u1296\0\u1296\0\u1296\0\u12e4\0\u1332"+ "\0\u1380\0\u13ce\0\u141c\0\u146a\0\u14b8\0\u02be\0\u1506\0\u1554"+ "\0\u15a2\0\u15f0\0\u163e\0\u168c\0\u16da\0\u1728\0\u1776\0\u17c4"+ "\0\u1812\0\u1860\0\u18ae\0\u02be\0\u18fc\0\u02be\0\u194a\0\u1998"+ "\0\u19e6\0\u1a34\0\u1a82\0\u1ad0\0\u1b1e\0\u1b6c\0\u1bba\0\u1c08"+ "\0\u1c56\0\u1ca4\0\u1cf2\0\u1d40\0\u1d8e\0\u1ddc\0\u1e2a\0\u1e78"+ "\0\u0138\0\u1ec6\0\u1f14\0\u1f62\0\u1fb0\0\u1ffe\0\u204c\0\u209a"+ "\0\u20e8\0\u2136\0\u2184\0\u052e\0\u21d2\0\u2220\0\u226e\0\u22bc"+ "\0\u230a\0\u2358\0\u23a6\0\u23f4\0\u2442\0\u2490\0\u24de\0\u252c"+ "\0\u257a\0\u25c8\0\u2616\0\u2664\0\u26b2\0\u2700\0\u274e\0\u279c"+ "\0\u27ea\0\u2838\0\u2886\0\u28d4\0\u2922\0\u2970\0\u29be\0\u2a0c"+ "\0\u2a5a\0\u2aa8\0\u2af6\0\u2b44\0\u2b92\0\u2be0\0\u2c2e\0\u02be"+ "\0\u2c7c\0\u2cca\0\u2d18\0\u2d66\0\u2db4\0\u2e02\0\u2e50\0\u2e9e"+ "\0\u2eec\0\u2f3a\0\u2f88\0\u1296\0\u2fd6\0\u3024\0\u3072\0\u02be"+ "\0\u30c0\0\u310e\0\u1506\0\u315c\0\u31aa\0\u31f8\0\u3246\0\u3294"+ "\0\u32e2\0\u3330\0\u337e\0\u33cc\0\u341a\0\u3468\0\u34b6\0\u3504"+ "\0\u02be\0\u3552\0\u35a0\0\u35ee\0\u363c\0\u368a\0\u36d8\0\u3726"+ "\0\u3774\0\u37c2\0\u3810\0\u385e\0\u38ac\0\u38fa\0\u3948\0\u3996"+ "\0\u39e4\0\u3a32\0\u3a80\0\u3ace\0\u3b1c\0\u3b6a\0\u3bb8\0\u3c06"+ "\0\u3c54\0\u3ca2\0\u3cf0\0\u3d3e\0\u3d8c\0\u3dda\0\u3e28\0\u3e76"+ "\0\u3ec4\0\u3f12\0\u3f60\0\u3fae\0\u3ffc\0\u404a\0\u4098\0\u40e6"+ "\0\u4134\0\u4182\0\u41d0\0\u421e\0\u426c\0\u42ba\0\u4308\0\u4356"+ "\0\u43a4\0\u43f2\0\u4440\0\u448e\0\u44dc\0\u452a\0\u4578\0\u45c6"+ "\0\u4614\0\u4662\0\u46b0\0\u46fe\0\u474c\0\u479a\0\u0138\0\u47e8"+ "\0\u4836\0\u4884\0\u48d2\0\u4920\0\u496e\0\u49bc\0\u4a0a\0\u4a58"+ "\0\u4aa6\0\u4af4\0\u4b42\0\u4b90\0\u4bde\0\u4c2c\0\u4c7a\0\u4cc8"+ "\0\u4d16\0\u4d64\0\u4db2\0\u4e00\0\u4e4e\0\u4e9c\0\u4eea\0\u4f38"+ "\0\u4f86\0\u4fd4\0\u5022\0\u5070\0\u50be\0\u510c\0\u02be\0\u515a"+ "\0\u51a8\0\u51f6\0\u5244\0\u5292\0\u52e0\0\u0138\0\u532e\0\u537c"+ "\0\u53ca\0\u5418\0\u5466\0\u54b4\0\u5502\0\u5550\0\u559e\0\u55ec"+ "\0\u563a\0\u0138\0\u5688\0\u56d6\0\u5724\0\u5772\0\u57c0\0\u580e"+ "\0\u585c\0\u58aa\0\u58f8\0\u5946\0\u5994\0\u59e2\0\u5a30\0\u5a7e"+ "\0\u5acc\0\u5b1a\0\u5b68\0\u5bb6\0\u5c04\0\u5c52\0\u5ca0\0\u5cee"+ "\0\u5d3c\0\u5d8a\0\u5dd8\0\u5e26\0\u5e74\0\u5ec2\0\u5f10\0\u5f5e"+ "\0\u5fac\0\u5ffa\0\u6048\0\u6096\0\u60e4\0\u6132\0\u6180\0\u61ce"+ "\0\u621c\0\u626a\0\u62b8\0\u6306\0\u6354\0\u63a2\0\u63f0\0\u643e"+ "\0\u648c\0\u64da\0\u6528\0\u6576\0\u65c4\0\u6612\0\u6660\0\u66ae"+ "\0\u66fc\0\u674a\0\u6798\0\u67e6\0\u6834\0\u6882\0\u68d0\0\u691e"+ "\0\u696c\0\u69ba\0\u6a08\0\u6a56\0\u6aa4\0\u6af2\0\u6b40\0\u6b8e"+ "\0\u6bdc\0\u6c2a\0\u6c78\0\u6cc6\0\u6d14\0\u6d62\0\u6db0\0\u6dfe"+ "\0\u6e4c\0\u6e9a\0\u6ee8\0\u6f36\0\u6f84\0\u6fd2\0\u7020\0\u706e"+ "\0\u70bc\0\u710a\0\u7158\0\u71a6\0\u71f4\0\u7242\0\u7290\0\u72de"+ "\0\u732c\0\u737a\0\u621c\0\u73c8\0\u6306\0\u7416\0\u7464\0\u74b2"+ "\0\u7500\0\u754e\0\u759c\0\u75ea\0\u7638\0\u7686\0\u76d4\0\u7722"+ "\0\u7770\0\u77be\0\u780c\0\u785a\0\u78a8\0\u78f6\0\u7944\0\u7992"+ "\0\u79e0\0\u7a2e\0\u7a7c\0\u7aca\0\u7b18\0\u7b66\0\u7bb4\0\u7c02"+ "\0\u7c50\0\u7c9e\0\u7cec\0\u7d3a\0\u7d88\0\u7dd6\0\u7e24\0\u7e72"+ "\0\u7ec0\0\u7f0e\0\u7f5c\0\u7faa\0\u7ff8\0\u8046\0\u8094\0\u80e2"+ "\0\u8130\0\u817e\0\u81cc\0\u821a\0\u8268\0\u82b6\0\u8304\0\u8352"+ "\0\u83a0\0\u83ee\0\u843c\0\u848a\0\u84d8\0\u8526\0\u8574\0\u85c2"+ "\0\u8610\0\u865e\0\u86ac\0\u86fa\0\u8748\0\u8796\0\u87e4\0\u8832"+ "\0\u8880\0\u88ce\0\352\0\u891c\0\u02be\0\u896a\0\u89b8\0\u8a06"+ "\0\u8a54\0\u8aa2\0\u8af0\0\u8b3e\0\u8b8c\0\u8bda\0\u8c28\0\u8c76"+ "\0\u8cc4\0\u8d12\0\u8d60\0\u8dae\0\u8dfc\0\u8e4a\0\u8e98\0\u8ee6"+ "\0\u8f34\0\u8f82\0\u8fd0\0\u901e\0\u906c\0\u90ba\0\u9108\0\u9156"+ "\0\u91a4\0\u91f2\0\u9240\0\u928e\0\u92dc\0\u932a\0\u9378\0\u93c6"+ "\0\u9414\0\u9462\0\u94b0\0\u94fe\0\u954c\0\u959a\0\u95e8\0\u9636"+ "\0\u9684\0\u96d2\0\u9720\0\u976e\0\u97bc\0\u980a\0\u9858\0\u98a6"+ "\0\u98f4\0\u9942\0\u9990"; private static int [] zzUnpackRowMap() { int [] result = new int[531]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\4\2\5\1\6\1\7\1\10\1\6\1\11\1\12"+ "\1\4\1\13\1\14\1\15\1\16\1\6\1\17\1\20"+ "\1\21\1\22\1\23\1\24\1\5\1\25\1\26\1\5"+ "\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\36"+ "\1\37\1\40\1\41\1\42\2\23\1\43\1\23\1\44"+ "\1\45\1\44\1\4\1\37\1\5\1\46\1\47\1\50"+ "\1\51\1\5\1\52\1\53\1\5\1\54\2\5\1\21"+ "\1\55\1\56\1\57\1\60\1\5\1\61\1\62\1\63"+ "\1\64\1\65\1\5\1\66\1\67\6\5\10\70\1\71"+ "\12\70\1\72\3\70\1\73\26\70\1\74\2\70\1\75"+ "\34\70\10\76\1\77\16\76\1\100\26\76\1\101\2\76"+ "\1\102\34\76\7\4\2\0\4\4\1\0\1\4\1\0"+ "\1\4\3\0\5\4\2\0\6\4\13\0\1\4\1\0"+ "\14\4\1\0\24\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0"+ "\1\4\1\0\14\5\1\0\23\5\3\104\2\6\1\104"+ "\1\6\2\0\4\104\1\0\1\6\1\0\1\104\3\0"+ "\1\104\1\105\2\106\1\107\1\0\1\110\2\104\1\107"+ "\1\104\1\105\1\104\13\0\1\104\1\0\4\104\1\106"+ "\7\104\1\0\1\104\1\106\24\104\1\111\1\112\1\104"+ "\1\112\2\0\4\104\1\0\1\112\1\0\1\104\3\0"+ "\1\113\1\105\2\106\1\107\1\0\1\110\2\104\1\107"+ "\1\104\1\105\1\104\13\0\1\104\1\0\4\104\1\106"+ "\6\104\1\113\1\0\1\104\1\106\21\104\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\7\5\1\114"+ "\4\5\1\0\23\5\7\115\1\116\1\117\1\120\104\115"+ "\116\0\1\4\6\5\2\0\1\103\1\5\1\121\1\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\5\5"+ "\1\122\13\0\1\4\1\0\1\5\1\123\1\124\11\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\1\125\2\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\2\5"+ "\1\126\1\127\2\5\13\0\1\4\1\0\7\5\1\130"+ "\4\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\1\5"+ "\1\131\4\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\10\16\1\132\1\133\3\16\1\134\100\16\7\4\2\0"+ "\4\4\1\0\1\4\1\0\1\4\3\0\5\4\2\0"+ "\6\4\13\0\1\4\1\0\2\4\1\135\11\4\1\0"+ "\23\4\21\0\1\21\50\0\1\21\45\0\1\136\1\137"+ "\21\0\1\44\115\0\1\44\50\0\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\7\5"+ "\1\140\13\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\3\5\1\141"+ "\2\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\1\142\2\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\3\5\1\143\1\5\1\144"+ "\13\0\1\4\1\0\2\5\1\145\4\5\1\146\4\5"+ "\1\0\23\5\31\0\1\44\13\0\1\44\53\0\2\110"+ "\1\0\1\110\7\0\1\110\77\0\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\1\5\1\147\1\150\1\151\2\5\13\0\1\4"+ "\1\0\1\152\6\5\1\153\1\154\3\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\2\5\1\155\1\156\2\5"+ "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\4\5\1\157\1\160\13\0\1\4\1\0"+ "\12\5\1\161\1\162\1\0\2\5\1\163\20\5\1\4"+ "\6\5\2\0\1\103\1\5\1\164\1\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ "\1\0\4\5\1\164\7\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\1\161\1\5\1\161\1\165\2\5\13\0"+ "\1\4\1\0\7\5\1\166\4\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\1\167\2\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\1\170\1\5\1\171\3\5"+ "\13\0\1\4\1\0\3\5\1\172\2\5\1\173\5\5"+ "\1\0\23\5\43\0\1\44\1\0\1\44\114\0\1\174"+ "\1\44\115\0\1\44\1\0\1\175\113\0\1\44\4\0"+ "\1\44\43\0\1\4\6\5\2\0\1\103\1\176\2\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\1\5"+ "\1\177\1\5\1\200\1\201\1\5\13\0\1\4\1\0"+ "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\1\5"+ "\1\202\1\5\1\0\1\5\1\0\1\4\3\0\3\5"+ "\1\203\1\5\2\0\5\5\1\204\13\0\1\4\1\0"+ "\11\5\1\205\2\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\6\5\13\0\1\4\1\0\1\206\1\5\1\207"+ "\11\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\2\5"+ "\1\210\3\5\13\0\1\4\1\0\7\5\1\161\1\211"+ "\3\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\3\5"+ "\1\212\1\213\1\5\13\0\1\4\1\0\7\5\1\214"+ "\4\5\1\0\23\5\1\4\6\5\2\0\1\103\1\5"+ "\1\215\1\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\1\5\1\161\4\5\13\0\1\4\1\0\14\5"+ "\1\0\2\5\1\216\20\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\3\5\1\217\2\5\13\0\1\4\1\0\14\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\1\161\1\5\1\220"+ "\3\5\13\0\1\4\1\0\7\5\1\221\4\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\1\222\2\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\3\5\1\223\2\5\13\0\1\4\1\0\7\5"+ "\1\224\4\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\6\5\13\0\1\4\1\0\7\5\1\225\4\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\1\5\1\226\4\5"+ "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\2\5\1\227\3\5\13\0\1\4\1\0"+ "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\3\5"+ "\1\230\2\5\13\0\1\4\1\0\7\5\1\231\4\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\1\232\2\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\2\5\1\233\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\1\234\1\5"+ "\1\235\3\5\13\0\1\4\1\0\7\5\1\236\4\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\2\5\1\237"+ "\3\5\13\0\1\4\1\0\14\5\1\0\23\5\10\70"+ "\1\0\12\70\1\0\3\70\1\0\26\70\1\0\2\70"+ "\1\0\34\70\22\0\1\240\126\0\1\241\24\0\1\242"+ "\70\0\1\243\143\0\1\244\34\0\10\76\1\0\16\76"+ "\1\0\26\76\1\0\2\76\1\0\34\76\33\0\1\245"+ "\24\0\1\246\70\0\1\247\143\0\1\250\34\0\7\4"+ "\2\0\1\4\1\251\2\4\1\0\1\4\1\0\1\4"+ "\3\0\5\4\2\0\6\4\13\0\1\4\1\0\14\4"+ "\1\0\23\4\7\104\2\0\4\104\1\0\1\104\1\0"+ "\1\104\3\0\5\104\2\0\6\104\13\0\1\104\1\0"+ "\14\104\1\0\26\104\2\252\1\104\1\252\2\0\4\104"+ "\1\0\1\252\1\0\1\104\3\0\5\104\1\253\1\0"+ "\6\104\2\0\1\253\10\0\1\104\1\0\14\104\1\0"+ "\26\104\2\110\1\104\1\110\2\0\4\104\1\0\1\110"+ "\1\0\1\104\3\0\2\104\2\106\1\107\2\0\2\104"+ "\1\107\3\104\13\0\1\104\1\0\4\104\1\106\7\104"+ "\1\0\1\104\1\106\24\104\2\111\1\104\1\111\2\0"+ "\4\104\1\0\1\111\1\0\1\104\3\0\2\104\2\106"+ "\1\107\1\0\1\110\2\104\1\107\3\104\13\0\1\104"+ "\1\0\4\104\1\106\7\104\1\0\1\104\1\106\24\104"+ "\1\111\1\112\1\104\1\112\2\0\4\104\1\0\1\112"+ "\1\0\1\104\3\0\1\104\1\254\2\106\1\107\1\0"+ "\1\110\2\104\1\107\1\104\1\254\1\104\13\0\1\104"+ "\1\0\4\104\1\106\7\104\1\0\1\104\1\106\24\104"+ "\4\255\2\0\3\104\1\255\1\0\1\255\1\0\1\104"+ "\3\0\2\104\3\255\2\0\2\104\2\255\2\104\13\0"+ "\1\104\1\0\4\104\1\255\1\104\1\255\5\104\1\0"+ "\1\104\1\255\1\104\1\255\1\104\1\255\15\104\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\7\5"+ "\1\256\4\5\1\0\23\5\7\257\1\260\1\0\105\257"+ "\7\0\1\260\106\0\4\257\1\261\1\257\1\262\1\263"+ "\1\0\1\115\1\264\3\115\1\261\10\257\1\115\3\257"+ "\2\115\61\257\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\2\5\1\265"+ "\1\5\1\266\1\5\13\0\1\4\1\0\4\5\1\267"+ "\7\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\2\5"+ "\1\161\3\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\4\5\1\270\7\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\1\5\1\271\1\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\4\5\1\272"+ "\1\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\3\5"+ "\1\273\7\5\1\274\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\1\275\5\5\13\0\1\4\1\0\11\5\1\276"+ "\2\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\1\161"+ "\5\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\2\5\1\277\3\5\13\0\1\4"+ "\1\0\14\5\1\0\23\5\11\132\1\300\3\132\1\301"+ "\104\132\1\16\1\132\2\16\1\0\1\16\1\302\4\16"+ "\10\132\1\16\3\132\2\16\61\132\7\4\2\0\2\4"+ "\1\303\1\4\1\0\1\4\1\0\1\4\3\0\5\4"+ "\2\0\6\4\13\0\1\4\1\0\14\4\1\0\23\4"+ "\23\0\1\304\72\0\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\1\5\1\305\3\5"+ "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\1\306\5\5\13\0\1\4"+ "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\1\5\1\307\1\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\4\5\1\310\1\5"+ "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\6\5\1\311"+ "\5\5\1\0\23\5\1\4\6\5\2\0\1\103\1\5"+ "\1\312\1\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\1\5\1\313\4\5\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\1\314\2\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\3\5\1\315\2\5\13\0\1\4\1\0"+ "\10\5\1\161\3\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\4\5\1\316\1\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\1\5\1\317"+ "\4\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\1\5\1\320\4\5\13\0\1\4"+ "\1\0\2\5\1\321\11\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ "\1\322\22\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0"+ "\1\4\1\0\1\5\1\323\12\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\1\324\5\5\13\0\1\4\1\0"+ "\11\5\1\325\2\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\1\5\1\326\1\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\5\5\1\122"+ "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\6\5\1\327"+ "\5\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\1\330"+ "\5\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\3\5\1\331\2\5\13\0\1\4"+ "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\6\5\13\0\1\4\1\0\4\5\1\161\7\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\2\5\1\332\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\3\5\1\333\2\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0"+ "\1\4\1\0\1\5\1\334\12\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\3\5\1\335\2\5\13\0\1\4"+ "\1\0\7\5\1\336\4\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\1\337\5\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0"+ "\1\4\1\0\2\5\1\340\11\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\1\5\1\341\4\5\13\0\1\4"+ "\1\0\14\5\1\0\23\5\45\0\1\44\1\0\1\23"+ "\46\0\1\4\6\5\2\0\1\103\2\5\1\342\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\2\5\1\343\3\5\13\0\1\4\1\0\2\5"+ "\1\344\4\5\1\345\4\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\1\5\1\346\4\5\13\0\1\4\1\0"+ "\6\5\1\347\5\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\3\5\1\350\2\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\1\351\5\5"+ "\13\0\1\4\1\0\6\5\1\352\5\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\14\5\1\0\1\5\1\353\21\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\1\5"+ "\1\354\6\5\1\355\12\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\6\5\13\0\1\4\1\0\1\5\1\356\12\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ "\1\0\2\5\1\357\11\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\1\360\5\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\3\5\1\361\1\5\2\0"+ "\4\5\1\362\1\5\13\0\1\4\1\0\14\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\1\5\1\363\1\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\1\364\3\5\1\331\1\122\13\0\1\4"+ "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\3\5\1\365\2\5\13\0\1\4\1\0\14\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\1\5\1\366\1\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ "\3\5\1\367\17\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\2\5"+ "\1\370\3\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\13\5\1\371\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\1\372\5\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\1\373\5\5\13\0\1\4"+ "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\1\5\1\374\1\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\1\5\1\161\4\5"+ "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\2\5\1\164"+ "\11\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\4\5"+ "\1\375\1\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\1\5\1\376\4\5\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\6\5\13\0\1\4\1\0\10\5\1\377\3\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\1\u0100\5\5"+ "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\1\u0101\2\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ "\1\0\2\5\1\u0102\20\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\4\5\1\u0103\1\5\13\0\1\4\1\0\11\5\1\u0104"+ "\2\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\14\5\1\0\12\5\1\u0105\10\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\1\5\1\u0106\4\5\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\4\5\1\u0107\1\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\1\u0108\2\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\6\5\1\u0109"+ "\5\5\1\0\23\5\57\0\1\u010a\75\0\1\u010b\111\0"+ "\1\u010c\143\0\1\u010d\113\0\1\u010e\75\0\1\u010f\111\0"+ "\1\u0110\143\0\1\u0111\34\0\3\4\4\u0112\2\0\3\4"+ "\1\u0112\1\0\1\u0112\1\0\1\4\3\0\2\4\3\u0112"+ "\2\0\2\4\2\u0112\2\4\13\0\1\4\1\0\4\4"+ "\1\u0112\1\4\1\u0112\5\4\1\0\1\4\1\u0112\1\4"+ "\1\u0112\1\4\1\u0112\15\4\3\104\2\252\1\104\1\252"+ "\2\0\4\104\1\0\1\252\1\0\1\104\3\0\2\104"+ "\2\106\1\104\2\0\6\104\13\0\1\104\1\0\4\104"+ "\1\106\7\104\1\0\1\104\1\106\21\104\3\0\2\252"+ "\1\0\1\252\7\0\1\252\77\0\3\104\4\255\2\0"+ "\3\104\1\255\1\0\1\255\1\0\1\104\3\0\1\104"+ "\1\254\3\255\2\0\2\104\2\255\1\254\1\104\13\0"+ "\1\104\1\0\4\104\1\255\1\104\1\255\5\104\1\0"+ "\1\104\1\255\1\104\1\255\1\104\1\255\15\104\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\4\5\1\u0113\1\5\13\0\1\4"+ "\1\0\14\5\1\0\23\5\7\257\1\116\1\0\111\257"+ "\1\262\1\257\1\262\1\260\1\0\5\257\1\262\103\257"+ "\1\115\1\257\1\115\1\260\1\0\5\257\1\115\102\257"+ "\4\u0114\1\116\1\0\3\257\1\u0114\1\257\1\u0114\7\257"+ "\3\u0114\4\257\2\u0114\23\257\1\u0114\1\257\1\u0114\7\257"+ "\1\u0114\1\257\1\u0114\1\257\1\u0114\15\257\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\5\5\1\160\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0"+ "\1\4\1\0\7\5\1\u0115\4\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\2\5\1\u0116\3\5\13\0\1\4"+ "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\3\5\1\u0117\2\5\13\0\1\4\1\0\14\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\1\377\5\5\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\4\5\1\161\1\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\4\5\1\u0118"+ "\1\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\1\u0119\5\5\13\0\1\4\1\0"+ "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\2\5\1\u011a\11\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\2\5\1\u011b\3\5\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\3\5\1\u011c\2\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\10\132\1\0\110\132\4\u011d\2\132\1\300"+ "\2\132\1\u011d\1\301\1\u011d\7\132\3\u011d\4\132\2\u011d"+ "\23\132\1\u011d\1\132\1\u011d\7\132\1\u011d\1\132\1\u011d"+ "\1\132\1\u011d\15\132\7\4\2\0\4\4\1\0\1\4"+ "\1\0\1\4\3\0\5\4\2\0\6\4\13\0\1\4"+ "\1\0\6\4\1\u011e\5\4\1\0\23\4\22\0\1\u011f"+ "\73\0\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ "\1\0\14\5\1\0\10\5\1\u0120\2\5\1\u0121\7\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\2\5\1\377\3\5\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\6\5\13\0\1\4\1\0\6\5\1\u0122\5\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\5\5\1\314"+ "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\7\5\1\u0123"+ "\4\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\3\5"+ "\1\u0124\2\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\14\5\1\u0125\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\2\5"+ "\1\u0126\3\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\6\5\1\u0127\5\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\4\5\1\u0128\1\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0"+ "\1\4\1\0\14\5\1\0\1\u0129\22\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\7\5\1\u012a"+ "\4\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\5\5"+ "\1\161\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ "\1\0\1\u012b\22\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\2\5"+ "\1\u012c\3\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\1\u012d\2\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\6\5\13\0\1\4\1\0\7\5\1\u012e\4\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ "\1\0\4\5\1\u012f\7\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\3\5\1\u0130\2\5\13\0\1\4\1\0"+ "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\2\5"+ "\1\u0131\3\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\4\5\1\u0132\1\5\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\2\5\1\272\3\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0"+ "\1\4\1\0\4\5\1\u0133\7\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\2\5\1\223\3\5\13\0\1\4"+ "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\1\u0134\1\u0135\4\5\13\0\1\4\1\0\14\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ "\1\0\1\5\1\u0136\12\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ "\15\5\1\u0137\5\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\1\364"+ "\5\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\7\5"+ "\1\u0138\4\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\4\5\1\u0134\1\5\13\0\1\4\1\0\14\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ "\1\0\14\5\1\0\2\5\1\u0119\20\5\1\4\6\5"+ "\2\0\1\103\1\5\1\u0139\1\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\14\5\1\0\2\5\1\u013a\20\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\1\u013b\5\5\13\0\1\4\1\0\14\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\5\5\1\u013c\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\6\5\13\0\1\4\1\0\5\5\1\u013d\6\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0"+ "\1\4\1\0\10\5\1\u0132\3\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\2\5\1\u013e\3\5\13\0\1\4"+ "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\4\5\1\u013f\1\5\13\0\1\4\1\0\14\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\1\5\1\u0140\4\5"+ "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\2\5\1\u0141"+ "\11\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\3\5"+ "\1\u0142\2\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\4\5\1\u0143\1\5\13\0"+ "\1\4\1\0\7\5\1\u0144\4\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\4\5\1\122\1\5\13\0\1\4"+ "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\6\5\13\0\1\4\1\0\1\161\13\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\3\5\1\u0145\2\5\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\2\5\1\u0146\3\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\3\5\1\u0147"+ "\2\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\6\5"+ "\1\360\5\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\5\5\1\321\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\1\u0148\4\5\1\130\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\4\5\1\u0149\1\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\1\5\1\u014a"+ "\4\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\5\5\1\u014b\13\0\1\4\1\0"+ "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\14\5\1\0\4\5\1\u014c\7\5"+ "\1\u014d\1\u0137\1\u014e\4\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\6\5\13\0\1\4\1\0\7\5\1\u014f\4\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ "\1\0\6\5\1\u0150\5\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\7\5\1\u0151"+ "\4\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\3\5"+ "\1\227\2\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\1\377\13\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\5\5\1\306\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\2\5\1\u0152\11\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\4\5\1\377\1\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\2\5\1\u0153"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\2\5\1\u0154\3\5\13\0\1\4\1\0"+ "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\2\5\1\u0155\11\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\2\5\1\374\3\5\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\1\5\1\u0156\1\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\1\375\5\5"+ "\13\0\1\4\1\0\14\5\1\0\23\5\53\0\1\u0157"+ "\77\0\1\u010a\137\0\1\u0158\70\0\1\u0159\136\0\1\u015a"+ "\77\0\1\u010e\137\0\1\u015b\70\0\1\u015c\63\0\3\4"+ "\4\u015d\2\0\3\4\1\u015d\1\0\1\u015d\1\0\1\4"+ "\3\0\2\4\3\u015d\2\0\2\4\2\u015d\2\4\13\0"+ "\1\4\1\0\4\4\1\u015d\1\4\1\u015d\5\4\1\0"+ "\1\4\1\u015d\1\4\1\u015d\1\4\1\u015d\16\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\2\5\1\u015e\3\5\13\0\1\4\1\0"+ "\14\5\1\0\23\5\3\257\4\u015f\1\116\1\0\3\257"+ "\1\u015f\1\257\1\u015f\7\257\3\u015f\4\257\2\u015f\23\257"+ "\1\u015f\1\257\1\u015f\7\257\1\u015f\1\257\1\u015f\1\257"+ "\1\u015f\15\257\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\3\5\1\u0160"+ "\2\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\3\5\1\u0161\1\5\2\0\6\5\13\0\1\4"+ "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\1\u0162\5\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\2\5\1\u0163\11\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\1\5"+ "\1\u0164\11\5\1\u0165\7\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\6\5\13\0\1\4\1\0\14\5\1\0\2\5\1\122"+ "\20\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\5\5\1\u0166\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\6\5\13\0\1\4\1\0\5\5\1\161\6\5"+ "\1\0\23\5\3\132\4\u0167\2\132\1\300\2\132\1\u0167"+ "\1\301\1\u0167\7\132\3\u0167\4\132\2\u0167\23\132\1\u0167"+ "\1\132\1\u0167\7\132\1\u0167\1\132\1\u0167\1\132\1\u0167"+ "\15\132\7\4\2\0\4\4\1\0\1\4\1\0\1\4"+ "\3\0\5\4\2\0\4\4\1\u0168\1\4\13\0\1\4"+ "\1\0\14\4\1\0\24\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\7\5\1\u0169\4\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\7\5\1\u016a\4\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\1\u016b\5\5\13\0\1\4\1\0\14\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ "\1\0\11\5\1\u016c\2\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\4\5\1\u016d\1\5\13\0\1\4\1\0"+ "\14\5\1\0\23\5\35\0\1\u016e\60\0\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\2\5\1\u0132\3\5\13\0\1\4\1\0"+ "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\14\5\1\0\4\5\1\u016f\16\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\2\5\1\u0170\3\5\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\6\5\13\0\1\4\1\0\3\5\1\161\10\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\4\5\1\u0171"+ "\1\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\7\5"+ "\1\u0172\4\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\1\5\1\u0173\4\5\13\0\1\4\1\0\14\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ "\1\0\14\5\1\0\2\5\1\u0174\20\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\7\5\1\u0175"+ "\4\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\1\5\1\u0127\12\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\1\5\1\u0176\1\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\7\5"+ "\1\u0177\4\5\1\u0178\6\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\6\5\13\0\1\4\1\0\2\5\1\u0179\11\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\1\u017a\5\5\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\2\5"+ "\1\u017b\2\5\2\0\6\5\13\0\1\4\1\0\14\5"+ "\1\0\5\5\1\u017c\15\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\1\5\1\u017d\4\5\13\0\1\4\1\0\14\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\4\5\1\331\1\5"+ "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\1\u017e\5\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\3\5\1\u0146"+ "\2\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\2\5\1\u017f\3\5\13\0\1\4"+ "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\2\5\1\u0180\3\5\13\0\1\4\1\0\14\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\3\5\1\u0181\2\5"+ "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\1\5\1\u0182\4\5\13\0\1\4\1\0"+ "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\1\u0183"+ "\2\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\6\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\3\5\1\u0184\2\5\13\0\1\4"+ "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\1\5\1\u0185\1\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ "\1\0\14\5\1\0\10\5\1\u0132\12\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\2\5\1\u0186\3\5\13\0\1\4\1\0"+ "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\1\5"+ "\1\130\4\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\1\u0187\2\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\1\122\5\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\11\5\1\u0134\2\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\6\5\13\0\1\4\1\0\2\5\1\u0188\11\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0"+ "\1\4\1\0\2\5\1\u0189\11\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\1\5\1\u018a\4\5\13\0\1\4"+ "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\6\5\13\0\1\4\1\0\6\5\1\173\5\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ "\1\0\2\5\1\u018b\11\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\2\5\1\u018c\3\5\13\0\1\4\1\0"+ "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\14\5\1\0\17\5\1\u018d\3\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\14\5\1\0\5\5\1\u018e\15\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\1\u018f\5\5\13\0\1\4\1\0\14\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\1\5\1\377\4\5"+ "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\2\5\1\u0190\3\5\13\0\1\4\1\0"+ "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\2\5"+ "\1\u0151\3\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\6\5\1\271\5\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\1\5\1\u0191\1\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0"+ "\1\4\1\0\4\5\1\377\7\5\1\0\23\5\22\0"+ "\1\u0192\133\0\1\u010a\12\0\1\u0157\43\0\1\u0159\1\u0193"+ "\4\u0159\1\u0193\2\0\3\u0159\1\0\1\u0159\1\0\1\u0193"+ "\1\0\1\u0159\1\u0193\5\u0159\2\u0193\6\u0159\1\0\2\u0193"+ "\1\0\1\u0193\2\0\6\u0193\14\u0159\1\0\23\u0159\22\0"+ "\1\u0194\133\0\1\u010e\12\0\1\u015a\43\0\1\u015c\1\u0195"+ "\4\u015c\1\u0195\2\0\3\u015c\1\0\1\u015c\1\0\1\u0195"+ "\1\0\1\u015c\1\u0195\5\u015c\2\u0195\6\u015c\1\0\2\u0195"+ "\1\0\1\u0195\2\0\6\u0195\14\u015c\1\0\23\u015c\3\4"+ "\4\u0196\2\0\3\4\1\u0196\1\0\1\u0196\1\0\1\4"+ "\3\0\2\4\3\u0196\2\0\2\4\2\u0196\2\4\13\0"+ "\1\4\1\0\4\4\1\u0196\1\4\1\u0196\5\4\1\0"+ "\1\4\1\u0196\1\4\1\u0196\1\4\1\u0196\16\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\3\5\1\u0197\2\5\13\0\1\4\1\0"+ "\14\5\1\0\23\5\3\257\4\u0198\1\116\1\0\3\257"+ "\1\u0198\1\257\1\u0198\7\257\3\u0198\4\257\2\u0198\23\257"+ "\1\u0198\1\257\1\u0198\7\257\1\u0198\1\257\1\u0198\1\257"+ "\1\u0198\15\257\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0"+ "\1\4\1\0\4\5\1\u0199\7\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\2\5"+ "\1\u019a\11\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\2\5\1\u019b\3\5\13\0\1\4\1\0\14\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\1\5\1\u0127\1\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\1\5\1\u019c\4\5\13\0\1\4\1\0"+ "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\6\5\1\u019d\5\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\1\5\1\u019e\12\5\1\0\23\5\3\132\4\u019f\2\132"+ "\1\300\2\132\1\u019f\1\301\1\u019f\7\132\3\u019f\4\132"+ "\2\u019f\23\132\1\u019f\1\132\1\u019f\7\132\1\u019f\1\132"+ "\1\u019f\1\132\1\u019f\15\132\7\4\2\0\1\4\1\u01a0"+ "\2\4\1\0\1\4\1\0\1\4\3\0\5\4\2\0"+ "\6\4\13\0\1\4\1\0\14\4\1\0\24\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\4\5\1\306"+ "\7\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\6\5\1\u01a1\5\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\2\5\1\u01a2\11\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\6\5\13\0\1\4\1\0\11\5\1\u01a3\2\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\4\5\1\u01a4"+ "\1\5\13\0\1\4\1\0\14\5\1\0\23\5\36\0"+ "\1\u01a5\57\0\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\3\5\1\u01a6"+ "\2\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\1\u01a7\5\5\13\0\1\4\1\0"+ "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\2\5"+ "\1\u01a8\3\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\3\5\1\161\1\5\2\0\6\5\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\1\5\1\161\1\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\2\5\1\u01a9"+ "\3\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\11\5"+ "\1\u0132\2\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\6\5\13\0\1\4\1\0\4\5\1\321\7\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ "\1\0\7\5\1\u01aa\4\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\3\5\1\u01ab\2\5\13\0\1\4\1\0"+ "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\6\5\1\161\5\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\2\5\1\u017b\2\5\2\0\6\5\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\1\5\1\u01ac\4\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\4\5\1\u01ad"+ "\1\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\7\5"+ "\1\u01ae\4\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\6\5\13\0\1\4\1\0\14\5\1\0\5\5\1\u01af"+ "\2\5\1\u01b0\12\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\6\5\1\u01b1\5\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\14\5\1\0\1\5\1\u01b2\16\5\1\u01b3\2\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ "\1\0\1\122\22\5\1\4\6\5\2\0\1\103\1\5"+ "\1\u01b4\1\5\1\0\1\5\1\0\1\4\3\0\3\5"+ "\1\u019e\1\5\2\0\6\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0"+ "\1\4\1\0\4\5\1\122\7\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\11\5"+ "\1\u01b5\2\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\6\5\13\0\1\4\1\0\2\5\1\u01b6\11\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ "\1\0\11\5\1\u01b7\2\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\4\5\1\130\1\5\13\0\1\4\1\0"+ "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\1\5"+ "\1\u01b8\1\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\1\5\1\u01b9\12\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\6\5\13\0\1\4\1\0\2\5\1\u0183\11\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0"+ "\1\4\1\0\11\5\1\u01ba\2\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\1\5\1\u01bb\4\5\13\0\1\4"+ "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\1\5\1\u0132"+ "\3\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\1\5\1\u01bc\1\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\2\5\1\u01bd"+ "\11\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\14\5\1\0\3\5\1\u01be\17\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\14\5\1\0\1\377\22\5\22\0\1\u0159\115\0\1\u015c"+ "\73\0\3\4\4\5\2\0\3\4\1\5\1\0\1\5"+ "\1\0\1\4\3\0\2\4\3\5\2\0\2\4\2\5"+ "\2\4\13\0\1\4\1\0\4\4\1\5\1\4\1\5"+ "\5\4\1\0\1\4\1\5\1\4\1\5\1\4\1\5"+ "\16\4\6\5\2\0\1\103\1\5\1\377\1\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0"+ "\1\4\1\0\14\5\1\0\23\5\3\257\4\115\1\116"+ "\1\0\3\257\1\115\1\257\1\115\7\257\3\115\4\257"+ "\2\115\23\257\1\115\1\257\1\115\7\257\1\115\1\257"+ "\1\115\1\257\1\115\15\257\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\6\5\13\0\1\4\1\0\14\5\1\0\7\5\1\u0177"+ "\13\5\1\4\6\5\2\0\1\103\1\5\1\u01bf\1\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ "\5\5\1\u01c0\15\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\3\5"+ "\1\u01c1\2\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\2\5\1\u0163\3\5\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\3\5\1\u01c2\2\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\3\132\4\16\2\132\1\300\2\132\1\16"+ "\1\301\1\16\7\132\3\16\4\132\2\16\23\132\1\16"+ "\1\132\1\16\7\132\1\16\1\132\1\16\1\132\1\16"+ "\15\132\7\4\2\0\4\4\1\0\1\4\1\0\1\4"+ "\3\0\5\4\2\0\6\4\13\0\1\4\1\0\4\4"+ "\1\u01c3\7\4\1\0\24\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\5\5\1\u01c4\6\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\7\5\1\u0173\4\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\3\5\1\u01c5\2\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0"+ "\1\4\1\0\10\5\1\161\3\5\1\0\23\5\64\0"+ "\1\u01c6\31\0\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\1\5\1\u01c7"+ "\4\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ "\1\0\15\5\1\u01c8\5\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\6\5\13\0\1\4\1\0\14\5\1\0\21\5\1\u01c9"+ "\1\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ "\1\0\14\5\1\0\7\5\1\u01ca\13\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ "\2\5\1\u01cb\20\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\1\5"+ "\1\u01cc\4\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\3\5\1\u01cd\2\5\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\4\5\1\u01ce\1\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0"+ "\1\4\1\0\1\5\1\u01cf\12\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\5\5\1\u01d0\13\0\1\4\1\0"+ "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\1\u0175"+ "\2\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\6\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\1\u01bf\5\5\13\0\1\4\1\0"+ "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\4\5"+ "\1\u01d1\1\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\1\5\1\u01d2\1\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\3\5\1\272\2\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\2\5\1\u01d3"+ "\3\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\1\u0127\5\5\13\0\1\4\1\0"+ "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\2\5"+ "\1\u01d4\3\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\1\122\2\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\4\5\1\u01d5"+ "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\2\5\1\u01d6\3\5\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\5\5\1\u01d7\13\0\1\4\1\0\14\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ "\1\0\4\5\1\u01d8\7\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\7\5\1\u0197"+ "\4\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\4\5"+ "\1\u01d9\1\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\2\5\1\164\3\5\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\3\5"+ "\1\u01da\1\5\2\0\6\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0"+ "\1\4\1\0\11\5\1\u0127\2\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\6\5"+ "\1\122\5\5\1\0\23\5\7\4\2\0\4\4\1\0"+ "\1\4\1\0\1\4\3\0\5\4\2\0\2\4\1\u01db"+ "\3\4\13\0\1\4\1\0\14\4\1\0\24\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\2\5\1\271\3\5\13\0\1\4\1\0"+ "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\1\5"+ "\1\u01dc\1\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\56\0\1\u01dd\37\0\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\14\5\1\0\1\u01de\22\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\3\5\1\u01df\2\5\13\0\1\4"+ "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\6\5\13\0\1\4\1\0\2\5\1\u01e0\11\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ "\1\0\7\5\1\u01e1\4\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\2\5\1\u01e2"+ "\11\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\2\5\1\u01e3\11\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\14\5\1\0\1\u0132\22\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\6\5\13\0\1\4\1\0\14\5\1\0\13\5\1\u01e4"+ "\7\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\2\5\1\u01e5\3\5"+ "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\4\5"+ "\1\u01e6\1\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\7\5\1\u01e7\4\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\1\u0132\5\5\13\0\1\4"+ "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\1\5\1\u01e8"+ "\3\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\1\5\1\u01e9\1\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ "\2\5\1\u01ea\20\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\1\5"+ "\1\u0132\4\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\2\5\1\u01eb\11\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\13\5"+ "\1\u01ec\1\5\1\u01ed\5\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\6\5\13\0\1\4\1\0\2\5\1\u01ee\11\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\1\u01ef\5\5\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\6\5\13\0\1\4\1\0\4\5\1\u0132\7\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\2\5\1\130"+ "\3\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\1\u01f0\5\5\13\0\1\4\1\0"+ "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\14\5\1\0\1\u01f1\22\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ "\1\0\2\5\1\u01f2\20\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\2\5\1\u01f3\3\5\13\0\1\4\1\0\14\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\3\5\1\u01f4\2\5"+ "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\7\5\1\u01f5"+ "\4\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\1\5"+ "\1\u01f6\4\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\2\5\1\u01f7\11\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\3\5\1\u01d2\2\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0"+ "\1\4\1\0\7\5\1\u01f8\4\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\1\321\5\5\13\0\1\4\1\0"+ "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\2\5"+ "\1\u01f9\3\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\7\5\1\u01fa\4\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\1\u01fb\5\5\13\0\1\4\1\0\14\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\4\5\1\201\1\5"+ "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\1\5\1\377"+ "\12\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\2\5"+ "\1\u01fc\3\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\1\u0132\13\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\6\5\13\0\1\4\1\0\1\u01fd\13\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\2\5\1\u01fe\11\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\10\5"+ "\1\u01b0\12\5\1\4\6\5\2\0\1\103\2\5\1\u01ff"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\1\u0200\2\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\1\350\5\5"+ "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\1\u0201\5\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\3\5\1\u0202"+ "\2\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\1\5\1\130\1\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\1\5\1\u0132\1\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ "\1\0\7\5\1\u0203\4\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\1\5\1\u0204\4\5\13\0\1\4\1\0"+ "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\14\5\1\0\22\5\1\u0205\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\2\5\1\u0206\3\5\13\0\1\4"+ "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\4\5\1\u0207\1\5\13\0\1\4\1\0\14\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\1\5\1\u0208\1\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\6\5\13\0\1\4\1\0\11\5\1\u0209"+ "\2\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5"+ "\13\0\1\4\1\0\4\5\1\u01bf\7\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\1\5\1\u0132\12\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\4\5"+ "\1\u020a\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\1\u020b\2\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0"+ "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\3\5"+ "\1\u020c\17\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\2\5\1\u020d"+ "\3\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\4\5"+ "\1\u020e\7\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\3\5\1\u020f\2\5\13\0\1\4\1\0\14\5\1\0"+ "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5"+ "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ "\1\0\14\5\1\0\2\5\1\u0210\20\5\1\4\6\5"+ "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0"+ "\5\5\2\0\3\5\1\u0211\2\5\13\0\1\4\1\0"+ "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\4\5"+ "\1\u0212\1\5\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\5\5\1\u01f3\13\0\1\4"+ "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\5\5\1\u0132\13\0\1\4\1\0\14\5\1\0\23\5"+ "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0"+ "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ "\1\5\1\u01f3\12\5\1\0\23\5\1\4\6\5\2\0"+ "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5"+ "\2\0\2\5\1\u01b3\3\5\13\0\1\4\1\0\14\5"+ "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0"+ "\1\5\1\0\1\4\3\0\5\5\2\0\4\5\1\u0213"+ "\1\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4"+ "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\2\5"+ "\1\u0203\11\5\1\0\23\5\1\4\6\5\2\0\1\103"+ "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0"+ "\6\5\13\0\1\4\1\0\2\5\1\u01f6\11\5\1\0"+ "\23\5"; private static int [] zzUnpackTrans() { int [] result = new int[39390]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\3\0\6\1\1\11\4\1\1\11\17\1\2\11\3\1"+ "\1\11\24\1\1\11\5\1\1\11\16\1\1\11\1\0"+ "\14\1\1\11\1\1\1\11\35\1\1\0\43\1\1\11"+ "\10\0\2\1\1\0\4\1\1\11\20\1\1\11\2\1"+ "\1\0\105\1\10\0\15\1\1\11\5\1\1\0\61\1"+ "\2\0\1\1\2\0\22\1\1\0\43\1\4\0\17\1"+ "\1\0\40\1\1\0\26\1\1\11\66\1"; private static int [] zzUnpackAttribute() { int [] result = new int[531]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public ActionScriptTokenMaker() { } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addHyperlinkToken(int, int, int) */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, false); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. * @param hyperlink Whether this token is a hyperlink. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset, boolean hyperlink) { super.addToken(array, start,end, tokenType, startOffset, hyperlink); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.COMMENT_MULTILINE: state = MLC; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public ActionScriptTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public ActionScriptTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 190) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 5: { addNullToken(); return firstToken; } case 30: break; case 22: { addToken(Token.LITERAL_CHAR); } case 31: break; case 21: { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } case 32: break; case 25: { addToken(Token.COMMENT_MULTILINE); } case 33: break; case 20: { start = zzMarkedPos-2; yybegin(MLC); } case 34: break; case 7: { addToken(Token.WHITESPACE); } case 35: break; case 15: { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } case 36: break; case 23: { addToken(Token.ERROR_STRING_DOUBLE); } case 37: break; case 14: { addToken(Token.LITERAL_NUMBER_FLOAT); } case 38: break; case 17: { addToken(Token.RESERVED_WORD); } case 39: break; case 9: { addToken(Token.SEPARATOR); } case 40: break; case 2: { addToken(Token.IDENTIFIER); } case 41: break; case 12: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } case 42: break; case 19: { start = zzMarkedPos-2; yybegin(EOL_COMMENT); } case 43: break; case 27: { addToken(Token.FUNCTION); } case 44: break; case 4: { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; } case 45: break; case 6: { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } case 46: break; case 24: { addToken(Token.DATA_TYPE); } case 47: break; case 1: { addToken(Token.ERROR_IDENTIFIER); } case 48: break; case 16: { addToken(Token.ERROR_CHAR); } case 49: break; case 26: { addToken(Token.LITERAL_BOOLEAN); } case 50: break; case 18: { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } case 51: break; case 29: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } case 52: break; case 28: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } case 53: break; case 13: { addToken(Token.ERROR_NUMBER_FORMAT); } case 54: break; case 3: { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } case 55: break; case 8: { addToken(Token.OPERATOR); } case 56: break; case 10: { } case 57: break; case 11: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } case 58: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case EOL_COMMENT: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } case 532: break; case YYINITIAL: { addNullToken(); return firstToken; } case 533: break; case MLC: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } case 534: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/AssemblerX86TokenMaker.flex000066400000000000000000000414321257417003700330200ustar00rootroot00000000000000/* * 12/06/2004 * * AssemblerX86TokenMaker.java - An object that can take a chunk of text and * return a linked list of tokens representing X86 assembler. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * This class takes plain text and returns tokens representing x86 * assembler.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated AssemblerX86TokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.2 * */ %% %public %class AssemblerX86TokenMaker %extends AbstractJFlexTokenMaker %unicode %ignorecase %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Constructor. We must have this here as JFLex does not generate a * no parameter constructor. */ public AssemblerX86TokenMaker() { super(); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { ";", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} Letter = ([A-Za-z_]) Digit = ([0-9]) Number = ({Digit}+) Identifier = (({Letter}|{Digit})[^ \t\f\n\,\.\+\-\*\/\%\[\]]+) UnclosedStringLiteral = ([\"][^\"]*) StringLiteral = ({UnclosedStringLiteral}[\"]) UnclosedCharLiteral = ([\'][^\']*) CharLiteral = ({UnclosedCharLiteral}[\']) CommentBegin = ([;]) LineTerminator = (\n) WhiteSpace = ([ \t\f]) Label = (({Letter}|{Digit})+[\:]) Operator = ("+"|"-"|"*"|"/"|"%"|"^"|"|"|"&"|"~"|"!"|"="|"<"|">") %% { /* Keywords */ ".186" | ".286" | ".286P" | ".287" | ".386" | ".386P" | ".387" | ".486" | ".486P" | ".586" | ".586P" | ".686" | ".686P" | ".8086" | ".8087" | ".ALPHA" | ".BREAK" | ".BSS" | ".CODE" | ".CONST" | ".CONTINUE" | ".CREF" | ".DATA" | ".DATA?" | ".DOSSEG" | ".ELSE" | ".ELSEIF" | ".ENDIF" | ".ENDW" | ".ERR" | ".ERR1" | ".ERR2" | ".ERRB" | ".ERRDEF" | ".ERRDIF" | ".ERRDIFI" | ".ERRE" | ".ERRIDN" | ".ERRIDNI" | ".ERRNB" | ".ERRNDEF" | ".ERRNZ" | ".EXIT" | ".FARDATA" | ".FARDATA?" | ".IF" | ".K3D" | ".LALL" | ".LFCOND" | ".LIST" | ".LISTALL" | ".LISTIF" | ".LISTMACRO" | ".LISTMACROALL" | ".MMX" | ".MODEL" | ".MSFLOAT" | ".NO87" | ".NOCREF" | ".NOLIST" | ".NOLISTIF" | ".NOLISTMACRO" | ".RADIX" | ".REPEAT" | ".SALL" | ".SEQ" | ".SFCOND" | ".STACK" | ".STARTUP" | ".TEXT" | ".TFCOND" | ".UNTIL" | ".UNTILCXZ" | ".WHILE" | ".XALL" | ".XCREF" | ".XLIST" | ".XMM" | "__FILE__" | "__LINE__" | "A16" | "A32" | "ADDR" | "ALIGN" | "ALIGNB" | "ASSUME" | "BITS" | "CARRY?" | "CATSTR" | "CODESEG" | "COMM" | "COMMENT" | "COMMON" | "DATASEG" | "DOSSEG" | "ECHO" | "ELSE" | "ELSEIF" | "ELSEIF1" | "ELSEIF2" | "ELSEIFB" | "ELSEIFDEF" | "ELSEIFE" | "ELSEIFIDN" | "ELSEIFNB" | "ELSEIFNDEF" | "END" | "ENDIF" | "ENDM" | "ENDP" | "ENDS" | "ENDSTRUC" | "EVEN" | "EXITM" | "EXPORT" | "EXTERN" | "EXTERNDEF" | "EXTRN" | "FAR" | "FOR" | "FORC" | "GLOBAL" | "GOTO" | "GROUP" | "HIGH" | "HIGHWORD" | "IEND" | "IF" | "IF1" | "IF2" | "IFB" | "IFDEF" | "IFDIF" | "IFDIFI" | "IFE" | "IFIDN" | "IFIDNI" | "IFNB" | "IFNDEF" | "IMPORT" | "INCBIN" | "INCLUDE" | "INCLUDELIB" | "INSTR" | "INVOKE" | "IRP" | "IRPC" | "ISTRUC" | "LABEL" | "LENGTH" | "LENGTHOF" | "LOCAL" | "LOW" | "LOWWORD" | "LROFFSET" | "MACRO" | "NAME" | "NEAR" | "NOSPLIT" | "O16" | "O32" | "OFFSET" | "OPATTR" | "OPTION" | "ORG" | "OVERFLOW?" | "PAGE" | "PARITY?" | "POPCONTEXT" | "PRIVATE" | "PROC" | "PROTO" | "PTR" | "PUBLIC" | "PURGE" | "PUSHCONTEXT" | "RECORD" | "REPEAT" | "REPT" | "SECTION" | "SEG" | "SEGMENT" | "SHORT" | "SIGN?" | "SIZE" | "SIZEOF" | "SIZESTR" | "STACK" | "STRUC" | "STRUCT" | "SUBSTR" | "SUBTITLE" | "SUBTTL" | "THIS" | "TITLE" | "TYPE" | "TYPEDEF" | "UNION" | "USE16" | "USE32" | "USES" | "WHILE" | "WRT" | "ZERO?" { addToken(Token.PREPROCESSOR); } "DB" | "DW" | "DD" | "DF" | "DQ" | "DT" | "RESB" | "RESW" | "RESD" | "RESQ" | "REST" | "EQU" | "TEXTEQU" | "TIMES" | "DUP" { addToken(Token.FUNCTION); } "BYTE" | "WORD" | "DWORD" | "FWORD" | "QWORD" | "TBYTE" | "SBYTE" | "TWORD" | "SWORD" | "SDWORD" | "REAL4" | "REAL8" | "REAL10" { addToken(Token.DATA_TYPE); } /* Registers */ "AL" | "BL" | "CL" | "DL" | "AH" | "BH" | "CH" | "DH" | "AX" | "BX" | "CX" | "DX" | "SI" | "DI" | "SP" | "BP" | "EAX" | "EBX" | "ECX" | "EDX" | "ESI" | "EDI" | "ESP" | "EBP" | "CS" | "DS" | "SS" | "ES" | "FS" | "GS" | "ST" | "ST0" | "ST1" | "ST2" | "ST3" | "ST4" | "ST5" | "ST6" | "ST7" | "MM0" | "MM1" | "MM2" | "MM3" | "MM4" | "MM5" | "MM6" | "MM7" | "XMM0" | "XMM1" | "XMM2" | "XMM3" | "XMM4" | "XMM5" | "XMM6" | "XMM7" | "CR0" | "CR2" | "CR3" | "CR4" | "DR0" | "DR1" | "DR2" | "DR3" | "DR4" | "DR5" | "DR6" | "DR7" | "TR3" | "TR4" | "TR5" | "TR6" | "TR7" { addToken(Token.VARIABLE); } /* Pentium III Instructions. */ "AAA" | "AAD" | "AAM" | "AAS" | "ADC" | "ADD" | "ADDPS" | "ADDSS" | "AND" | "ANDNPS" | "ANDPS" | "ARPL" | "BOUND" | "BSF" | "BSR" | "BSWAP" | "BT" | "BTC" | "BTR" | "BTS" | "CALL" | "CBW" | "CDQ" | "CLC" | "CLD" | "CLI" | "CLTS" | "CMC" | "CMOVA" | "CMOVAE" | "CMOVB" | "CMOVBE" | "CMOVC" | "CMOVE" | "CMOVG" | "CMOVGE" | "CMOVL" | "CMOVLE" | "CMOVNA" | "CMOVNAE" | "CMOVNB" | "CMOVNBE" | "CMOVNC" | "CMOVNE" | "CMOVNG" | "CMOVNGE" | "CMOVNL" | "CMOVNLE" | "CMOVNO" | "CMOVNP" | "CMOVNS" | "CMOVNZ" | "CMOVO" | "CMOVP" | "CMOVPE" | "CMOVPO" | "CMOVS" | "CMOVZ" | "CMP" | "CMPPS" | "CMPS" | "CMPSB" | "CMPSD" | "CMPSS" | "CMPSW" | "CMPXCHG" | "CMPXCHGB" | "COMISS" | "CPUID" | "CWD" | "CWDE" | "CVTPI2PS" | "CVTPS2PI" | "CVTSI2SS" | "CVTSS2SI" | "CVTTPS2PI" | "CVTTSS2SI" | "DAA" | "DAS" | "DEC" | "DIV" | "DIVPS" | "DIVSS" | "EMMS" | "ENTER" | "F2XM1" | "FABS" | "FADD" | "FADDP" | "FBLD" | "FBSTP" | "FCHS" | "FCLEX" | "FCMOVB" | "FCMOVBE" | "FCMOVE" | "FCMOVNB" | "FCMOVNBE" | "FCMOVNE" | "FCMOVNU" | "FCMOVU" | "FCOM" | "FCOMI" | "FCOMIP" | "FCOMP" | "FCOMPP" | "FCOS" | "FDECSTP" | "FDIV" | "FDIVP" | "FDIVR" | "FDIVRP" | "FFREE" | "FIADD" | "FICOM" | "FICOMP" | "FIDIV" | "FIDIVR" | "FILD" | "FIMUL" | "FINCSTP" | "FINIT" | "FIST" | "FISTP" | "FISUB" | "FISUBR" | "FLD1" | "FLDCW" | "FLDENV" | "FLDL2E" | "FLDL2T" | "FLDLG2" | "FLDLN2" | "FLDPI" | "FLDZ" | "FMUL" | "FMULP" | "FNCLEX" | "FNINIT" | "FNOP" | "FNSAVE" | "FNSTCW" | "FNSTENV" | "FNSTSW" | "FPATAN" | "FPREM" | "FPREMI" | "FPTAN" | "FRNDINT" | "FRSTOR" | "FSAVE" | "FSCALE" | "FSIN" | "FSINCOS" | "FSQRT" | "FST" | "FSTCW" | "FSTENV" | "FSTP" | "FSTSW" | "FSUB" | "FSUBP" | "FSUBR" | "FSUBRP" | "FTST" | "FUCOM" | "FUCOMI" | "FUCOMIP" | "FUCOMP" | "FUCOMPP" | "FWAIT" | "FXAM" | "FXCH" | "FXRSTOR" | "FXSAVE" | "FXTRACT" | "FYL2X" | "FYL2XP1" | "HLT" | "IDIV" | "IMUL" | "IN" | "INC" | "INS" | "INSB" | "INSD" | "INSW" | "INT" | "INTO" | "INVD" | "INVLPG" | "IRET" | "JA" | "JAE" | "JB" | "JBE" | "JC" | "JCXZ" | "JE" | "JECXZ" | "JG" | "JGE" | "JL" | "JLE" | "JMP" | "JNA" | "JNAE" | "JNB" | "JNBE" | "JNC" | "JNE" | "JNG" | "JNGE" | "JNL" | "JNLE" | "JNO" | "JNP" | "JNS" | "JNZ" | "JO" | "JP" | "JPE" | "JPO" | "JS" | "JZ" | "LAHF" | "LAR" | "LDMXCSR" | "LDS" | "LEA" | "LEAVE" | "LES" | "LFS" | "LGDT" | "LGS" | "LIDT" | "LLDT" | "LMSW" | "LOCK" | "LODS" | "LODSB" | "LODSD" | "LODSW" | "LOOP" | "LOOPE" | "LOOPNE" | "LOOPNZ" | "LOOPZ" | "LSL" | "LSS" | "LTR" | "MASKMOVQ" | "MAXPS" | "MAXSS" | "MINPS" | "MINSS" | "MOV" | "MOVAPS" | "MOVD" | "MOVHLPS" | "MOVHPS" | "MOVLHPS" | "MOVLPS" | "MOVMSKPS" | "MOVNTPS" | "MOVNTQ" | "MOVQ" | "MOVS" | "MOVSB" | "MOVSD" | "MOVSS" | "MOVSW" | "MOVSX" | "MOVUPS" | "MOVZX" | "MUL" | "MULPS" | "MULSS" | "NEG" | "NOP" | "NOT" | "OR" | "ORPS" | "OUT" | "OUTS" | "OUTSB" | "OUTSD" | "OUTSW" | "PACKSSDW" | "PACKSSWB" | "PACKUSWB" | "PADDB" | "PADDD" | "PADDSB" | "PADDSW" | "PADDUSB" | "PADDUSW" | "PADDW" | "PAND" | "PANDN" | "PAVGB" | "PAVGW" | "PCMPEQB" | "PCMPEQD" | "PCMPEQW" | "PCMPGTB" | "PCMPGTD" | "PCMPGTW" | "PEXTRW" | "PINSRW" | "PMADDWD" | "PMAXSW" | "PMAXUB" | "PMINSW" | "PMINUB" | "PMOVMSKB" | "PMULHUW" | "PMULHW" | "PMULLW" | "POP" | "POPA" | "POPAD" | "POPAW" | "POPF" | "POPFD" | "POPFW" | "POR" | "PREFETCH" | "PSADBW" | "PSHUFW" | "PSLLD" | "PSLLQ" | "PSLLW" | "PSRAD" | "PSRAW" | "PSRLD" | "PSRLQ" | "PSRLW" | "PSUBB" | "PSUBD" | "PSUBSB" | "PSUBSW" | "PSUBUSB" | "PSUBUSW" | "PSUBW" | "PUNPCKHBW" | "PUNPCKHDQ" | "PUNPCKHWD" | "PUNPCKLBW" | "PUNPCKLDQ" | "PUNPCKLWD" | "PUSH" | "PUSHA" | "PUSHAD" | "PUSHAW" | "PUSHF" | "PUSHFD" | "PUSHFW" | "PXOR" | "RCL" | "RCR" | "RDMSR" | "RDPMC" | "RDTSC" | "REP" | "REPE" | "REPNE" | "REPNZ" | "REPZ" | "RET" | "RETF" | "RETN" | "ROL" | "ROR" | "RSM" | "SAHF" | "SAL" | "SAR" | "SBB" | "SCAS" | "SCASB" | "SCASD" | "SCASW" | "SETA" | "SETAE" | "SETB" | "SETBE" | "SETC" | "SETE" | "SETG" | "SETGE" | "SETL" | "SETLE" | "SETNA" | "SETNAE" | "SETNB" | "SETNBE" | "SETNC" | "SETNE" | "SETNG" | "SETNGE" | "SETNL" | "SETNLE" | "SETNO" | "SETNP" | "SETNS" | "SETNZ" | "SETO" | "SETP" | "SETPE" | "SETPO" | "SETS" | "SETZ" | "SFENCE" | "SGDT" | "SHL" | "SHLD" | "SHR" | "SHRD" | "SHUFPS" | "SIDT" | "SLDT" | "SMSW" | "SQRTPS" | "SQRTSS" | "STC" | "STD" | "STI" | "STMXCSR" | "STOS" | "STOSB" | "STOSD" | "STOSW" | "STR" | "SUB" | "SUBPS" | "SUBSS" | "SYSENTER" | "SYSEXIT" | "TEST" | "UB2" | "UCOMISS" | "UNPCKHPS" | "UNPCKLPS" | "WAIT" | "WBINVD" | "VERR" | "VERW" | "WRMSR" | "XADD" | "XCHG" | "XLAT" | "XLATB" | "XOR" | "XORPS" { addToken(Token.RESERVED_WORD); } } { {LineTerminator} { addNullToken(); return firstToken; } {WhiteSpace}+ { addToken(Token.WHITESPACE); } /* String/Character Literals. */ {CharLiteral} { addToken(Token.LITERAL_CHAR); } {UnclosedCharLiteral} { addToken(Token.ERROR_CHAR); /*addNullToken(); return firstToken;*/ } {StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } {UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } /* Labels. */ {Label} { addToken(Token.PREPROCESSOR); } ^%({Letter}|{Digit})* { addToken(Token.FUNCTION); } /* Comment Literals. */ {CommentBegin}.* { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; } /* Operators. */ {Operator} { addToken(Token.OPERATOR); } /* Numbers */ {Number} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } /* Ended with a line not in a string or comment. */ <> { addNullToken(); return firstToken; } /* Catch any other (unhandled) characters. */ {Identifier} { addToken(Token.IDENTIFIER); } . { addToken(Token.IDENTIFIER); } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/AssemblerX86TokenMaker.java000066400000000000000000002341111257417003700330010ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 2/1/08 1:33 PM */ /* * 12/06/2004 * * AssemblerX86TokenMaker.java - An object that can take a chunk of text and * return a linked list of tokens representing X86 assembler. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * This class takes plain text and returns tokens representing x86 * assembler.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated AssemblerX86TokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.2 * */ public class AssemblerX86TokenMaker extends AbstractJFlexTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int YYINITIAL = 0; /** * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l * at the beginning of a line * l is of the form l = 2*k, k a non negative integer */ private static final int ZZ_LEXSTATE[] = { 0, 1 }; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\10\1\7\1\0\1\10\23\0\1\10\1\14\1\4\2\0"+ "\1\13\1\14\1\5\2\0\1\12\1\12\1\3\1\12\1\15\1\12"+ "\1\27\1\16\1\21\1\24\1\25\1\26\1\20\1\23\1\17\1\2"+ "\1\11\1\6\1\14\1\14\1\14\1\50\1\0\1\30\1\33\1\40"+ "\1\42\1\35\1\47\1\51\1\32\1\45\1\1\1\36\1\31\1\55"+ "\1\43\1\41\1\22\1\56\1\34\1\37\1\44\1\46\1\61\1\52"+ "\1\54\1\60\1\53\1\3\1\0\1\3\1\14\1\57\1\0\1\30"+ "\1\33\1\40\1\42\1\35\1\47\1\51\1\32\1\45\1\1\1\36"+ "\1\31\1\55\1\43\1\41\1\22\1\56\1\34\1\37\1\44\1\46"+ "\1\61\1\52\1\54\1\60\1\53\1\0\1\14\1\0\1\14\uff81\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\2\0\2\1\1\2\1\3\1\4\1\5\1\6\1\7"+ "\1\10\32\1\1\11\1\1\1\12\5\13\2\1\1\14"+ "\1\15\25\0\16\1\2\16\23\1\1\13\11\1\1\16"+ "\14\1\2\16\7\1\1\16\10\1\1\13\4\1\1\11"+ "\3\1\1\16\1\1\1\11\15\1\1\13\1\12\13\1"+ "\1\16\42\1\31\0\1\12\11\0\20\1\1\13\1\12"+ "\14\1\2\13\3\1\1\13\4\1\1\12\6\1\1\13"+ "\3\1\1\13\5\1\1\12\5\1\1\13\4\1\1\12"+ "\1\1\1\13\2\1\1\13\10\1\1\13\4\1\1\13"+ "\4\1\1\13\5\1\1\12\3\1\3\13\24\1\1\13"+ "\37\1\1\13\3\1\1\13\3\1\1\0\1\12\10\0"+ "\1\12\17\0\3\1\1\13\11\1\1\13\14\1\2\13"+ "\1\1\1\17\1\13\3\1\2\12\10\1\1\12\7\1"+ "\1\12\1\13\12\1\1\12\15\1\1\13\5\1\2\13"+ "\1\1\1\13\14\1\1\13\3\1\1\13\4\1\1\0"+ "\1\12\3\0\1\12\5\0\1\12\5\0\16\1\1\12"+ "\5\1\1\12\16\1\1\12\1\1\1\13\4\1\1\13"+ "\1\1\1\13\4\1\7\0\1\12\7\1\2\12\10\1"+ "\1\0\1\12\2\0\1\12\1\0\4\1\1\12\1\1"+ "\3\0\2\1\2\0\1\1\1\12\2\0"; private static int [] zzUnpackAction() { int [] result = new int[668]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\62\0\144\0\226\0\310\0\372\0\u012c\0\u015e"+ "\0\144\0\u0190\0\144\0\u01c2\0\u01f4\0\u0226\0\u0258\0\u028a"+ "\0\u02bc\0\u02ee\0\u0320\0\u0352\0\u0384\0\u03b6\0\u03e8\0\u041a"+ "\0\u044c\0\u047e\0\u04b0\0\u04e2\0\u0514\0\u0546\0\u0578\0\u05aa"+ "\0\u05dc\0\u060e\0\u0640\0\u0672\0\u06a4\0\u06d6\0\u0708\0\u0708"+ "\0\u073a\0\u076c\0\u079e\0\u0352\0\u07d0\0\u0802\0\u0834\0\144"+ "\0\144\0\u0866\0\u0898\0\u08ca\0\u08fc\0\u092e\0\u0960\0\u0992"+ "\0\u09c4\0\u09f6\0\u0a28\0\u0a5a\0\u0a8c\0\u0abe\0\u0af0\0\u0b22"+ "\0\u0b54\0\u0b86\0\u0bb8\0\u0bea\0\u0c1c\0\u0c4e\0\u0c80\0\u0cb2"+ "\0\u0ce4\0\u0d16\0\u0d48\0\u0d7a\0\u0dac\0\u0dde\0\u0e10\0\u0e42"+ "\0\u0e74\0\u0ea6\0\u0ed8\0\u0f0a\0\u0f3c\0\u0352\0\u0f6e\0\u0fa0"+ "\0\u0fd2\0\u1004\0\u1036\0\u1068\0\u109a\0\u10cc\0\u10fe\0\u1130"+ "\0\u1162\0\u1194\0\u11c6\0\u11f8\0\u122a\0\u125c\0\u128e\0\u12c0"+ "\0\u12f2\0\u1324\0\u1356\0\u1388\0\u13ba\0\u13ec\0\u141e\0\u1450"+ "\0\u1482\0\u14b4\0\u14e6\0\u1518\0\u154a\0\u157c\0\u15ae\0\u15e0"+ "\0\u1612\0\u1644\0\u1676\0\u16a8\0\u16da\0\u170c\0\u173e\0\u1770"+ "\0\u17a2\0\u17d4\0\u1806\0\u1838\0\u186a\0\u189c\0\u18ce\0\u1900"+ "\0\u1932\0\u1964\0\u1996\0\u19c8\0\u19fa\0\u1a2c\0\u1a5e\0\u1a90"+ "\0\u1ac2\0\u1af4\0\u1b26\0\u1b58\0\u1b8a\0\u1bbc\0\u1bee\0\u0352"+ "\0\u1c20\0\u1c52\0\u1c84\0\u1cb6\0\u1ce8\0\u186a\0\u1d1a\0\u1d4c"+ "\0\u1d7e\0\u1db0\0\u1de2\0\u1e14\0\u1e46\0\u1e78\0\u1eaa\0\u1edc"+ "\0\u1f0e\0\u1f40\0\u1f72\0\u1fa4\0\u1fd6\0\u2008\0\u203a\0\u206c"+ "\0\u209e\0\u20d0\0\u2102\0\u2134\0\u2166\0\u2198\0\u21ca\0\u21fc"+ "\0\u222e\0\u2260\0\u2292\0\u22c4\0\u22f6\0\u2328\0\u235a\0\u238c"+ "\0\u23be\0\u23f0\0\u2422\0\u2454\0\u2486\0\u24b8\0\u24ea\0\u251c"+ "\0\u254e\0\u2580\0\u25b2\0\u25e4\0\u2616\0\u2648\0\u267a\0\u26ac"+ "\0\u26de\0\u2710\0\u2742\0\u2774\0\u27a6\0\u27d8\0\u280a\0\u283c"+ "\0\u286e\0\u07d0\0\u28a0\0\u28d2\0\u2904\0\u2936\0\u2968\0\u299a"+ "\0\u29cc\0\u29fe\0\u2a30\0\u2a62\0\u2a94\0\u2ac6\0\u2af8\0\u2b2a"+ "\0\u2b5c\0\u2b8e\0\u2bc0\0\u2bf2\0\u2c24\0\u2c56\0\u2c88\0\u2cba"+ "\0\u2cec\0\u2d1e\0\u2d50\0\u2d82\0\144\0\u2db4\0\u2de6\0\u2e18"+ "\0\u2e4a\0\u2e7c\0\u2eae\0\u2ee0\0\u2f12\0\u2f44\0\u2f76\0\u2fa8"+ "\0\u2fda\0\u300c\0\u303e\0\u3070\0\u30a2\0\u30d4\0\u3106\0\u3138"+ "\0\u316a\0\u319c\0\u31ce\0\u3200\0\u3232\0\u3264\0\u3296\0\u0352"+ "\0\u32c8\0\u32fa\0\u332c\0\u335e\0\u3390\0\u33c2\0\u33f4\0\u3426"+ "\0\u3458\0\u348a\0\u34bc\0\u34ee\0\u3520\0\u3552\0\u3584\0\u35b6"+ "\0\u35e8\0\u361a\0\u364c\0\u367e\0\u36b0\0\u36e2\0\u3714\0\u3746"+ "\0\u3778\0\u37aa\0\u37dc\0\u380e\0\u3840\0\u3872\0\u38a4\0\u38d6"+ "\0\u3908\0\u393a\0\u396c\0\u399e\0\u39d0\0\u3a02\0\u3a34\0\u3a66"+ "\0\u3a98\0\u3aca\0\u3afc\0\u3b2e\0\u3b60\0\u3b92\0\u3bc4\0\u3bf6"+ "\0\u3c28\0\u3c5a\0\u3c8c\0\u3cbe\0\u3cf0\0\u3d22\0\u3d54\0\u3d86"+ "\0\u3db8\0\u3dea\0\u3e1c\0\u3e4e\0\u3e80\0\u3eb2\0\u3ee4\0\u3f16"+ "\0\u3f48\0\u3f7a\0\u3fac\0\u3fde\0\u4010\0\u36e2\0\u4042\0\u4074"+ "\0\u40a6\0\u40d8\0\u410a\0\u413c\0\u416e\0\u41a0\0\u41d2\0\u4204"+ "\0\u4236\0\u4268\0\u429a\0\u42cc\0\u42fe\0\u4330\0\u4362\0\u4394"+ "\0\u43c6\0\u43f8\0\u442a\0\u445c\0\u448e\0\u44c0\0\u44f2\0\u4524"+ "\0\u4556\0\u4588\0\u45ba\0\u45ec\0\u461e\0\u3b92\0\u4650\0\u4682"+ "\0\u46b4\0\u361a\0\u46e6\0\u4718\0\u474a\0\u477c\0\u47ae\0\u47e0"+ "\0\u4812\0\u4844\0\u4876\0\u48a8\0\u48da\0\u490c\0\u493e\0\u4970"+ "\0\u49a2\0\u49d4\0\u4a06\0\u4a38\0\u4a6a\0\u4a9c\0\u4ace\0\u4b00"+ "\0\u4b32\0\u4b64\0\u4b96\0\u4bc8\0\u4bfa\0\u4c2c\0\u4c5e\0\u4c90"+ "\0\u4cc2\0\u4cf4\0\u4d26\0\u4d58\0\u4d8a\0\u4dbc\0\u410a\0\u4dee"+ "\0\u4e20\0\u4e52\0\u4e84\0\u4eb6\0\u4ee8\0\u4f1a\0\u4f4c\0\u4f7e"+ "\0\u4fb0\0\u4fe2\0\u5014\0\u5046\0\u5078\0\u50aa\0\u50dc\0\u510e"+ "\0\u5140\0\u5172\0\u51a4\0\u51d6\0\u5208\0\u523a\0\u526c\0\u529e"+ "\0\u52d0\0\u5302\0\u5334\0\u5366\0\u5398\0\u53ca\0\u53fc\0\u542e"+ "\0\u5460\0\u5492\0\u54c4\0\u54f6\0\u5528\0\u555a\0\u558c\0\u55be"+ "\0\u55f0\0\u5622\0\u55f0\0\u5654\0\u5686\0\u56b8\0\u56ea\0\u571c"+ "\0\u574e\0\u5780\0\u57b2\0\u4d58\0\u57e4\0\u076c\0\u5816\0\u5848"+ "\0\u587a\0\u58ac\0\u0352\0\u58de\0\u5910\0\u5942\0\u5974\0\u59a6"+ "\0\u1f40\0\u59d8\0\u5a0a\0\u5a3c\0\u5a6e\0\u5aa0\0\u5ad2\0\u5b04"+ "\0\u5b36\0\u5b68\0\u5b9a\0\u5bcc\0\u5bfe\0\u5c30\0\u5c62\0\u5c94"+ "\0\u5cc6\0\u5cf8\0\u5d2a\0\u5d5c\0\u5d8e\0\u5dc0\0\u5df2\0\u5e24"+ "\0\u5e56\0\u5e88\0\u5eba\0\u5eec\0\u5f1e\0\u5f50\0\u5f82\0\u5fb4"+ "\0\u5fe6\0\u6018\0\u604a\0\u607c\0\u60ae\0\u60e0\0\u6112\0\u6144"+ "\0\u6176\0\u61a8\0\u5460\0\u0834\0\u61da\0\u620c\0\u623e\0\u6270"+ "\0\u62a2\0\u62d4\0\u6306\0\u6338\0\u636a\0\u639c\0\u63ce\0\u6400"+ "\0\u6432\0\u6464\0\u6496\0\u64c8\0\u64fa\0\u652c\0\u655e\0\u6590"+ "\0\u65c2\0\u65f4\0\u6626\0\u6658\0\u668a\0\u66bc\0\u66ee\0\u6720"+ "\0\u6752\0\u6784\0\u67b6\0\u67e8\0\u681a\0\u684c\0\u687e\0\u68b0"+ "\0\u68e2\0\u6914\0\u6946\0\u6978\0\u69aa\0\u69dc\0\u6a0e\0\u6a40"+ "\0\u6a72\0\u6aa4\0\u6ad6\0\u6b08\0\u6b3a\0\u6b6c\0\u6b9e\0\u6bd0"+ "\0\u6c02\0\u6c34\0\u6c66\0\u4236\0\u6c98\0\u6cca\0\u65f4\0\u6cfc"+ "\0\u6d2e\0\u6d60\0\u6d92\0\u6dc4\0\u6df6\0\u6e28\0\u6e5a\0\u5a6e"+ "\0\u6e8c\0\u6ebe\0\u6ef0\0\u6f22\0\u6f54\0\u6f86\0\u6fb8\0\u6fea"+ "\0\u701c\0\u704e\0\u7080\0\u70b2\0\u70e4\0\u7116\0\u7148\0\u717a"+ "\0\u61da\0\u71ac\0\u71de\0\u7210\0\u7242\0\u1194\0\u7274\0\u72a6"+ "\0\u72d8\0\u730a\0\u733c\0\u736e\0\u73a0\0\u73d2\0\u7404\0\u7436"+ "\0\u7468\0\u749a\0\u74cc\0\u74fe\0\u7530\0\u7562\0\u7594\0\u587a"+ "\0\u75c6\0\u75f8\0\u762a\0\u765c\0\u768e\0\u76c0\0\u76f2\0\u7724"+ "\0\u7756\0\u7788\0\u77ba\0\u77ec\0\u781e\0\u7850\0\u7882\0\u4ee8"+ "\0\u78b4\0\u78e6\0\u7918\0\u794a\0\u797c\0\u79ae\0\u79e0\0\u7a12"+ "\0\u7a44\0\u7a76\0\u7aa8\0\u7ada\0\u7b0c\0\u7b3e\0\u7b70\0\u7ba2"+ "\0\u6d60\0\u7bd4\0\u7c06\0\u7c38"; private static int [] zzUnpackRowMap() { int [] result = new int[668]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\3\1\4\1\5\1\3\1\6\1\7\1\10\1\11"+ "\1\12\1\3\3\13\1\14\4\5\1\15\5\5\1\16"+ "\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\26"+ "\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\3"+ "\1\36\1\37\1\40\1\41\1\42\1\43\1\44\1\24"+ "\1\45\1\3\1\4\1\5\1\3\1\6\1\7\1\10"+ "\1\11\1\12\1\3\1\13\1\46\1\13\1\14\4\5"+ "\1\15\5\5\1\16\1\17\1\20\1\21\1\22\1\23"+ "\1\24\1\25\1\26\1\27\1\30\1\31\1\32\1\33"+ "\1\34\1\35\1\3\1\36\1\37\1\40\1\41\1\42"+ "\1\43\1\44\1\24\1\45\62\0\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\4\24\1\51"+ "\5\24\2\52\1\24\1\52\1\24\1\53\1\24\1\54"+ "\1\55\1\54\1\24\1\56\4\24\1\47\1\52\1\24"+ "\1\54\1\24\1\57\4\24\1\47\1\24\1\5\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\4\5\1\24"+ "\5\5\20\24\1\47\11\24\4\6\1\60\55\6\5\7"+ "\1\61\54\7\7\10\1\0\52\10\10\0\1\12\67\0"+ "\1\62\1\63\1\64\1\65\2\0\1\65\2\64\1\0"+ "\1\66\1\67\1\0\1\70\1\71\1\72\1\73\1\74"+ "\1\75\1\0\1\76\1\77\1\100\1\101\1\102\1\103"+ "\2\0\1\104\1\0\1\105\1\106\4\0\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24"+ "\1\107\3\24\1\110\1\111\1\24\1\112\1\113\1\114"+ "\2\24\1\115\1\116\1\117\1\24\1\47\3\24\1\120"+ "\1\121\4\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\1\122\5\24\1\123\3\24\1\124"+ "\1\125\1\126\1\24\1\127\2\24\1\130\2\24\1\131"+ "\1\132\4\24\1\47\3\24\1\126\5\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24"+ "\1\133\1\134\2\24\1\135\1\136\1\24\1\137\1\24"+ "\1\140\1\141\1\24\1\142\1\134\1\24\1\143\1\47"+ "\1\144\3\24\1\145\4\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\13\24\1\146\13\24"+ "\1\147\2\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\4\24\1\126\6\24"+ "\2\126\4\24\1\150\1\24\1\151\2\24\1\152\1\153"+ "\2\24\1\47\3\24\1\126\3\24\1\154\1\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\17\24\1\155\1\24\1\156\2\157\1\160\5\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\12\24\1\161\1\162\1\24\1\163\3\24"+ "\1\164\1\165\1\24\1\166\1\167\4\24\1\47\3\24"+ "\1\170\1\171\1\172\2\24\1\173\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\4\24\1\126\5\24\1\174\1\134\1\175"+ "\1\176\1\24\1\177\1\24\1\126\1\200\1\24\1\43"+ "\1\24\1\201\1\202\1\203\1\204\1\47\1\134\1\205"+ "\2\24\1\145\1\206\1\24\1\207\1\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24"+ "\1\210\5\24\1\211\1\212\1\126\1\213\1\214\2\24"+ "\1\126\1\24\1\215\1\216\5\24\1\47\1\24\1\217"+ "\1\24\1\126\1\220\3\24\1\221\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\1\122\3\24"+ "\1\222\1\24\1\123\7\24\1\223\11\24\1\224\1\225"+ "\1\47\10\24\1\226\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\12\24\1\227\2\126\1\230"+ "\1\231\1\232\1\24\1\126\1\24\1\233\1\230\1\24"+ "\1\230\1\234\1\235\1\230\1\47\1\24\1\236\1\24"+ "\1\126\1\24\1\230\3\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\12\24\1\237\4\24"+ "\1\240\3\24\1\241\6\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\14\24"+ "\1\242\1\243\1\244\1\245\7\24\1\246\2\24\1\47"+ "\1\24\1\205\5\24\1\247\1\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\16\24\1\250"+ "\1\251\1\24\1\252\2\24\1\253\1\254\3\24\1\255"+ "\1\47\4\24\1\256\4\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\15\24\1\257\3\24"+ "\1\260\1\261\2\24\1\262\4\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\3\24\1\263\1\264\5\24\1\265\1\266\1\24\1\267"+ "\1\270\2\24\1\271\1\272\1\273\1\274\1\275\1\276"+ "\1\277\1\300\1\301\1\47\1\24\1\302\1\24\1\303"+ "\1\304\2\24\1\305\1\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\13\24\1\306\2\24"+ "\1\307\2\24\1\126\1\24\1\310\6\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\12\24\1\311\1\24\1\312\1\313\1\314\4\24"+ "\1\315\6\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\17\24\1\316\12\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\12\24\1\317\1\320\6\24\1\321"+ "\1\322\6\24\1\47\4\24\1\323\4\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24"+ "\1\324\10\24\1\325\3\24\1\326\1\327\1\24\1\47"+ "\4\24\1\231\4\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\32\24\1\47\1\24\1\205"+ "\7\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\32\24\1\47\6\24\1\330\2\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\17\24\1\331\12\24\1\47\11\24\1\0\2\46\13\0"+ "\32\46\1\0\11\46\3\47\1\0\3\47\2\0\1\47"+ "\2\0\1\47\1\0\45\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\17\24\1\54\3\24\1\54"+ "\6\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\17\24\1\54\12\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\22\24\1\332\7\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\32\24\1\47\3\24\1\333\5\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\4\24\1\54"+ "\5\24\2\52\1\24\1\52\1\24\1\54\1\24\3\54"+ "\6\24\1\47\1\52\1\24\1\54\6\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24"+ "\1\54\25\24\1\47\11\24\17\0\1\334\71\0\1\335"+ "\51\0\1\336\61\0\1\337\73\0\1\340\60\0\1\341"+ "\14\0\1\342\1\0\1\343\46\0\1\344\2\0\1\345"+ "\52\0\1\346\4\0\1\347\55\0\1\350\2\0\1\351"+ "\6\0\1\352\10\0\1\353\31\0\1\354\65\0\1\341"+ "\4\0\1\355\6\0\1\356\2\0\1\343\46\0\1\357"+ "\4\0\1\360\50\0\1\361\10\0\1\362\61\0\1\363"+ "\55\0\1\364\11\0\1\343\61\0\1\365\55\0\1\366"+ "\46\0\1\367\63\0\1\370\57\0\1\341\1\371\6\0"+ "\1\372\14\0\1\373\43\0\1\374\1\0\1\375\13\0"+ "\1\376\4\0\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\16\24\1\377\3\24\1\u0100\1\24"+ "\1\u0101\1\u0102\4\24\1\47\1\u0103\7\24\1\u0104\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\17\24\1\u0105\3\24\1\u0106\3\24\1\u0107\2\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\32\24\1\47\3\24\1\u0108\5\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\12\24\1\u0109\1\u010a\1\u010b\1\24\1\u010c\11\24\1\u010d"+ "\1\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\32\24\1\47\4\24\1\u010e"+ "\4\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\4\24\1\u010f\11\24\1\54\13\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\16\24\1\u0110\13\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\25\24\1\u0111\4\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\15\24\1\u0112"+ "\1\u0113\2\24\1\u0114\3\24\1\u0115\4\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\23\24\1\142\6\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24"+ "\1\u0116\10\24\1\u0117\3\24\1\u0118\1\u0119\1\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\2\24\1\u0110\27\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\3\24\1\u0110\26\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\12\24\1\54"+ "\6\24\1\54\2\24\1\54\5\24\1\47\4\24\1\54"+ "\4\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\27\24\1\u011a\2\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\4\24\1\u011b\25\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\21\24\1\u011c"+ "\10\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\22\24\1\54\1\24\1\u011d"+ "\5\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\24\24\1\u011e\5\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\14\24\1\u011f\1\u0120\1\54\13\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\24\24\1\146\5\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\23\24\1\u0121\6\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\12\24\1\u0122"+ "\6\24\1\54\3\24\1\u0123\4\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\13\24\1\54\5\24\1\54\10\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\22\24\1\u0124\1\u0125\1\u0126\5\24\1\47\1\24\1\u0127"+ "\7\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\21\24\1\54\10\24\1\47\4\24\1\u0128"+ "\4\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\16\24\1\54\13\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\21\24\1\54\10\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\21\24\1\54"+ "\2\24\1\146\5\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\21\24\1\213"+ "\10\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\26\24\1\54\3\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\32\24\1\47\1\u0129\10\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\16\24"+ "\1\54\12\24\1\54\1\47\1\24\1\u012a\7\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\30\24\1\u012b\1\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\16\24\1\54"+ "\2\24\2\54\7\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\26\24\1\u012c"+ "\3\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\26\24\1\u012d\3\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\4\24\1\u012e\5\24\1\u012f\6\24\1\u0130"+ "\1\u0131\3\24\1\u0132\3\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\32\24"+ "\1\47\4\24\1\54\4\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\13\24\1\54\2\24"+ "\1\54\13\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\4\24\1\u0133\21\24"+ "\1\u0134\3\24\1\47\4\24\1\u0135\4\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\32\24"+ "\1\47\3\24\1\126\5\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\21\24\1\u0136\10\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\4\24\1\126\25\24\1\47\3\24"+ "\1\126\5\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\4\24\1\126\22\24\1\126\2\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\14\24\1\u0137\15\24\1\47\3\24"+ "\1\126\5\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\27\24\1\126\2\24\1\47\3\24"+ "\1\126\5\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\24\24\1\u0138\1\24\1\u0139\3\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\4\24\1\u013a\21\24\1\u013b\1\u013c"+ "\2\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\32\24\1\47\4\24\1\143"+ "\4\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\30\24\1\230\1\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\17\24\1\u013d\12\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\13\24\1\54"+ "\1\u011f\1\24\1\54\13\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\13\24"+ "\1\u013e\2\24\1\u013e\4\24\1\u013f\4\24\1\u0140\1\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\15\24\1\54\14\24\1\47\7\24"+ "\1\154\1\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\22\24\1\u0141\3\24\1\u0142\3\24"+ "\1\47\1\u0143\10\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\12\24\1\u0126\17\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\1\126\1\24\2\126\1\24\5\126\1\u0144"+ "\3\24\1\u0145\3\24\1\54\1\u0126\1\54\2\24\1\54"+ "\2\24\1\47\4\24\1\u0128\4\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\24\24\1\146"+ "\5\24\1\47\1\u0146\1\24\1\u0147\6\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\15\24"+ "\1\u0148\14\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\17\24\1\u0149\12\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\23\24\1\315\6\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\16\24\1\u014a\13\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24"+ "\1\u014b\10\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\30\24\1\u014c\1\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\13\24\1\u011b\2\24\1\u014d\7\24"+ "\1\u014e\3\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\22\24\1\54\1\24"+ "\1\54\1\24\1\143\1\54\2\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\32\24\1\47\1\24\1\54\7\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\3\24\1\126"+ "\2\24\2\126\1\24\1\126\20\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\24\24\1\u014f\5\24\1\47\4\24\1\u0150\4\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\32\24\1\47\5\24\1\54\3\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\24\24\1\52"+ "\5\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\4\24\1\u0151\15\24\1\54"+ "\1\u0152\6\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\26\24\1\u0153\3\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\12\24\1\u0154\13\24\1\u0155\3\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\4\24\1\143\25\24\1\47\1\u0110"+ "\10\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\26\24\1\u0156\3\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\31\24\1\u0157\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\17\24\1\u0158\12\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\12\24\1\54\6\24\1\54\4\24"+ "\1\u0159\3\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\1\126\1\24\2\126"+ "\1\24\5\126\20\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\22\24\1\54"+ "\7\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\21\24\1\u015a\10\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\32\24\1\47\10\24\1\u015b\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24"+ "\1\230\25\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\4\24"+ "\1\u0103\4\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\12\24\1\115\17\24\1\47\1\54"+ "\10\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\4\24\1\54\14\24\1\u015c\4\24\1\54"+ "\3\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\27\24\1\u012c\2\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\32\24\1\47\7\24\1\154\1\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\2\24\1\126\2\24\4\126\21\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\21\24\1\146\10\24\1\47\3\24\1\u015d\5\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\26\24\1\u015e\3\24\1\47\4\24\1\u015f\4\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\4\24\1\u0160\25\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\4\24\1\u0161"+ "\12\24\1\146\12\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\25\24\1\u0162"+ "\4\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\26\24\1\u0163\3\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\27\24\1\u0164\2\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\21\24\1\u0165\1\u0166\3\24\1\u0167\3\24\1\47\10\24"+ "\1\u0168\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\1\u0110\2\24\1\u0110\11\24\1\u0110\1\24"+ "\1\u0110\4\24\1\u0169\1\u016a\1\24\1\u016b\2\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\4\24\1\u013a\23\24\1\u011b\1\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\3\24\1\54\26\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\17\24\1\u016c\12\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\23\24\1\u016d"+ "\6\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\4\24\1\u016e\22\24\1\u016f"+ "\2\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\32\24\1\47\3\24\1\u0170"+ "\5\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\12\24\1\u0171\3\24\1\u0172\7\24\1\u0173"+ "\3\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\15\24\1\143\1\u0110\5\24"+ "\1\u0174\5\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\24\24\1\u0175\5\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\13\24\1\u0176\5\24\1\u0177\10\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\21\24\1\u0178\3\24\1\u0179\4\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\12\24\1\u017a\7\24\1\u017b\3\24"+ "\1\u017c\1\u017d\1\u017e\1\24\1\47\5\24\1\u017f\3\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\13\24\1\u0180\1\143\6\24\1\u0181\6\24\1\47"+ "\4\24\1\u0182\4\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\16\24\1\u0161\13\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\17\24\1\u0183\7\24\1\u0184\2\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\21\24\1\u0185\1\u0186\1\57\3\24\1\u0187"+ "\2\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\21\24\1\146\10\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\12\24\1\317\1\u0176\5\24\1\u0188\1\u0189"+ "\1\24\1\u018a\1\u018b\4\24\1\47\4\24\1\u018c\4\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\22\24\1\u018d\7\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\16\24"+ "\1\u018e\13\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\12\24\1\311\10\24"+ "\1\315\6\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\12\24\1\156\3\24"+ "\1\u018f\2\24\1\u0190\1\u0191\3\24\1\u0192\3\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\30\24\1\u0193\1\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\13\24\1\u0194\16\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\23\24\1\u0195"+ "\6\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\23\24\1\u0196\6\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\26\24\1\u0137\3\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\27\24\1\146\2\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\27\24\1\u015e"+ "\2\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\27\24\1\u0197\2\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\26\24\1\u0110\3\24\1\47\4\24\1\u0135"+ "\4\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\16\24\1\u0198\13\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\16\24\1\u0199\13\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\24\24\1\u0176"+ "\5\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\12\24\1\u019a\17\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\14\24\1\u019b\15\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\16\24\1\u019c\13\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47"+ "\4\24\1\231\4\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\21\24\1\u019d\1\u019e\7\24"+ "\1\47\3\24\1\u019f\5\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\10\24"+ "\1\u01a0\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\25\24\1\u019f\4\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\13\24\1\u015b\16\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\13\24\1\u01a1"+ "\15\24\1\u01a2\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\16\24\1\u01a3\13\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\32\24\1\47\2\24\1\54\6\24"+ "\20\0\1\365\60\0\1\u01a4\62\0\1\u01a5\61\0\1\u01a5"+ "\2\0\1\365\60\0\1\u01a6\70\0\1\u01a7\67\0\1\u01a8"+ "\62\0\1\u01a9\56\0\1\u01aa\63\0\1\365\64\0\1\u01ab"+ "\41\0\1\u01ac\76\0\1\u01ad\56\0\1\u01ae\67\0\1\u01af"+ "\64\0\1\u01b0\56\0\1\365\75\0\1\365\33\0\1\u01b1"+ "\66\0\1\101\66\0\1\u01b2\1\u01b3\62\0\1\u01b4\54\0"+ "\1\u01b5\41\0\1\u01b6\11\0\1\u01b7\6\0\1\372\75\0"+ "\1\u01b0\51\0\1\u01b8\51\0\1\u01b9\72\0\1\u01ba\61\0"+ "\1\u01bb\50\0\1\357\102\0\1\365\53\0\1\u01bc\54\0"+ "\1\u01bd\73\0\1\365\5\0\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\27\24\1\u01be\2\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\20\24\1\u01bf\11\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\24\24\1\u01c0\5\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\24\24"+ "\1\u01c1\5\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\17\24\1\u0110\12\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\32\24\1\47\1\u01c2\10\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\31\24\1\u01c3\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\22\24\1\u0110\3\24"+ "\1\u0137\3\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\10\24"+ "\1\u01c4\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\26\24\1\u01c5\3\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\24\24\1\u01c6\5\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\13\24\1\u01c7"+ "\16\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\30\24\1\u01c8\1\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\12\24\1\u01c9\1\u01c7\16\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\15\24\1\u01c0\14\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24"+ "\1\u01ca\25\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\12\24\1\u01cb\7\24"+ "\1\u01cc\6\24\1\u01cb\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\21\24\1\u01c5"+ "\10\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\13\24\1\u01cd\16\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\32\24\1\47\1\u0103\10\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\14\24"+ "\1\u010f\15\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\4\24\1\u01ce\25\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\24\24\1\u01cf\5\24\1\47\3\24"+ "\1\u01d0\5\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\32\24\1\47\10\24\1\u01d1\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\25\24\1\u01d0\4\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\13\24\1\u01d2"+ "\16\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\32\24\1\47\1\u01d3\10\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\13\24\1\54\16\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\30\24"+ "\1\237\1\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\4\24\1\143\11\24"+ "\1\u0110\2\24\1\143\10\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24"+ "\1\143\20\24\1\u01d4\4\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\31\24"+ "\1\54\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\17\24\1\u01d5\12\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\31\24\1\225\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\32\24"+ "\1\47\10\24\1\u01d6\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\32\24\1\47\1\u01d7\10\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\12\24\1\u01d5\5\24\1\54\11\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\4\24\1\u01d8\25\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24"+ "\1\u01d9\10\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\1\24"+ "\1\u0131\7\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\32\24\1\47\3\24\1\u01da\5\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\14\24\1\u0127\15\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24"+ "\1\57\17\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\25\24\1\u0176\4\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\21\24\1\u0110\10\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\17\24\1\u01db\12\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\17\24"+ "\1\u01dc\5\24\1\u01dd\1\u0110\3\24\1\47\2\24\1\54"+ "\6\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\13\24\1\u01de\16\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\15\24\1\230\6\24\1\230\1\24\1\230\3\24\1\47"+ "\1\24\1\230\3\24\1\230\3\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\23\24\1\u01df"+ "\6\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\25\24\1\54\3\24\1\54"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\32\24\1\47\4\24\1\232\4\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\21\24\1\232\10\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24"+ "\1\142\10\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\17\24\1\u01e0\12\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\23\24\1\u0110\6\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\4\24\1\u0110\14\24\1\u01e1\5\24\1\u01e2\2\24"+ "\1\47\4\24\1\u0110\4\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\17\24\1\142\12\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\23\24\1\u013f\6\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\16\24\1\u013d\1\u01e3\12\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\26\24\1\u01e4\3\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\25\24\1\u0110"+ "\4\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\24\24\1\54\5\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\16\24\1\u01e5\13\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\31\24\1\u01d4\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\26\24\1\u0155\3\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\4\24\1\51\5\24\2\52\1\24"+ "\1\52\1\24\1\54\1\24\3\54\1\24\1\56\4\24"+ "\1\47\1\52\1\24\1\54\6\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47"+ "\4\24\1\u01e6\4\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\22\24\1\u01e7\7\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\30\24\1\u01e8\1\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\25\24\1\u01e9\4\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\17\24\1\u01ea"+ "\12\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\4\24\1\143\14\24\1\u01eb"+ "\4\24\1\u01ec\3\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\25\24\1\u01ed"+ "\4\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\26\24\1\u019f\3\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\17\24\1\u01ee\12\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\27\24\1\u0176\2\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\16\24\1\u01ef"+ "\13\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\21\24\1\u01f0\10\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\17\24\1\u015a\12\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\27\24\1\u01f1\2\24\1\47\4\24\1\u01f2\4\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\4\24\1\143\14\24\1\u01f3\10\24\1\47\3\24\1\u01f4"+ "\5\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\32\24\1\47\10\24\1\u0142\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24"+ "\1\u01f5\14\24\1\u01f6\4\24\1\u01f7\3\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\26\24\1\u01f0\3\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\27\24"+ "\1\u016f\2\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\21\24\1\u01f8\10\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\16\24\1\u01f9\13\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\12\24\1\u015a\17\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24"+ "\1\u01fa\10\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\4\24\1\143\14\24"+ "\1\143\10\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\4\24\1\u01fb\25\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\26\24\1\u01fc\3\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\13\24\1\u0103\16\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\17\24"+ "\1\u01fd\12\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\17\24\1\u01fe\12\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\22\24\1\u0110\7\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\24\24\1\u0110\5\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\16\24"+ "\1\u01ff\13\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\10\24"+ "\1\54\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\15\24\1\54\6\24\1\54\1\24\1\115"+ "\3\24\1\47\1\24\1\54\7\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\13\24\1\u0200"+ "\1\24\1\u0201\14\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\23\24\1\54"+ "\6\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\13\24\1\u0202\7\24\1\u0203"+ "\1\54\5\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\17\24\1\u01e2\7\24"+ "\1\u0204\2\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\15\24\1\u0110\6\24"+ "\1\u0205\5\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\24\24\1\u0206\5\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\1\122\5\24\1\123\12\24\1\u0110"+ "\10\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\32\24\1\47\4\24\1\u0207"+ "\4\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\22\24\1\u0208\7\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\23\24\1\u013d\6\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47"+ "\4\24\1\u0209\4\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\26\24\1\u0173\3\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\17\24\1\u020a\12\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\12\24\1\u020b\17\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\24\24\1\u020c"+ "\5\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\1\54\3\24\1\u020d\6\24"+ "\1\u020e\3\24\1\u020f\2\24\1\213\7\24\1\47\2\24"+ "\1\54\6\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\26\24\1\57\3\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\26\24\1\120\3\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\24\24"+ "\1\u0210\5\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\12\24\1\u0211\17\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\4\24\1\54\12\24\1\u020f\1\24"+ "\2\213\7\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\25\24\1\u0212\4\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\15\24\1\u0213\14\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\16\24\1\146\13\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\17\24"+ "\1\u0214\12\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\21\24\1\54\10\24"+ "\1\47\4\24\1\u0215\4\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\23\24\1\u0216\6\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\22\24\1\u0217\7\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\32\24\1\47\10\24\1\u0213\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\12\24\1\u017a"+ "\13\24\1\u0218\3\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\13\24\1\u0180"+ "\16\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\25\24\1\311\4\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\26\24\1\u020c\1\24\1\u0219\1\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\23\24\1\u021a\6\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\27\24\1\u021b\2\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\22\24\1\u0217"+ "\4\24\1\146\2\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\30\24\1\u011b"+ "\1\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\23\24\1\u021c\6\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\17\24\1\u01d6\12\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\21\24\1\u0178\10\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\12\24\1\u017a"+ "\17\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\14\24\1\54\15\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\16\24\1\u021d\13\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\13\24\1\u020c\16\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\3\24\1\u021e"+ "\26\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\15\24\1\u021f\14\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\30\24\1\u0220\1\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\25\24\1\u0221\4\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\24\24\1\u01db"+ "\5\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\23\24\1\u01e9\6\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\26\24\1\u0222\3\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\32\24\1\47\1\54\10\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\4\24\1\143\25\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\20\24\1\u0223\11\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\16\24\1\u0137\13\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24"+ "\1\u01d4\1\u0224\1\u0225\4\24\1\u0226\2\24\1\54\1\u0227"+ "\2\24\1\u01d4\1\24\1\47\2\24\1\u0214\1\24\1\u0228"+ "\1\54\3\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\27\24\1\u0229\2\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\27\24\1\u022a\2\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\16\24"+ "\1\54\13\24\1\47\1\24\1\54\7\24\20\0\1\365"+ "\2\0\1\365\60\0\1\365\71\0\1\u022b\60\0\1\365"+ "\74\0\1\u022c\56\0\1\u022d\50\0\1\u022e\76\0\1\376"+ "\51\0\1\u022f\61\0\1\u0230\42\0\1\365\2\0\1\365"+ "\11\0\1\365\1\0\1\365\4\0\1\u0231\1\u0232\1\0"+ "\1\u0233\61\0\1\101\4\0\1\365\53\0\1\365\51\0"+ "\1\u0234\3\0\1\u022e\56\0\1\365\63\0\1\u01b0\4\0"+ "\1\u0235\45\0\1\u0236\70\0\1\u0237\45\0\1\365\103\0"+ "\1\u0238\61\0\1\u0239\56\0\1\u023a\50\0\1\u01b2\67\0"+ "\1\u01b0\53\0\1\u023b\65\0\1\u01a7\24\0\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\26\24"+ "\1\u01ef\3\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\21\24\1\u023c\6\24"+ "\1\u023d\1\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\15\24\1\54\3\24"+ "\1\u01c2\2\24\1\54\3\24\1\u023e\1\24\1\47\1\24"+ "\1\54\7\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\25\24\1\54\4\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\15\24\1\54\14\24\1\47\1\24\1\54\7\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\17\24\1\u023f\12\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24"+ "\1\u0240\17\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\16\24\1\213\13\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\15\24\1\213\14\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\24\24\1\54\5\24\1\47\1\24\1\54\3\24"+ "\1\54\3\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\31\24\1\213\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\24\24\1\54\5\24\1\47\1\24\1\54\7\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\17\24\1\u0241\12\24\1\47\1\u0242\10\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\23\24"+ "\1\u0243\6\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\27\24\1\u0244\2\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\22\24\1\u0245\7\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\24\24\1\u0246\5\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24"+ "\1\213\6\24\1\u0247\1\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\32\24"+ "\1\47\4\24\1\u0248\4\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\13\24\1\213\1\u0249"+ "\15\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\25\24\1\u024a\4\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\13\24\1\u0110\16\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\26\24\1\u024b\3\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\17\24\1\54"+ "\5\24\1\u01dd\4\24\1\47\2\24\1\54\6\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\15\24\1\54\6\24\1\54\5\24\1\47\1\24\1\54"+ "\7\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\22\24\1\u0135\7\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\12\24\1\u01e5\17\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\17\24\1\54"+ "\12\24\1\47\2\24\1\54\6\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\1\u024c\1\u01db"+ "\5\24\1\u01db\22\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\16\24\1\u0162"+ "\13\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\27\24\1\u024d\2\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\31\24\1\u0110\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\16\24"+ "\1\u024e\13\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\4\24"+ "\1\u0110\4\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\26\24\1\u0110\3\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\17\24\1\u024f\12\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\20\24"+ "\1\u0110\11\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\22\24\1\u0250\7\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\32\24\1\50\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24"+ "\1\u01f0\1\24\1\u01e2\6\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24"+ "\1\54\4\24\1\115\3\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\26\24"+ "\1\u01d5\1\u0251\2\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\22\24\1\u01d6"+ "\7\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\25\24\1\u0252\4\24\1\47"+ "\3\24\1\311\5\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\32\24\1\47\7\24\1\u01e9"+ "\1\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\26\24\1\115\3\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\21\24\1\143\10\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\17\24\1\u024f"+ "\3\24\1\u013d\6\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\15\24\1\54"+ "\3\24\1\54\2\24\1\54\5\24\1\47\1\24\1\54"+ "\7\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\22\24\1\u0253\7\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\21\24\1\u0254\5\24\1\u0255\2\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\21\24\1\u0256\5\24\1\u0257\2\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\4\24\1\u0258\14\24\1\u0259\10\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\17\24\1\u01e5\12\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\31\24\1\u025a"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\17\24\1\u025b\12\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\13\24\1\u025c\16\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\17\24"+ "\1\u025d\12\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\21\24\1\230\10\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\24\24\1\u0205\5\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\30\24\1\u0244\1\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\30\24"+ "\1\u025e\1\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\27\24\1\u013d\2\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\4\24\1\u019b\25\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\20\24\1\u0103\11\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\31\24"+ "\1\u025f\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\17\24\1\u01e2\12\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\25\24\1\u025f\4\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\27\24\1\u01f1\2\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\20\24\1\u0260"+ "\11\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\1\54\31\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\32\24\1\47\4\24\1\u0261\4\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\27\24"+ "\1\54\2\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\3\24\1\u0262\21\24"+ "\1\257\4\24\1\47\1\257\10\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\25\24\1\u0164"+ "\4\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\27\24\1\u0263\2\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\13\24\1\u01d6\16\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\22\24\1\u0264\7\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\4\24\1\54"+ "\11\24\1\u020c\13\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47"+ "\3\24\1\54\5\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\4\24\1\u020c\22\24\1\u020c"+ "\2\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\32\24\1\47\10\24\1\u0265"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\21\24\1\u0177\10\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\17\24"+ "\1\u020f\1\24\2\213\7\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\15\24"+ "\1\u0266\14\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\4\24"+ "\1\u020c\4\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\32\24\1\47\10\24\1\u0266\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\32\24\1\47\4\24\1\u0215\4\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\12\24\1\u0267"+ "\17\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\32\24\1\47\3\24\1\u0268"+ "\5\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\12\24\1\u01d5\17\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\4\24\1\u0110\25\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47"+ "\10\24\1\u0176\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\15\24\1\54\14\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\32\24\1\47\4\24\1\u0269\4\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24"+ "\1\143\7\24\1\u01d4\15\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24"+ "\1\143\6\24\1\u01d4\16\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\15\24"+ "\1\54\3\24\1\54\2\24\1\54\5\24\1\47\1\24"+ "\1\54\1\24\1\54\5\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\26\24\1\u026a\3\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\21\24\1\u026b\10\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\25\24\1\u026c\4\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\13\24"+ "\1\u026c\16\24\1\47\11\24\30\0\1\365\61\0\1\341"+ "\14\0\1\101\7\0\1\u026d\47\0\1\354\54\0\1\365"+ "\53\0\1\u01b0\76\0\1\101\51\0\1\101\7\0\1\u026e"+ "\47\0\1\365\6\0\1\357\10\0\1\365\50\0\1\u026f"+ "\63\0\1\u0270\62\0\1\u0271\64\0\1\365\46\0\1\u0272"+ "\63\0\1\u0273\53\0\1\u0274\60\0\1\361\72\0\1\u022f"+ "\20\0\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\21\24\1\u0275\10\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\21\24\1\u0276\10\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\21\24\1\u01c2"+ "\10\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\26\24\1\u0277\3\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\26\24\1\u0103\3\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\32\24\1\47\5\24\1\u0278\3\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\26\24\1\u0278"+ "\3\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\25\24\1\u0279\4\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\20\24\1\u027a\11\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\32\24\1\47\1\24\1\u0176\7\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\21\24\1\u027b"+ "\10\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\30\24\1\213\1\24\1\47"+ "\1\24\1\54\7\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\15\24\1\u0110\14\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\14\24\1\u027c\15\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\11\24\1\u01db\20\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\31\24\1\u027d"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\25\24\1\u01fe\4\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\25\24\1\u01e5\4\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\26\24"+ "\1\u015e\3\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\26\24\1\u0139\3\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\14\24\1\u027e\15\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\3\24\1\u027f\26\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\3\24"+ "\1\u01d4\26\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\3\24\1\u0280\26\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\3\24\1\u01f1\26\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\21\24\1\u0254\10\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24"+ "\1\u0256\10\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\13\24\1\u0281\16\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\32\24\1\47\1\u0110\10\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\27\24\1\u01e5\2\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47"+ "\5\24\1\172\3\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\24\24\1\u0282\5\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\27\24\1\u0110\2\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\13\24\2\u01d4\15\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\17\24\1\54"+ "\6\24\1\54\3\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\25\24\1\146"+ "\4\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\23\24\1\143\6\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\15\24\1\52\1\24\1\54\5\24\1\u0283"+ "\2\24\1\54\1\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\22\24\1\146"+ "\7\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\4\24\1\u0209\25\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\23\24\1\u0284\6\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\4\24\1\143\25\24\1\47\5\24\1\54\3\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\20\24\1\u01d4\11\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\17\24\1\u0285"+ "\12\24\1\47\11\24\30\0\1\u0286\100\0\1\u0287\55\0"+ "\1\u0287\64\0\1\u0288\56\0\1\u0289\67\0\1\365\54\0"+ "\1\u028a\55\0\1\u028b\21\0\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\24\24\1\213\5\24"+ "\1\47\1\24\1\u0247\7\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\1\24"+ "\1\u0247\7\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\22\24\1\u0191\7\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\26\24\1\u028c\3\24\1\47\11\24\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\13\24"+ "\2\u028d\15\24\1\47\11\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\20\24\1\u0247\11\24"+ "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ "\2\0\1\47\1\0\23\24\1\u01e2\6\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\1\u0110\2\24\1\u0110\11\24\1\u0110\1\24\1\u0110"+ "\4\24\1\u0205\1\u016a\1\24\1\u028e\2\24\1\47\11\24"+ "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ "\1\0\32\24\1\47\1\u0222\10\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\4\24\1\u020d"+ "\25\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\21\24\1\u020d\10\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\23\24\1\u028f\6\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\17\24\1\u0290\12\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\15\24\1\52"+ "\1\24\1\54\10\24\1\54\1\24\1\47\11\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\32\24\1\47\10\24\1\216\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\6\24"+ "\1\u0291\2\24\40\0\1\u0292\66\0\1\365\62\0\1\u01b2"+ "\60\0\1\101\7\0\1\u0293\60\0\1\u0294\5\0\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\17\24\1\u0295\12\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\15\24\1\213"+ "\6\24\1\216\5\24\1\47\1\24\1\u0176\7\24\1\47"+ "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ "\24\24\1\u013d\5\24\1\47\11\24\1\47\2\24\1\0"+ "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47"+ "\1\24\1\u01e9\7\24\1\47\2\24\1\0\3\47\2\0"+ "\1\50\2\0\1\47\1\0\13\24\1\u0296\16\24\1\47"+ "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ "\1\47\1\0\32\24\1\47\6\24\1\u0110\2\24\34\0"+ "\1\u0297\55\0\1\u0298\104\0\1\365\6\0\1\47\2\24"+ "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\32\24"+ "\1\47\3\24\1\u01e5\5\24\1\47\2\24\1\0\3\47"+ "\2\0\1\50\2\0\1\47\1\0\27\24\1\u0299\2\24"+ "\1\47\11\24\41\0\1\u029a\60\0\1\u029b\51\0\1\341"+ "\65\0\1\u029c\66\0\1\365\20\0"; private static int [] zzUnpackTrans() { int [] result = new int[31850]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\2\0\1\11\5\1\1\11\1\1\1\11\44\1\2\11"+ "\25\0\225\1\31\0\1\11\11\0\245\1\1\0\1\1"+ "\10\0\1\1\17\0\155\1\1\0\1\1\3\0\1\1"+ "\5\0\1\1\5\0\61\1\7\0\22\1\1\0\1\1"+ "\2\0\1\1\1\0\6\1\3\0\2\1\2\0\2\1"+ "\2\0"; private static int [] zzUnpackAttribute() { int [] result = new int[668]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** * zzAtBOL == true <=> the scanner is currently at the beginning of a line */ private boolean zzAtBOL = true; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Constructor. We must have this here as JFLex does not generate a * no parameter constructor. */ public AssemblerX86TokenMaker() { super(); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { ";", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public AssemblerX86TokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public AssemblerX86TokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 200) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; if (zzMarkedPosL > zzStartRead) { switch (zzBufferL[zzMarkedPosL-1]) { case '\n': case '\u000B': case '\u000C': case '\u0085': case '\u2028': case '\u2029': zzAtBOL = true; break; case '\r': if (zzMarkedPosL < zzEndReadL) zzAtBOL = zzBufferL[zzMarkedPosL] != '\n'; else if (zzAtEOF) zzAtBOL = false; else { boolean eof = zzRefill(); zzMarkedPosL = zzMarkedPos; zzEndReadL = zzEndRead; zzBufferL = zzBuffer; if (eof) zzAtBOL = false; else zzAtBOL = zzBufferL[zzMarkedPosL] != '\n'; } break; default: zzAtBOL = false; } } zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; if (zzAtBOL) zzState = ZZ_LEXSTATE[zzLexicalState+1]; else zzState = ZZ_LEXSTATE[zzLexicalState]; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 11: { addToken(Token.RESERVED_WORD); } case 16: break; case 1: { addToken(Token.IDENTIFIER); } case 17: break; case 12: { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } case 18: break; case 9: { addToken(Token.FUNCTION); } case 19: break; case 5: { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; } case 20: break; case 14: { addToken(Token.VARIABLE); } case 21: break; case 7: { addToken(Token.WHITESPACE); } case 22: break; case 10: { addToken(Token.PREPROCESSOR); } case 23: break; case 15: { addToken(Token.DATA_TYPE); } case 24: break; case 4: { addToken(Token.ERROR_CHAR); /*addNullToken(); return firstToken;*/ } case 25: break; case 8: { addToken(Token.OPERATOR); } case 26: break; case 2: { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } case 27: break; case 13: { addToken(Token.LITERAL_CHAR); } case 28: break; case 3: { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } case 29: break; case 6: { addNullToken(); return firstToken; } case 30: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case YYINITIAL: { addNullToken(); return firstToken; } case 669: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/BBCodeTokenMaker.flex000066400000000000000000000203201257417003700316440ustar00rootroot00000000000000/* * 11/18/2009 * * BBCodeTokenMaker.java - Generates tokens for BBCode syntax highlighting. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for BBCode. * * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated BBCodeTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.7 * */ %% %public %class BBCodeTokenMaker %extends AbstractMarkupTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Token type specific to BBCodeTokenMaker; this signals that the user has * ended a line with an unclosed tag; thus a new line is beginning * still inside of the tag. */ public static final int INTERNAL_INTAG = -1; /** * Whether closing markup tags are automatically completed for BBCode. */ private static boolean completeCloseTags = true; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public BBCodeTokenMaker() { } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * Sets whether markup close tags should be completed. The default value * for BBCode is true. * * @return Whether closing markup tags are completed. * @see #setCompleteCloseTags(boolean) */ @Override public boolean getCompleteCloseTags() { return completeCloseTags; } /** * Returns null since BBCode has no comments. * * @return null always. */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return null; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case INTERNAL_INTAG: state = INTAG; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Sets whether markup close tags should be completed. * * @param complete Whether closing markup tags are completed. * @see #getCompleteCloseTags() */ public static void setCompleteCloseTags(boolean complete) { completeCloseTags = complete; } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} Whitespace = ([ \t\f]+) LineTerminator = ([\n]) Identifier = ([^ \t\f\n\[]+) InTagIdentifier = ([^ \t\f\n\[\]\/\=]+) Tag = ("b"|"i"|"u"|"s"|"size"|"color"|"center"|"quote"|"url"|"img"|"ul"|"li"|"ol"|"youtube"|"gvideo") %state INTAG %% { {Identifier} { addToken(Token.IDENTIFIER); } {Whitespace} { addToken(Token.WHITESPACE); } "[" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(INTAG); } "[/" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(INTAG); } {LineTerminator} { addNullToken(); return firstToken; } <> { addNullToken(); return firstToken; } } { "/" { addToken(Token.MARKUP_TAG_DELIMITER); } {Tag} { addToken(Token.MARKUP_TAG_NAME); } {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } {Whitespace} { addToken(Token.WHITESPACE); } "=" { addToken(Token.OPERATOR); } "/]" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } "]" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } . { addToken(Token.IDENTIFIER); /* Unhandled chars, not likely */ } <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/BBCodeTokenMaker.java000066400000000000000000000520641257417003700316410ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 11/18/09 4:41 PM */ /* * 11/18/2009 * * BBCodeTokenMaker.java - Generates tokens for BBCode syntax highlighting. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for BBCode. * * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated BBCodeTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.7 * */ public class BBCodeTokenMaker extends AbstractMarkupTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int INTAG = 1; public static final int YYINITIAL = 0; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\1\1\2\1\0\1\1\23\0\1\1\16\0\1\27\15\0"+ "\1\30\35\0\1\3\1\0\1\4\4\0\1\5\1\13\1\26\1\12"+ "\1\0\1\23\1\0\1\6\2\0\1\15\1\22\1\17\1\14\1\0"+ "\1\21\1\16\1\10\1\20\1\7\1\25\2\0\1\24\1\11\uff85\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\2\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7"+ "\4\10\6\5\1\11\1\12\1\4\23\5"; private static int [] zzUnpackAction() { int [] result = new int[41]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\31\0\62\0\113\0\144\0\175\0\226\0\144"+ "\0\144\0\226\0\257\0\310\0\341\0\372\0\u0113\0\u012c"+ "\0\u0145\0\u015e\0\u0177\0\u0190\0\144\0\144\0\u01a9\0\u01c2"+ "\0\u01db\0\u01f4\0\u020d\0\u0226\0\u023f\0\u0258\0\u0271\0\u028a"+ "\0\u02a3\0\u02bc\0\u02d5\0\u02ee\0\u0307\0\u0320\0\u0339\0\u0352"+ "\0\u036b"; private static int [] zzUnpackRowMap() { int [] result = new int[41]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\3\1\4\1\5\1\6\25\3\1\7\1\4\1\0"+ "\1\10\1\11\1\12\1\13\1\14\1\15\2\7\1\16"+ "\1\17\1\20\3\7\1\21\1\7\1\22\1\23\2\7"+ "\1\24\1\25\1\3\3\0\25\3\1\0\1\4\107\0"+ "\1\26\1\0\1\7\4\0\22\7\2\0\1\7\4\0"+ "\15\7\1\27\4\7\2\0\1\7\4\0\10\7\1\12"+ "\1\17\10\7\2\0\1\7\4\0\1\7\1\30\20\7"+ "\2\0\1\7\4\0\5\7\1\31\1\7\1\32\12\7"+ "\2\0\1\7\4\0\10\7\1\12\11\7\2\0\1\7"+ "\4\0\1\7\1\12\20\7\2\0\1\7\4\0\2\7"+ "\1\33\17\7\2\0\1\7\4\0\20\7\1\34\1\7"+ "\2\0\1\7\4\0\7\7\1\35\12\7\6\0\1\11"+ "\24\0\1\7\4\0\16\7\1\12\3\7\2\0\1\7"+ "\4\0\4\7\1\36\15\7\2\0\1\7\4\0\12\7"+ "\1\37\7\7\2\0\1\7\4\0\10\7\1\40\11\7"+ "\2\0\1\7\4\0\7\7\1\41\12\7\2\0\1\7"+ "\4\0\1\7\1\42\20\7\2\0\1\7\4\0\2\7"+ "\1\43\17\7\2\0\1\7\4\0\5\7\1\12\14\7"+ "\2\0\1\7\4\0\13\7\1\44\6\7\2\0\1\7"+ "\4\0\7\7\1\45\12\7\2\0\1\7\4\0\13\7"+ "\1\36\6\7\2\0\1\7\4\0\21\7\1\46\2\0"+ "\1\7\4\0\13\7\1\47\6\7\2\0\1\7\4\0"+ "\5\7\1\45\14\7\2\0\1\7\4\0\11\7\1\12"+ "\10\7\2\0\1\7\4\0\5\7\1\50\14\7\2\0"+ "\1\7\4\0\2\7\1\51\17\7\2\0\1\7\4\0"+ "\7\7\1\12\12\7\2\0\1\7\4\0\1\36\21\7"+ "\2\0"; private static int [] zzUnpackTrans() { int [] result = new int[900]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\2\0\2\1\1\11\2\1\2\11\13\1\2\11\23\1"; private static int [] zzUnpackAttribute() { int [] result = new int[41]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Token type specific to BBCodeTokenMaker; this signals that the user has * ended a line with an unclosed tag; thus a new line is beginning * still inside of the tag. */ public static final int INTERNAL_INTAG = -1; /** * Whether closing markup tags are automatically completed for BBCode. */ private static boolean completeCloseTags = true; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public BBCodeTokenMaker() { } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * Sets whether markup close tags should be completed. The default value * for BBCode is true. * * @return Whether closing markup tags are completed. * @see #setCompleteCloseTags(boolean) */ @Override public boolean getCompleteCloseTags() { return completeCloseTags; } /** * Returns null since BBCode has no comments. * * @return null always. */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return null; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case INTERNAL_INTAG: state = INTAG; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Sets whether markup close tags should be completed. * * @param complete Whether closing markup tags are completed. * @see #getCompleteCloseTags() */ public static void setCompleteCloseTags(boolean complete) { completeCloseTags = complete; } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public BBCodeTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public BBCodeTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 80) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 1: { addToken(Token.IDENTIFIER); } case 11: break; case 9: { addToken(Token.MARKUP_TAG_DELIMITER); } case 12: break; case 2: { addToken(Token.WHITESPACE); } case 13: break; case 10: { addToken(Token.OPERATOR); } case 14: break; case 8: { addToken(Token.MARKUP_TAG_NAME); } case 15: break; case 4: { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(INTAG); } case 16: break; case 6: { addToken(Token.IDENTIFIER); /* Unhandled chars, not likely */ } case 17: break; case 5: { addToken(Token.MARKUP_TAG_ATTRIBUTE); } case 18: break; case 3: { addNullToken(); return firstToken; } case 19: break; case 7: { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } case 20: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case INTAG: { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } case 42: break; case YYINITIAL: { addNullToken(); return firstToken; } case 43: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CPlusPlusTokenMaker.flex000066400000000000000000000371641257417003700324760ustar00rootroot00000000000000/* * 11/19/2004 * * CPlusPlusTokenMaker.java - An object that can take a chunk of text and * return a linked list of tokens representing it in C++. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * A parser for the C++ programming language. * * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated CPlusPlusTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.6 * */ %% %public %class CPlusPlusTokenMaker %extends AbstractJFlexCTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public CPlusPlusTokenMaker() { super(); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.COMMENT_MULTILINE: state = MLC; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} Letter = [A-Za-z] LetterOrUnderscore = ({Letter}|"_") Digit = [0-9] HexDigit = {Digit}|[A-Fa-f] OctalDigit = [0-7] Exponent = [eE][+-]?{Digit}+ PreprocessorWord = define|elif|else|endif|error|if|ifdef|ifndef|include|line|pragma|undef Trigraph = ("??="|"??("|"??)"|"??/"|"??'"|"??<"|"??>"|"??!"|"??-") OctEscape1 = ([\\]{OctalDigit}) OctEscape2 = ([\\]{OctalDigit}{OctalDigit}) OctEscape3 = ([\\][0-3]{OctalDigit}{OctalDigit}) OctEscape = ({OctEscape1}|{OctEscape2}|{OctEscape3}) HexEscape = ([\\][xX]{HexDigit}{HexDigit}) AnyChrChr = ([^\'\n\\]) Escape = ([\\]([abfnrtv\'\"\?\\0e])) UnclosedCharLiteral = ([\']({Escape}|{OctEscape}|{HexEscape}|{Trigraph}|{AnyChrChr})) CharLiteral = ({UnclosedCharLiteral}[\']) ErrorUnclosedCharLiteral = ([\'][^\'\n]*) ErrorCharLiteral = (([\'][\'])|{ErrorUnclosedCharLiteral}[\']) AnyStrChr = ([^\"\n\\]) FalseTrigraph = (("?"(("?")*)[^\=\(\)\/\'\<\>\!\-\\\?\"\n])|("?"[\=\(\)\/\'\<\>\!\-])) StringLiteral = ([\"]((((("?")*)({Escape}|{OctEscape}|{HexEscape}|{Trigraph}))|{FalseTrigraph}|{AnyStrChr})*)(("?")*)[\"]) UnclosedStringLiteral = ([\"]([\\].|[^\\\"])*[^\"]?) ErrorStringLiteral = ({UnclosedStringLiteral}[\"]) LineTerminator = \n WhiteSpace = [ \t\f] MLCBegin = "/*" MLCEnd = "*/" LineCommentBegin = "//" NonFloatSuffix = (([uU][lL]?)|([lL][uU]?)) IntegerLiteral = ({Digit}+{Exponent}?{NonFloatSuffix}?) HexLiteral = ("0"[xX]{HexDigit}+{NonFloatSuffix}?) FloatLiteral = ((({Digit}*[\.]{Digit}+)|({Digit}+[\.]{Digit}*)){Exponent}?[fFlL]?) ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+) NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#") Identifier = ({LetterOrUnderscore}({LetterOrUnderscore}|{Digit}|[$])*) ErrorIdentifier = ({NonSeparator}+) URLGenDelim = ([:\/\?#\[\]@]) URLSubDelim = ([\!\$&'\(\)\*\+,;=]) URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) URLCharacters = ({URLCharacter}*) URLEndCharacter = ([\/\$]|{Letter}|{Digit}) URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) %state MLC %state EOL_COMMENT %% { /* Keywords */ "auto" | "break" | "case" | "catch" | "class" | "const" | "const_cast" | "continue" | "default" | "delete" | "do" | "dynamic_cast" | "else" | "enum" | "explicit" | "extern" | "for" | "friend" | "goto" | "if" | "inline" | "mutable" | "namespace" | "new" | "operator" | "private" | "protected" | "public" | "register" | "reinterpret_cast" | "sizeof" | "static" | "static_cast" | "struct" | "switch" | "template" | "this" | "throw" | "try" | "typedef" | "typeid" | "typename" | "union" | "using" | "virtual" | "volatile" | "while" { addToken(Token.RESERVED_WORD); } "return" { addToken(Token.RESERVED_WORD_2); } /* Boolean literals. */ "true" | "false" | /* Data types. */ "char" | "div_t" | "double" | "float" | "int" | "ldiv_t" | "long" | "short" | "signed" | "size_t" | "unsigned" | "void" | "wchar_t" { addToken(Token.DATA_TYPE); } /* Standard functions */ "abort" | "abs" | "acos" | "asctime" | "asin" | "assert" | "atan2" | "atan" | "atexit" | "atof" | "atoi" | "atol" | "bsearch" | "btowc" | "calloc" | "ceil" | "clearerr" | "clock" | "cosh" | "cos" | "ctime" | "difftime" | "div" | "errno" | "exit" | "exp" | "fabs" | "fclose" | "feof" | "ferror" | "fflush" | "fgetc" | "fgetpos" | "fgetwc" | "fgets" | "fgetws" | "floor" | "fmod" | "fopen" | "fprintf" | "fputc" | "fputs" | "fputwc" | "fputws" | "fread" | "free" | "freopen" | "frexp" | "fscanf" | "fseek" | "fsetpos" | "ftell" | "fwprintf" | "fwrite" | "fwscanf" | "getchar" | "getc" | "getenv" | "gets" | "getwc" | "getwchar" | "gmtime" | "isalnum" | "isalpha" | "iscntrl" | "isdigit" | "isgraph" | "islower" | "isprint" | "ispunct" | "isspace" | "isupper" | "isxdigit" | "labs" | "ldexp" | "ldiv" | "localeconv" | "localtime" | "log10" | "log" | "longjmp" | "malloc" | "mblen" | "mbrlen" | "mbrtowc" | "mbsinit" | "mbsrtowcs" | "mbstowcs" | "mbtowc" | "memchr" | "memcmp" | "memcpy" | "memmove" | "memset" | "mktime" | "modf" | "offsetof" | "perror" | "pow" | "printf" | "putchar" | "putc" | "puts" | "putwc" | "putwchar" | "qsort" | "raise" | "rand" | "realloc" | "remove" | "rename" | "rewind" | "scanf" | "setbuf" | "setjmp" | "setlocale" | "setvbuf" | "setvbuf" | "signal" | "sinh" | "sin" | "sprintf" | "sqrt" | "srand" | "sscanf" | "strcat" | "strchr" | "strcmp" | "strcmp" | "strcoll" | "strcpy" | "strcspn" | "strerror" | "strftime" | "strlen" | "strncat" | "strncmp" | "strncpy" | "strpbrk" | "strrchr" | "strspn" | "strstr" | "strtod" | "strtok" | "strtol" | "strtoul" | "strxfrm" | "swprintf" | "swscanf" | "system" | "tanh" | "tan" | "time" | "tmpfile" | "tmpnam" | "tolower" | "toupper" | "ungetc" | "ungetwc" | "va_arg" | "va_end" | "va_start" | "vfprintf" | "vfwprintf" | "vprintf" | "vsprintf" | "vswprintf" | "vwprintf" | "wcrtomb" | "wcscat" | "wcschr" | "wcscmp" | "wcscoll" | "wcscpy" | "wcscspn" | "wcsftime" | "wcslen" | "wcsncat" | "wcsncmp" | "wcsncpy" | "wcspbrk" | "wcsrchr" | "wcsrtombs" | "wcsspn" | "wcsstr" | "wcstod" | "wcstok" | "wcstol" | "wcstombs" | "wcstoul" | "wcsxfrm" | "wctob" | "wctomb" | "wmemchr" | "wmemcmp" | "wmemcpy" | "wmemmove" | "wmemset" | "wprintf" | "wscanf" { addToken(Token.FUNCTION); } /* Standard-defined macros. */ "__DATE__" | "__TIME__" | "__FILE__" | "__LINE__" | "__STDC__" { addToken(Token.PREPROCESSOR); } {LineTerminator} { addNullToken(); return firstToken; } {Identifier} { addToken(Token.IDENTIFIER); } {WhiteSpace}+ { addToken(Token.WHITESPACE); } /* Preprocessor directives */ "#"{WhiteSpace}*{PreprocessorWord} { addToken(Token.PREPROCESSOR); } /* String/Character Literals. */ {CharLiteral} { addToken(Token.LITERAL_CHAR); } {UnclosedCharLiteral} { addToken(Token.ERROR_CHAR); /*addNullToken(); return firstToken;*/ } {ErrorUnclosedCharLiteral} { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; } {ErrorCharLiteral} { addToken(Token.ERROR_CHAR); } {StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } {UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } {ErrorStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); } /* Comment Literals. */ {MLCBegin} { start = zzMarkedPos-2; yybegin(MLC); } {LineCommentBegin} { start = zzMarkedPos-2; yybegin(EOL_COMMENT); } /* Separators. */ "(" | ")" | "[" | "]" | "{" | "}" { addToken(Token.SEPARATOR); } /* Operators. */ {Trigraph} | "=" | "+" | "-" | "*" | "/" | "%" | "~" | "<" | ">" | "<<" | ">>" | "==" | "+=" | "-=" | "*=" | "/=" | "%=" | "&=" | "|=" | "^=" | ">=" | "<=" | "!=" | ">>=" | "<<=" | "^" | "&" | "&&" | "|" | "||" | "?" | ":" | "," | "!" | "++" | "--" | "." | "," { addToken(Token.OPERATOR); } /* Numbers */ {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } {FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } /* Some lines will end in '\' to wrap an expression. */ "\\" { addToken(Token.IDENTIFIER); } {ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } /* Other punctuation, we'll highlight it as "identifiers." */ ";" { addToken(Token.IDENTIFIER); } /* Ended with a line not in a string or comment. */ <> { addNullToken(); return firstToken; } /* Catch any other (unhandled) characters and flag them as bad. */ . { addToken(Token.ERROR_IDENTIFIER); } } { [^hwf\n\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } [hwf] {} \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } \* {} <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } } { [^hwf\n]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } [hwf] {} \n { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CPlusPlusTokenMaker.java000066400000000000000000002676621257417003700324710ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 3/22/15 4:49 PM */ /* * 11/19/2004 * * CPlusPlusTokenMaker.java - An object that can take a chunk of text and * return a linked list of tokens representing it in C++. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * A parser for the C++ programming language. * * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated CPlusPlusTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.6 * */ public class CPlusPlusTokenMaker extends AbstractJFlexCTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int EOL_COMMENT = 2; public static final int YYINITIAL = 0; public static final int MLC = 1; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\50\1\43\1\0\1\50\1\56\22\0\1\50\1\36\1\44"+ "\1\57\1\60\1\65\1\113\1\33\1\31\1\31\1\51\1\7\1\64"+ "\1\37\1\54\1\32\1\47\1\77\1\76\1\41\4\5\2\3\1\70"+ "\1\63\1\34\1\30\1\35\1\27\1\61\1\103\1\4\1\111\1\102"+ "\1\6\1\55\2\1\1\105\2\1\1\53\1\106\1\107\4\1\1\110"+ "\1\104\1\52\2\1\1\42\2\1\1\62\1\40\1\62\1\115\1\2"+ "\1\0\1\24\1\46\1\21\1\10\1\11\1\12\1\25\1\66\1\13"+ "\1\100\1\72\1\15\1\26\1\14\1\20\1\23\1\101\1\17\1\16"+ "\1\67\1\22\1\45\1\71\1\74\1\73\1\75\1\112\1\114\1\112"+ "\1\64\uff81\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\3\0\1\1\2\2\1\3\1\4\17\2\2\4\1\5"+ "\1\4\1\6\3\4\1\2\1\7\1\10\2\2\1\3"+ "\1\11\1\4\2\1\1\2\1\4\3\2\2\4\2\12"+ "\1\13\5\12\1\14\2\12\1\2\2\15\2\3\1\16"+ "\2\2\1\17\22\2\1\17\56\2\1\0\1\20\1\21"+ "\2\22\1\23\1\6\2\10\1\24\10\2\1\15\6\1"+ "\1\0\14\2\2\0\1\25\6\0\5\2\1\3\1\0"+ "\1\3\1\15\1\16\3\2\1\26\6\2\1\26\23\2"+ "\1\27\16\2\1\26\1\2\1\26\40\2\1\26\15\2"+ "\1\6\1\30\1\6\3\22\1\6\2\10\1\31\7\2"+ "\1\32\4\1\1\33\4\1\6\0\14\2\10\0\5\2"+ "\1\16\1\0\37\2\1\27\45\2\1\26\2\2\1\26"+ "\7\2\1\6\1\10\7\2\2\32\7\1\4\0\1\33"+ "\4\0\11\2\2\0\1\34\2\0\1\35\44\2\1\17"+ "\14\2\1\32\1\33\3\1\7\0\10\2\4\0\11\2"+ "\1\36\11\2\2\1\1\33\3\0\12\2\2\0\1\33"+ "\4\2"; private static int [] zzUnpackAction() { int [] result = new int[581]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\116\0\234\0\352\0\u0138\0\u0186\0\u01d4\0\u0222"+ "\0\u0270\0\u02be\0\u030c\0\u035a\0\u03a8\0\u03f6\0\u0444\0\u0492"+ "\0\u04e0\0\u052e\0\u057c\0\u05ca\0\u0618\0\u0666\0\u06b4\0\u0702"+ "\0\u0750\0\u079e\0\u07ec\0\u083a\0\u0888\0\u08d6\0\u0924\0\352"+ "\0\u079e\0\u0972\0\u09c0\0\u0a0e\0\u0a5c\0\u0aaa\0\u0af8\0\u079e"+ "\0\u0b46\0\u079e\0\u079e\0\u0b94\0\u0be2\0\u0c30\0\u0c7e\0\u0ccc"+ "\0\u0d1a\0\u0d68\0\u079e\0\u0db6\0\u0e04\0\u0e52\0\u0ea0\0\u0eee"+ "\0\u079e\0\u0f3c\0\u0f8a\0\u0fd8\0\u1026\0\u1074\0\u10c2\0\u1110"+ "\0\u115e\0\u11ac\0\u11fa\0\u1248\0\u1296\0\u12e4\0\u1332\0\u1380"+ "\0\u13ce\0\u141c\0\u146a\0\u14b8\0\u1506\0\u1554\0\u15a2\0\u15f0"+ "\0\u163e\0\u168c\0\u16da\0\u1728\0\u1776\0\u17c4\0\u0138\0\u1812"+ "\0\u1860\0\u18ae\0\u18fc\0\u194a\0\u1998\0\u19e6\0\u1a34\0\u1a82"+ "\0\u1ad0\0\u1b1e\0\u1b6c\0\u1bba\0\u1c08\0\u1c56\0\u1ca4\0\u1cf2"+ "\0\u1d40\0\u1d8e\0\u1ddc\0\u1e2a\0\u1e78\0\u1ec6\0\u1f14\0\u1f62"+ "\0\u1fb0\0\u1ffe\0\u204c\0\u209a\0\u20e8\0\u2136\0\u2184\0\u21d2"+ "\0\u2220\0\u226e\0\u22bc\0\u230a\0\u2358\0\u23a6\0\u23f4\0\u2442"+ "\0\u2490\0\u24de\0\u252c\0\u257a\0\u25c8\0\u2616\0\u079e\0\u079e"+ "\0\u2664\0\u26b2\0\u079e\0\u2700\0\u274e\0\u279c\0\u079e\0\u27ea"+ "\0\u2838\0\u2886\0\u28d4\0\u2922\0\u2970\0\u29be\0\u2a0c\0\u2a5a"+ "\0\u2aa8\0\u2af6\0\u2b44\0\u2b92\0\u2be0\0\u2c2e\0\u2c7c\0\u2cca"+ "\0\u2d18\0\u2d66\0\u2db4\0\u2e02\0\u2e50\0\u2e9e\0\u2eec\0\u2f3a"+ "\0\u2f88\0\u2fd6\0\u3024\0\u3072\0\u30c0\0\u079e\0\u310e\0\u315c"+ "\0\u31aa\0\u31f8\0\u3246\0\u3294\0\u32e2\0\u3330\0\u337e\0\u33cc"+ "\0\u341a\0\u3468\0\u34b6\0\u1026\0\u3504\0\u1026\0\u3552\0\u35a0"+ "\0\u35ee\0\u363c\0\u368a\0\u36d8\0\u3726\0\u3774\0\u37c2\0\u3810"+ "\0\u385e\0\u38ac\0\u38fa\0\u3948\0\u3996\0\u39e4\0\u3a32\0\u3a80"+ "\0\u3ace\0\u3b1c\0\u3b6a\0\u3bb8\0\u3c06\0\u3c54\0\u3ca2\0\u3cf0"+ "\0\u3d3e\0\u3d8c\0\u3dda\0\u3e28\0\u0138\0\u3e76\0\u3ec4\0\u3f12"+ "\0\u3f60\0\u3fae\0\u3ffc\0\u404a\0\u4098\0\u40e6\0\u4134\0\u4182"+ "\0\u41d0\0\u421e\0\u426c\0\u42ba\0\u4308\0\u4356\0\u43a4\0\u43f2"+ "\0\u4440\0\u448e\0\u44dc\0\u452a\0\u4578\0\u45c6\0\u4614\0\u4662"+ "\0\u46b0\0\u46fe\0\u474c\0\u479a\0\u47e8\0\u4836\0\u4884\0\u48d2"+ "\0\u4920\0\u496e\0\u49bc\0\u4a0a\0\u4a58\0\u4aa6\0\u4af4\0\u4b42"+ "\0\u4b90\0\u4bde\0\u4c2c\0\u4c7a\0\u4cc8\0\u4d16\0\u0138\0\u4d64"+ "\0\u4db2\0\u4e00\0\u4e4e\0\u4e9c\0\u4eea\0\u4f38\0\u4f86\0\u4fd4"+ "\0\u5022\0\u5070\0\u50be\0\u510c\0\u515a\0\u079e\0\u51a8\0\u51f6"+ "\0\u5244\0\u5292\0\u52e0\0\u532e\0\u537c\0\u079e\0\u53ca\0\u5418"+ "\0\u5466\0\u54b4\0\u5502\0\u5550\0\u559e\0\u55ec\0\u563a\0\u5688"+ "\0\u56d6\0\u5724\0\u5772\0\u57c0\0\u580e\0\u585c\0\u58aa\0\u58f8"+ "\0\u5946\0\u5994\0\u59e2\0\u5a30\0\u5a7e\0\u5acc\0\u5b1a\0\u5b68"+ "\0\u5bb6\0\u5c04\0\u5c52\0\u5ca0\0\u5cee\0\u5d3c\0\u5d8a\0\u5dd8"+ "\0\u5e26\0\u5e74\0\u5ec2\0\u5f10\0\u5f5e\0\u5fac\0\u5ffa\0\u6048"+ "\0\u6096\0\u60e4\0\u6132\0\u6180\0\u61ce\0\u621c\0\u626a\0\u62b8"+ "\0\u6306\0\u6354\0\u63a2\0\u63f0\0\u643e\0\u648c\0\u64da\0\u6528"+ "\0\u6576\0\u65c4\0\u6612\0\u6660\0\u66ae\0\u66fc\0\u674a\0\u6798"+ "\0\u67e6\0\u6834\0\u6882\0\u68d0\0\u691e\0\u696c\0\u69ba\0\u6a08"+ "\0\u6a56\0\u6aa4\0\u6af2\0\u6b40\0\u6b8e\0\u6bdc\0\u6c2a\0\u6c78"+ "\0\u6cc6\0\u6d14\0\u6d62\0\u6db0\0\u6dfe\0\u6e4c\0\u6e9a\0\u6ee8"+ "\0\u6f36\0\u6f84\0\u6fd2\0\u7020\0\u706e\0\u70bc\0\u710a\0\u7158"+ "\0\u71a6\0\u71f4\0\u7242\0\u7290\0\u72de\0\u732c\0\u737a\0\u73c8"+ "\0\u7416\0\u7464\0\u74b2\0\u7500\0\u754e\0\u759c\0\u75ea\0\u7638"+ "\0\u7686\0\u76d4\0\u7722\0\u7770\0\u77be\0\u780c\0\u785a\0\u78a8"+ "\0\u78f6\0\u7944\0\u7992\0\u79e0\0\u7a2e\0\u7a7c\0\u7aca\0\u7b18"+ "\0\u7b66\0\u7bb4\0\u7c02\0\u7c50\0\u7c9e\0\u7cec\0\u7d3a\0\u7d88"+ "\0\u7dd6\0\u7e24\0\u7e72\0\u7ec0\0\u7f0e\0\u7f5c\0\u7faa\0\u7ff8"+ "\0\u8046\0\u8094\0\u80e2\0\u8130\0\u817e\0\u81cc\0\u821a\0\u8268"+ "\0\u82b6\0\u8304\0\u8352\0\u83a0\0\u83ee\0\u843c\0\u848a\0\u84d8"+ "\0\u8526\0\u8574\0\u85c2\0\u8610\0\u865e\0\u86ac\0\u86fa\0\u8748"+ "\0\u8796\0\u87e4\0\u8832\0\u8880\0\u88ce\0\u891c\0\u896a\0\u4356"+ "\0\u89b8\0\u8a06\0\u8a54\0\u8aa2\0\u8af0\0\u8b3e\0\u8b8c\0\u8bda"+ "\0\u8c28\0\u8c76\0\u8cc4\0\u8d12\0\u8d60\0\u8dae\0\u8dfc\0\u8e4a"+ "\0\u8e98\0\u8ee6\0\u8f34\0\u8f82\0\u8fd0\0\u901e\0\u906c\0\u90ba"+ "\0\u9108\0\u9156\0\u91a4\0\u91f2\0\u9240\0\u928e\0\u92dc\0\u932a"+ "\0\u9378\0\u93c6\0\u9414\0\u9462\0\u94b0\0\u94fe\0\u954c\0\u959a"+ "\0\u95e8\0\u9636\0\u9684\0\u1026\0\352\0\u96d2\0\u9720\0\u976e"+ "\0\u97bc\0\u980a\0\u9858\0\u98a6\0\u98f4\0\u9942\0\u9990\0\u99de"+ "\0\u9a2c\0\u9a7a\0\u9ac8\0\u9b16\0\u9b64\0\u363c\0\u9bb2\0\u9c00"+ "\0\u86fa\0\u9c4e\0\u87e4\0\u9c9c\0\u9cea\0\u9d38\0\u9d86\0\u9dd4"+ "\0\u9e22\0\u9e70\0\u9ebe\0\u9f0c\0\u0138\0\u9f5a\0\u9fa8\0\u9ff6"+ "\0\ua044\0\ua092\0\ua0e0\0\ua12e\0\ua17c\0\ua1ca\0\ua218\0\ua266"+ "\0\u079e\0\ua2b4\0\ua302\0\ua350\0\ua39e\0\ua3ec\0\ua43a\0\u92dc"+ "\0\ua488\0\ua4d6\0\ua524\0\ua572\0\ua5c0\0\ua60e\0\ua65c\0\ua6aa"+ "\0\u0138\0\ua6f8\0\ua746\0\ua794\0\ua7e2"; private static int [] zzUnpackRowMap() { int [] result = new int[581]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\4\1\5\1\6\1\7\1\5\1\7\1\5\1\10"+ "\1\11\1\12\1\13\1\14\1\15\1\16\1\17\1\20"+ "\1\21\1\22\1\23\1\24\1\25\1\26\1\27\1\30"+ "\1\31\1\32\1\33\1\34\1\35\1\36\1\31\1\37"+ "\1\40\1\7\1\5\1\41\1\42\1\43\1\44\1\45"+ "\1\46\1\31\2\5\1\47\1\5\1\50\1\51\2\4"+ "\1\32\1\52\1\53\1\31\1\5\1\54\1\53\1\55"+ "\4\5\2\7\1\5\1\56\10\5\1\32\1\57\1\60"+ "\1\31\12\61\1\62\30\61\1\63\5\61\1\64\14\61"+ "\1\65\2\61\1\66\24\61\12\67\1\70\30\67\1\71"+ "\22\67\1\72\2\67\1\73\24\67\7\4\1\0\17\4"+ "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4"+ "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\1\4"+ "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\1\5\1\74"+ "\4\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\3\75\1\7\1\75"+ "\1\7\1\76\1\0\1\75\1\76\3\75\1\77\4\75"+ "\1\100\4\75\11\0\1\75\1\7\1\75\2\0\2\75"+ "\1\7\2\0\1\100\1\77\1\101\1\75\1\0\3\75"+ "\4\0\2\75\1\0\5\75\2\7\12\75\13\0\1\53"+ "\20\0\1\53\65\0\1\4\6\5\1\0\1\5\1\102"+ "\1\5\1\103\4\5\1\104\6\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\2\5\1\105\16\5"+ "\4\0\1\4\6\5\1\0\4\5\1\106\1\107\1\5"+ "\1\110\7\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\3\5\1\111\15\5\4\0\1\4\6\5"+ "\1\0\1\5\1\112\1\113\2\5\1\114\1\115\1\116"+ "\1\117\1\120\1\5\1\121\1\122\1\123\1\124\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\1\5\1\125\1\0"+ "\1\126\20\5\4\0\1\4\6\5\1\0\2\5\1\127"+ "\1\5\1\130\1\5\1\131\10\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\1\5\1\132\12\5\1\133\2\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\1\134\7\5\1\135\3\5"+ "\1\136\2\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\1\5"+ "\1\137\1\5\1\140\2\5\1\141\1\142\1\5\1\143"+ "\1\5\1\144\3\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\1\145\1\146\1\0\1\147\1\5\1\150\5\5"+ "\1\151\10\5\4\0\1\4\6\5\1\0\1\5\1\152"+ "\12\5\1\153\2\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\2\5\1\154\10\5\1\155\3\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\1\5\1\156\3\5\1\157\2\5\1\160"+ "\3\5\1\161\2\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\1\162\1\163\1\0\21\5\4\0\1\4\6\5"+ "\1\0\4\5\1\164\1\5\1\165\10\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\1\5\1\166\5\5\1\167\1\170"+ "\1\5\1\171\4\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\6\5\1\172\2\5\1\173\1\174\4\5\11\0\1\4"+ "\2\5\2\0\1\5\1\175\1\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\176"+ "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\177"+ "\6\5\1\174\5\5\1\200\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\1\5\1\201\6\5\1\202\1\5\1\203\1\5"+ "\1\204\2\5\11\0\1\4\2\5\2\0\1\5\1\205"+ "\1\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\1\5\1\200\17\5\33\0"+ "\1\206\116\0\1\53\233\0\1\53\1\0\1\207\16\0"+ "\1\210\44\0\27\211\1\212\3\211\1\213\4\211\1\214"+ "\2\211\1\0\52\211\30\0\1\53\3\0\1\31\111\0"+ "\1\53\4\0\1\31\110\0\1\53\6\0\1\53\56\0"+ "\40\42\1\215\2\42\1\216\1\217\51\42\1\4\6\5"+ "\1\0\2\5\1\220\1\221\2\5\1\220\1\5\1\222"+ "\2\5\1\144\1\223\2\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\1\224\20\5\4\0\1\4"+ "\6\5\1\0\6\5\1\225\1\226\7\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\1\5\1\227\1\0\21\5"+ "\4\0\3\75\1\7\1\75\1\7\1\76\1\0\1\75"+ "\1\76\3\75\1\77\4\75\1\100\4\75\11\0\1\75"+ "\1\7\1\230\2\0\2\75\1\7\2\0\1\100\1\77"+ "\1\101\1\75\1\0\3\75\4\0\2\75\1\0\3\75"+ "\1\230\1\75\2\7\12\75\54\0\1\46\50\0\1\101"+ "\1\0\1\101\33\0\1\101\5\0\1\101\26\0\2\101"+ "\16\0\7\4\1\0\1\231\1\232\1\4\1\233\1\4"+ "\1\234\4\4\1\235\1\236\3\4\11\0\3\4\2\0"+ "\3\4\1\237\1\0\2\4\1\0\1\4\1\0\3\4"+ "\4\0\2\4\1\0\21\4\4\0\1\4\6\5\1\0"+ "\1\5\1\240\1\5\1\241\3\5\1\242\1\243\3\5"+ "\1\244\1\5\1\245\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\1\246\1\5\1\0\2\5\1\247\16\5\4\0"+ "\1\4\6\5\1\0\6\5\1\141\2\5\1\250\1\5"+ "\1\144\2\5\1\251\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\1\252\1\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\6\5\1\253\10\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\34\0\1\53\62\0"+ "\1\53\32\0\1\53\63\0\1\53\1\0\12\61\1\0"+ "\30\61\1\0\5\61\1\0\14\61\1\0\2\61\1\0"+ "\24\61\13\0\1\254\53\0\1\255\60\0\1\256\152\0"+ "\1\257\117\0\1\260\24\0\12\67\1\0\30\67\1\0"+ "\22\67\1\0\2\67\1\0\24\67\13\0\1\261\53\0"+ "\1\262\115\0\1\263\117\0\1\264\24\0\1\4\6\5"+ "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\1\5\1\265\1\0\1\266\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\11\5\1\267\1\5\1\270\3\5"+ "\1\271\1\5\4\0\7\75\1\0\17\75\11\0\3\75"+ "\2\0\3\75\2\0\2\75\1\0\1\75\1\0\3\75"+ "\4\0\2\75\1\0\21\75\4\0\3\75\1\272\1\75"+ "\1\272\1\75\1\273\17\75\10\0\1\273\1\75\1\272"+ "\1\75\2\0\2\75\1\272\2\0\2\75\1\0\1\75"+ "\1\0\3\75\4\0\2\75\1\0\5\75\2\272\12\75"+ "\4\0\7\75\1\0\12\75\1\274\4\75\11\0\3\75"+ "\2\0\3\75\2\0\1\274\1\75\1\0\1\75\1\0"+ "\3\75\4\0\2\75\1\0\21\75\4\0\7\75\1\0"+ "\5\75\1\274\11\75\11\0\3\75\2\0\3\75\2\0"+ "\1\75\1\274\1\0\1\75\1\0\3\75\4\0\2\75"+ "\1\0\21\75\4\0\3\75\1\101\1\75\1\101\1\275"+ "\1\0\1\75\1\275\1\276\2\75\1\276\11\75\11\0"+ "\1\75\1\101\1\75\2\0\2\75\1\101\2\0\1\75"+ "\1\276\1\0\1\276\1\0\3\75\4\0\2\75\1\0"+ "\5\75\2\101\12\75\4\0\1\4\6\5\1\0\2\5"+ "\1\277\2\5\1\300\11\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\2\5\1\301\14\5\11\0\1\4\2\5\2\0"+ "\1\302\2\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\12\5\1\303\4\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\4\5\1\304\12\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\12\5\1\305\4\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\6\5\1\306\10\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\7\5\1\307\7\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\3\5\1\310\7\5\1\311\3\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\1\5\1\312\1\0"+ "\21\5\4\0\1\4\6\5\1\0\7\5\1\313\1\314"+ "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\5\5\1\315"+ "\11\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\10\5\1\316"+ "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\317"+ "\7\5\1\143\5\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\1\5\1\320\1\5\1\321\13\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\7\5\1\127\3\5\1\322\3\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\5\5\1\323\11\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\7\5\1\324\2\5\1\325"+ "\4\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\5\5\1\326"+ "\11\5\11\0\1\4\2\5\2\0\1\5\1\327\1\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\1\5\1\330\15\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\10\5\1\331\6\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\1\5\1\332\15\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\6\5\1\141\1\333\3\5\1\144\3\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\5\5\1\334\11\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\1\5\1\335\1\0\21\5"+ "\4\0\1\4\6\5\1\0\1\336\4\5\1\337\1\340"+ "\2\5\1\341\1\342\1\343\1\344\1\345\1\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\3\5"+ "\1\346\15\5\4\0\1\4\6\5\1\0\17\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\1\127"+ "\20\5\4\0\1\4\6\5\1\0\16\5\1\347\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\1\5\1\350\1\5\1\351"+ "\13\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\352"+ "\4\5\1\353\3\5\1\354\1\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\1\5"+ "\1\327\1\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\1\5\1\355\1\0\21\5\4\0\1\4\6\5"+ "\1\0\4\5\1\356\10\5\1\357\1\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\4\5\1\360"+ "\14\5\4\0\1\4\6\5\1\0\11\5\1\143\5\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\14\5\1\361\2\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\14\5\1\362\2\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\7\5\1\324\7\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\10\5\1\363\6\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\7\5\1\364\4\5"+ "\1\365\2\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\3\5"+ "\1\366\2\5\1\141\4\5\1\144\3\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\6\5\1\367\10\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\7\5\1\310\7\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\3\5\1\370\1\371\7\5\1\204"+ "\1\372\1\373\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\1\5\1\374\1\0\1\375\20\5\4\0\1\4\6\5"+ "\1\0\3\5\1\376\1\331\12\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\2\5\1\377\14\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\1\5\1\u0100\15\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\3\5\1\u0101\13\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\1\5\1\u0102\6\5\1\u0103\3\5\1\u0104"+ "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\u0105"+ "\1\5\1\356\10\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\5\5\1\u0106\1\306\10\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\1\5\1\u0107\1\0\21\5\4\0\1\4"+ "\6\5\1\0\14\5\1\u0108\2\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\3\5\1\241\13\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\3\5\1\u0109\2\5\1\u010a\6\5\1\u010b"+ "\1\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\3\5\1\u010c"+ "\13\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\313"+ "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\3\5\1\u010d"+ "\4\5\1\u010e\6\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\1\u010f\20\5\4\0\1\4\6\5\1\0\17\5"+ "\11\0\1\4\2\5\2\0\1\5\1\u0110\1\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\1\5\1\u0111\1\0\21\5\4\0\1\4\6\5\1\0"+ "\3\5\1\u0112\2\5\1\u0113\2\5\1\200\5\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\10\5\1\327\6\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\1\5\1\u0114\1\0\21\5\4\0"+ "\1\4\6\5\1\0\6\5\1\u010f\1\5\1\151\6\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\1\5\1\u0115\6\5"+ "\1\u0116\3\5\1\u0117\2\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\1\5\1\u0118\1\0\21\5\4\0\1\4\6\5\1\0"+ "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ "\1\163\1\0\21\5\4\0\1\4\6\5\1\0\16\5"+ "\1\u0119\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\1\314\16\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\1\5\1\u011a\1\0\21\5"+ "\4\0\1\4\6\5\1\0\5\5\1\u0106\11\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\5\5\1\322\1\u011b\1\u011c"+ "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ "\1\227\1\0\21\5\34\0\10\53\56\0\33\u011d\1\u011e"+ "\7\u011d\1\0\101\u011d\1\u011f\3\u011d\1\u011e\7\u011d\1\0"+ "\57\u011d\1\u0120\3\u011d\2\211\1\u011d\1\211\2\u011d\1\211"+ "\4\u011d\1\211\2\u011d\1\211\3\u011d\1\u0121\4\u011d\1\211"+ "\1\u0122\1\u0123\1\0\3\211\1\u0122\17\u011d\1\211\4\u011d"+ "\1\u0123\1\u011d\2\u0122\16\u011d\5\216\1\42\3\216\2\42"+ "\1\216\1\42\2\216\1\42\4\216\1\42\2\216\1\42"+ "\3\216\1\42\4\216\2\42\1\u0124\1\0\4\42\17\216"+ "\1\42\4\216\1\u0124\1\216\2\42\56\216\1\u0125\3\216"+ "\1\u0126\51\216\1\4\6\5\1\0\13\5\1\144\3\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\1\224\20\5\4\0\1\4\6\5\1\0\7\5\1\u0127"+ "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\3\5\1\u0128"+ "\1\5\1\u0129\11\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\1\5\1\u012a"+ "\4\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\13\5\1\144\3\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\1\5\1\u012b\15\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\1\5\1\u012c\15\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\10\5\1\u012d\6\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\3\75\4\u012e\1\0"+ "\3\u012e\6\75\1\u012e\2\75\1\u012e\2\75\11\0\1\75"+ "\1\u012e\1\75\2\0\1\75\2\u012e\2\0\2\75\1\0"+ "\1\u012e\1\0\3\75\4\0\2\75\1\0\5\75\2\u012e"+ "\2\75\2\u012e\5\75\1\u012e\4\0\7\4\1\0\1\4"+ "\1\u012f\15\4\11\0\3\4\2\0\3\4\2\0\2\4"+ "\1\0\1\4\1\0\3\4\4\0\2\4\1\0\21\4"+ "\4\0\7\4\1\0\4\4\1\u0130\1\u0131\1\4\1\u0132"+ "\7\4\11\0\3\4\2\0\3\4\2\0\2\4\1\0"+ "\1\4\1\0\3\4\4\0\2\4\1\0\21\4\4\0"+ "\7\4\1\0\2\4\1\u0133\1\4\1\u0134\12\4\11\0"+ "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0"+ "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0"+ "\3\4\1\u0135\13\4\11\0\3\4\2\0\3\4\2\0"+ "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ "\21\4\4\0\7\4\1\0\4\4\1\u0136\12\4\11\0"+ "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0"+ "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0"+ "\7\4\1\u0137\7\4\11\0\3\4\2\0\3\4\2\0"+ "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ "\21\4\14\0\1\u0138\1\u0139\1\0\1\u013a\1\0\1\u013b"+ "\4\0\1\u013c\1\u013d\24\0\1\237\45\0\1\4\6\5"+ "\1\0\16\5\1\u013e\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\16\5\1\u013f\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\12\5"+ "\1\u0140\4\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\2\5\1\127\16\5\4\0\1\4\6\5"+ "\1\0\5\5\1\337\4\5\1\342\4\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\4\5\1\356\12\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\13\5\1\u0141\3\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\3\5\1\u0142\3\5\1\u0143\7\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\13\5\1\u0144\3\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\6\5\1\u0145\1\u0146"+ "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\u0147"+ "\1\u0148\1\0\21\5\4\0\1\4\6\5\1\0\1\5"+ "\1\201\15\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\3\5"+ "\1\u0149\13\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5"+ "\1\151\6\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\21\0\1\u014a\123\0\1\u014b\161\0"+ "\1\u014c\117\0\1\u014d\41\0\1\u014e\123\0\1\u014f\161\0"+ "\1\u0150\117\0\1\u0151\24\0\1\4\6\5\1\0\17\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\14\5\1\u0152\4\5\4\0\1\4\6\5\1\0\17\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\14\5\1\u0153\4\5\4\0\1\4\6\5\1\0\17\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\12\5\1\u0154\6\5\4\0\1\4\6\5\1\0\17\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\14\5\1\u0155\4\5\4\0\1\4\6\5\1\0\17\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\13\5\1\u0156\5\5\4\0\3\75\1\272\1\75\1\272"+ "\1\75\1\0\5\75\1\77\4\75\1\100\4\75\11\0"+ "\1\75\1\272\1\75\2\0\2\75\1\272\2\0\1\100"+ "\1\77\1\0\1\75\1\0\3\75\4\0\2\75\1\0"+ "\5\75\2\272\12\75\7\0\1\272\1\0\1\272\33\0"+ "\1\272\5\0\1\272\26\0\2\272\16\0\3\75\1\u0157"+ "\1\75\1\u0157\1\75\1\u0158\17\75\10\0\1\u0158\1\75"+ "\1\u0157\1\75\2\0\2\75\1\u0157\2\0\2\75\1\0"+ "\1\75\1\0\3\75\4\0\2\75\1\0\5\75\2\u0157"+ "\12\75\4\0\1\4\6\5\1\0\14\5\1\u0159\2\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\1\5\1\u015a\15\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\2\5\1\200\14\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\1\5\1\u015b\4\5\1\0\17\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ "\2\5\2\0\1\5\1\u015c\1\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\14\5\1\u015d\2\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\16\5\1\127\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\1\5\1\127\15\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\4\5\1\u015e\12\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\1\5\1\u010f\1\0\21\5\4\0"+ "\1\4\6\5\1\0\5\5\1\u015f\11\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\1\5\1\u0160\15\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\7\5\1\u0161\7\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\2\5\1\u010f\14\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\12\5\1\u0162\4\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\10\5\1\u0163\3\5\1\u015b\2\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\1\5\1\u0164\15\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\u0165"+ "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u010f"+ "\6\5\1\u0166\3\5\1\331\2\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\3\5\1\u0167\15\5"+ "\4\0\1\4\6\5\1\0\1\5\1\u0168\15\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\1\5\1\u0112\15\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\10\5\1\376\6\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\3\5\1\u0169\13\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\1\5\1\u016a\1\0\21\5\4\0"+ "\1\4\6\5\1\0\6\5\1\u0140\10\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\6\5\1\u010f\10\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\1\5\1\u016b\1\0\21\5\4\0\1\4"+ "\6\5\1\0\1\u010f\16\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\5\5\1\u0101\11\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\3\5\1\u016c\13\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\3\5\1\u016d\13\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\3\5\1\u016e\13\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\10\5\1\u016f\6\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\13\5\1\u0170\3\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\4\5\1\u0171\12\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\13\5\1\u0172\3\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\7\5\1\u0173\2\5\1\u0174\4\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\5\5\1\u0175\11\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\7\5\1\u0176\7\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\1\336\16\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\1\5\1\u0177\15\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\3\5\1\u0167\15\5\4\0\1\4"+ "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\1\302"+ "\2\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\15\5\1\u0178\1\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\14\5\1\u0179\2\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\6\5\1\u017a\12\5\4\0\1\4\6\5"+ "\1\0\5\5\1\u017b\11\5\11\0\1\4\2\5\2\0"+ "\1\u017c\1\u017d\1\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\7\5\1\u017e"+ "\11\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\1\u010f\1\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\4\5\1\u017f\12\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\1\5\1\u0180\15\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\4\5\1\331\12\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\4\5\1\314\12\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\7\5\1\u015b\7\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\1\5\1\166\1\200\1\5"+ "\1\u0181\1\322\1\u0182\1\u0183\1\5\1\u0184\1\u0185\1\u0186"+ "\3\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ "\1\u0187\1\0\3\5\1\u0188\15\5\4\0\1\4\6\5"+ "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\1\5\1\u0189\1\0\21\5\4\0\1\4\6\5\1\0"+ "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ "\1\u0107\1\0\21\5\4\0\1\4\6\5\1\0\17\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\u018a"+ "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\u018b"+ "\12\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\241"+ "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\3\5\1\u018c"+ "\13\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\10\5\1\u018d"+ "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\12\5\1\u018e"+ "\4\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\3\5\1\361"+ "\13\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u013f"+ "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u018f"+ "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\u0190"+ "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\5\5\1\u010f"+ "\11\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\u0191"+ "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\u0164"+ "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u0142"+ "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u0192"+ "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ "\1\u0193\1\0\21\5\4\0\1\4\6\5\1\0\5\5"+ "\1\u0194\11\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\11\5"+ "\1\u0195\5\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\7\5"+ "\1\335\7\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5"+ "\1\u0196\6\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\3\5"+ "\1\u0197\13\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\1\5"+ "\1\u0198\15\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\4\5"+ "\1\u0199\12\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\4\5"+ "\1\u019a\12\5\11\0\1\4\2\5\2\0\1\u019b\2\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ "\1\u019c\1\0\21\5\4\0\1\4\6\5\1\0\5\5"+ "\1\u019d\11\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\6\5"+ "\1\u010f\2\5\1\u019e\5\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\1\u019f\20\5\4\0\1\4"+ "\6\5\1\0\4\5\1\u010f\12\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\1\5\1\151\15\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\10\5\1\127\6\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\3\5\1\u01a0\15\5\4\0\1\4"+ "\6\5\1\0\2\5\2\u010f\1\5\1\u010f\11\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\4\5\1\u01a1\12\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\1\5\1\u01a2\4\5\1\u010f"+ "\2\5\1\u019e\5\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\1\u019f\20\5\4\0\1\4\6\5"+ "\1\0\6\5\1\u01a3\2\5\1\u01a4\4\5\1\373\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\14\5\1\u01a5\2\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\3\5\1\u01a6\3\5\1\u01a7"+ "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ "\1\u01a8\1\0\21\5\4\0\1\4\6\5\1\0\5\5"+ "\1\322\11\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\1\5\1\227\1\0\21\5\4\0\33\u011d\1\213\7\u011d"+ "\1\0\102\u011d\3\211\1\u0121\4\211\3\u011d\1\0\57\u011d"+ "\1\211\25\u011d\1\u011e\5\u011d\1\211\1\u011d\1\0\3\u011d"+ "\1\211\26\u011d\2\211\16\u011d\33\0\1\u011e\62\0\5\u011d"+ "\1\u0120\25\u011d\1\u011e\5\u011d\1\u0120\1\u011d\1\0\3\u011d"+ "\1\u0120\26\u011d\2\u0120\21\u011d\4\u01a9\1\u011d\3\u01a9\6\u011d"+ "\1\u01a9\2\u011d\1\u01a9\6\u011d\1\213\5\u011d\1\u01a9\1\u011d"+ "\1\0\2\u011d\2\u01a9\5\u011d\1\u01a9\20\u011d\2\u01a9\2\u011d"+ "\2\u01a9\5\u011d\1\u01a9\4\u011d\3\216\4\u01aa\1\216\3\u01aa"+ "\6\216\1\u01aa\2\216\1\u01aa\13\216\1\u0125\1\u01aa\2\216"+ "\1\u0126\1\216\2\u01aa\5\216\1\u01aa\20\216\2\u01aa\2\216"+ "\2\u01aa\5\216\1\u01aa\47\216\1\0\52\216\1\4\6\5"+ "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\1\5\1\u01ab\1\0\21\5\4\0\1\4\6\5\1\0"+ "\1\335\16\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\14\5"+ "\1\u01ac\2\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\1\5"+ "\1\361\4\5\1\u01ad\5\5\1\u01ae\2\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\14\5\1\u01af\2\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\14\5\1\u01b0\2\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\1\u01b1\20\5\4\0\3\75"+ "\4\u012e\1\0\3\u012e\2\75\1\u01b2\3\75\1\u012e\1\u01b3"+ "\1\75\1\u012e\2\75\11\0\1\75\1\u012e\1\75\2\0"+ "\1\75\2\u012e\2\0\1\u01b3\1\u01b2\1\0\1\u012e\1\0"+ "\3\75\4\0\2\75\1\0\5\75\2\u012e\2\75\2\u012e"+ "\5\75\1\u012e\4\0\7\4\1\0\2\4\1\234\14\4"+ "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4"+ "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\7\4"+ "\1\0\1\u01b4\16\4\11\0\3\4\2\0\3\4\2\0"+ "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ "\21\4\4\0\7\4\1\0\3\4\1\u01b5\2\4\1\u01b6"+ "\10\4\11\0\3\4\2\0\3\4\2\0\2\4\1\0"+ "\1\4\1\0\3\4\4\0\2\4\1\0\21\4\4\0"+ "\7\4\1\0\7\4\1\u01b7\7\4\11\0\3\4\2\0"+ "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ "\2\4\1\0\21\4\4\0\7\4\1\0\1\u01b8\3\4"+ "\1\u0136\12\4\11\0\3\4\2\0\3\4\2\0\2\4"+ "\1\0\1\4\1\0\3\4\4\0\2\4\1\0\21\4"+ "\4\0\7\4\1\0\11\4\1\u01b9\5\4\11\0\3\4"+ "\2\0\3\4\2\0\2\4\1\0\1\4\1\0\3\4"+ "\4\0\2\4\1\0\21\4\4\0\7\4\1\0\4\4"+ "\1\u01b6\12\4\11\0\3\4\2\0\3\4\2\0\2\4"+ "\1\0\1\4\1\0\3\4\4\0\2\4\1\0\21\4"+ "\4\0\7\4\1\0\1\u01b8\16\4\11\0\3\4\2\0"+ "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ "\2\4\1\0\21\4\4\0\7\4\1\0\14\4\1\u01ba"+ "\2\4\11\0\3\4\2\0\3\4\2\0\2\4\1\0"+ "\1\4\1\0\3\4\4\0\2\4\1\0\21\4\15\0"+ "\1\u01bb\120\0\1\u01bc\1\u01bd\1\0\1\u01be\110\0\1\u01bf"+ "\1\0\1\u01c0\114\0\1\u01c1\116\0\1\u01c2\120\0\1\u01c3"+ "\76\0\1\4\6\5\1\0\13\5\1\u01c4\3\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\1\5\1\u010f\15\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\1\5\1\335\15\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\2\5\1\u01c5\1\5\1\u01c6"+ "\12\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\127"+ "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\10\5\1\132"+ "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u01c7"+ "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\2\5\1\200"+ "\1\5\1\u0181\1\322\1\u0182\1\u01c8\1\5\1\u0184\1\5"+ "\1\u0186\3\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\1\5\1\u01c9\1\0\3\5\1\u0188\15\5\4\0\1\4"+ "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\1\5\1\u01ca\1\0\21\5\4\0\1\4\6\5"+ "\1\0\14\5\1\u01cb\2\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\10\5\1\u01cc\6\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\5\5\1\306\11\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\15\0\1\u014b\174\0"+ "\1\u01cd\50\0\1\u01ce\146\0\1\u01cf\52\0\1\u014f\174\0"+ "\1\u01d0\50\0\1\u01d1\146\0\1\u01d2\41\0\1\4\6\5"+ "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\16\5\1\u01d3\2\5\4\0\1\4\6\5"+ "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\1\5\1\u01d3\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\13\5\1\u01d3\5\5\4\0\1\4\6\5\1\0"+ "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\15\5\1\u01d3\3\5\4\0\1\4\6\5\1\0"+ "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\11\5\1\u01d4\7\5\4\0\3\75\1\u0157\1\75"+ "\1\u0157\1\75\1\0\2\75\1\276\2\75\1\276\11\75"+ "\11\0\1\75\1\u0157\1\75\2\0\2\75\1\u0157\2\0"+ "\1\75\1\276\1\0\1\276\1\0\3\75\4\0\2\75"+ "\1\0\5\75\2\u0157\12\75\7\0\1\u0157\1\0\1\u0157"+ "\33\0\1\u0157\5\0\1\u0157\26\0\2\u0157\16\0\1\4"+ "\6\5\1\0\12\5\1\u01d5\4\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\1\5\1\306\1\0\21\5\4\0\1\4\6\5"+ "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\1\5\1\335\1\0\21\5\4\0\1\4\6\5\1\0"+ "\5\5\1\u0140\11\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\16\5\1\u01d6\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5"+ "\1\u010f\6\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\3\5"+ "\1\u01d7\13\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\7\5"+ "\1\u0196\7\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5"+ "\1\u0163\6\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\6\5"+ "\1\u01d8\10\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\7\5"+ "\1\u010f\7\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\17\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\1\5\1\u010f\17\5\4\0\1\4\6\5\1\0\13\5"+ "\1\173\3\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\13\5"+ "\1\322\3\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\13\5"+ "\1\u010f\3\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\4\5"+ "\1\u01d9\12\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\4\5"+ "\1\u019a\12\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\6\5"+ "\1\u010f\2\5\1\u010f\5\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\1\u01da\20\5\4\0\1\4"+ "\6\5\1\0\6\5\1\u010f\2\5\1\u010f\1\5\1\173"+ "\3\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\1\u01da\20\5\4\0\1\4\6\5\1\0\17\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\u013f"+ "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\306"+ "\12\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\15\5\1\u01a0"+ "\1\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\1\u01db"+ "\20\5\4\0\1\4\6\5\1\0\14\5\1\u01dc\2\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\1\5\1\u01dd\1\0\21\5"+ "\4\0\1\4\6\5\1\0\13\5\1\u01db\3\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\3\5\1\u01de\13\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\4\5\1\u01df\12\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\4\5\1\u01e0\6\5\1\u01e1"+ "\3\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\u01e2"+ "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u01e3"+ "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\7\5"+ "\1\u017e\11\5\4\0\1\4\6\5\1\0\5\5\1\u01e4"+ "\11\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ "\1\4\2\5\2\0\2\5\1\u010f\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\10\5\1\u01e5\6\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ "\2\5\2\0\1\5\1\u017d\1\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\12\5\1\314\4\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\16\5\1\u0167\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\1\5\1\u0128\12\5\1\u0101"+ "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\1\5\1\u015b\4\5\1\0"+ "\10\5\1\u01e6\6\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\11\5\1\u01e7\5\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\13\5\1\u0112\3\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\1\5\1\u0163\1\0\21\5\4\0\1\4\6\5"+ "\1\0\11\5\1\u01e8\5\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\6\5\1\u01e9\1\5\1\332\2\5\1\u01ea\1\310"+ "\1\5\1\u0167\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\1\u0163\1\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\11\5\1\u01eb\5\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\17\5\11\0\1\4\2\5\2\0\1\5\1\u01ec\1\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\10\5\1\u01ed\6\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\2\5\1\u01ee\14\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\3\5\1\u01ef\13\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\1\5\1\u01f0\15\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ "\1\u01f1\1\0\21\5\4\0\1\4\6\5\1\0\6\5"+ "\1\u01f2\10\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\17\5"+ "\11\0\1\4\2\5\2\0\1\u013f\2\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\u01f3"+ "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u01f4"+ "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\u01f5"+ "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\u01f6"+ "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\1\5\1\u01f7\1\0"+ "\21\5\4\0\1\4\6\5\1\0\3\5\1\u01f8\13\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\10\5\1\u01b1\6\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\1\127\1\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\4\5\1\127\12\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\15\5\1\u01f9\1\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\1\5\1\u01fa\1\0\21\5\4\0"+ "\1\4\6\5\1\0\15\5\1\127\1\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\1\5\1\314\1\0\21\5\4\0\1\4"+ "\6\5\1\0\14\5\1\u015a\2\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\1\5\1\u01fb\15\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\3\5\1\u01fc\13\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\1\u01fd\1\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\11\5\1\u019e\5\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\3\5\1\310\13\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\5\5\1\u010f\13\5\4\0\1\4\6\5"+ "\1\0\4\5\1\u01fe\12\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\1\5\1\310\15\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\13\5\1\u01ea\2\5\1\u0167\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\1\u0163\1\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ "\1\5\1\u0149\1\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\4\5\1\u01a0\12\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\1\5\1\u01a8\1\0\21\5\4\0\1\4"+ "\6\5\1\0\10\5\1\u01ff\6\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\3\u011d"+ "\4\211\1\u011d\3\211\6\u011d\1\211\2\u011d\1\211\6\u011d"+ "\1\213\5\u011d\1\211\1\u011d\1\0\2\u011d\2\211\5\u011d"+ "\1\211\20\u011d\2\211\2\u011d\2\211\5\u011d\1\211\4\u011d"+ "\3\216\4\42\1\216\3\42\6\216\1\42\2\216\1\42"+ "\13\216\1\u0125\1\42\2\216\1\u0126\1\216\2\42\5\216"+ "\1\42\20\216\2\42\2\216\2\42\5\216\1\42\4\216"+ "\1\4\6\5\1\0\12\5\1\u0200\4\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\1\5\1\252\1\0\21\5\4\0\1\4"+ "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\1\5\1\u0201\1\0\21\5\4\0\1\4\6\5"+ "\1\0\7\5\1\u0202\7\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\7\5\1\u0203\7\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\1\5\1\127\17\5\4\0\1\4\6\5"+ "\1\0\11\5\1\u010f\5\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\7\75\1\0"+ "\12\75\1\u0204\4\75\11\0\3\75\2\0\3\75\2\0"+ "\1\u0204\1\75\1\0\1\75\1\0\3\75\4\0\2\75"+ "\1\0\21\75\4\0\7\75\1\0\5\75\1\u0204\11\75"+ "\11\0\3\75\2\0\3\75\2\0\1\75\1\u0204\1\0"+ "\1\75\1\0\3\75\4\0\2\75\1\0\21\75\4\0"+ "\7\4\1\0\3\4\1\u01b5\13\4\11\0\3\4\2\0"+ "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ "\2\4\1\0\21\4\4\0\7\4\1\0\2\4\1\u0205"+ "\14\4\11\0\3\4\2\0\3\4\2\0\2\4\1\0"+ "\1\4\1\0\3\4\4\0\2\4\1\0\21\4\4\0"+ "\7\4\1\0\1\4\1\u0205\15\4\11\0\3\4\2\0"+ "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ "\2\4\1\0\21\4\4\0\7\4\1\0\10\4\1\u0206"+ "\6\4\11\0\3\4\2\0\3\4\2\0\2\4\1\0"+ "\1\4\1\0\3\4\4\0\2\4\1\0\21\4\4\0"+ "\7\4\1\0\1\4\1\u01b5\15\4\11\0\3\4\2\0"+ "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ "\2\4\1\0\21\4\4\0\7\4\1\0\5\4\1\u0207"+ "\11\4\11\0\3\4\2\0\3\4\2\0\2\4\1\0"+ "\1\4\1\0\3\4\4\0\2\4\1\0\21\4\4\0"+ "\7\4\1\0\15\4\1\u0208\1\4\11\0\3\4\2\0"+ "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ "\2\4\1\0\21\4\16\0\1\u013b\113\0\1\u0209\120\0"+ "\1\u020a\2\0\1\u020b\116\0\1\u020c\106\0\1\u020d\3\0"+ "\1\u01c2\122\0\1\u020e\110\0\1\u020b\111\0\1\u020d\131\0"+ "\1\u020f\71\0\1\4\6\5\1\0\5\5\1\u019b\11\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\3\5\1\u0210\13\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\14\5\1\u01f0\2\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\1\u0211\2\5\1\u01d9"+ "\1\u0212\12\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\11\5"+ "\1\u01e8\5\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\1\5\1\u0213\1\0\21\5\4\0\1\4\6\5\1\0"+ "\10\5\1\u0214\6\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\10\5\1\u0215\6\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\7\5\1\u0216\7\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\16\5\1\u0217\11\0\1\4\2\5\2\0\1\5\1\u010f"+ "\1\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\36\0\1\u0218\101\0"+ "\1\u014b\51\0\1\u01cd\26\0\1\u01cf\1\u0219\4\u01cf\1\u0219"+ "\17\u01cf\3\u0219\1\u01cf\1\u0219\2\0\2\u0219\1\0\2\u01cf"+ "\2\0\3\u01cf\1\0\1\u0219\2\u01cf\1\u0219\1\u01cf\1\0"+ "\1\u0219\1\u01cf\5\u0219\2\u01cf\1\u0219\21\u01cf\1\0\1\u0219"+ "\34\0\1\u021a\101\0\1\u014f\51\0\1\u01d0\26\0\1\u01d2"+ "\1\u021b\4\u01d2\1\u021b\17\u01d2\3\u021b\1\u01d2\1\u021b\2\0"+ "\2\u021b\1\0\2\u01d2\2\0\3\u01d2\1\0\1\u021b\2\u01d2"+ "\1\u021b\1\u01d2\1\0\1\u021b\1\u01d2\5\u021b\2\u01d2\1\u021b"+ "\21\u01d2\1\0\1\u021b\2\0\1\4\5\5\1\u021c\1\0"+ "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\20\5"+ "\1\u021c\4\0\1\4\6\5\1\0\5\5\1\u01eb\11\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\3\5\1\u021d\13\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\11\5\1\u021e\5\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\1\127\16\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\6\5\1\u010f\2\5\1\u010f"+ "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u0163"+ "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\u013f"+ "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\u0101"+ "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\310"+ "\12\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\310"+ "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\12\5\1\u01f0"+ "\4\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\1\u021f\1\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\13\5\1\u01d8\3\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\13\5\1\u0220\3\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\1\5\1\u0221\15\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\163"+ "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\u0222"+ "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\2\5\1\127"+ "\14\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\13\5\1\u01ea"+ "\1\310\1\5\1\u0167\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\u0163"+ "\1\5\1\0\21\5\4\0\1\4\6\5\1\0\13\5"+ "\1\u0112\3\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\17\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\2\5\1\u010f\16\5\4\0\1\4\6\5\1\0\17\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\127"+ "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\u0164"+ "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\1\u010f\4\5"+ "\1\u010f\4\5\1\u0101\4\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\1\5\1\u010f\17\5\4\0"+ "\1\4\6\5\1\0\7\5\1\u01f0\7\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\11\5\1\u01f7\5\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\16\5\1\u010f\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\1\5\1\u0223\15\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\1\5\1\u0224\1\0\21\5\4\0\1\4\6\5"+ "\1\0\4\5\1\u0225\12\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\1\5\1\u0226\1\0\21\5\4\0\1\4\6\5\1\0"+ "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ "\1\u0227\1\0\21\5\4\0\1\4\6\5\1\0\1\5"+ "\1\u0228\15\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\1\5\1\u0229\4\5"+ "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\4\5"+ "\1\u022a\12\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\4\5"+ "\1\u022b\12\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\11\5"+ "\1\u010f\5\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\1\u01b1\20\5\4\0\1\4\6\5\1\0"+ "\11\5\1\u022c\5\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\11\5\1\127\5\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\14\5\1\u0163\2\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\17\5\11\0\1\4\2\5\2\0\1\u010f\2\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\17\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\1\u022d\20\5\4\0\1\4\6\5\1\0\14\5\1\u022e"+ "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\151"+ "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\15\5\1\u010f"+ "\1\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\u01d8"+ "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\7\4\1\0\7\4\1\u0205\7\4"+ "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4"+ "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\7\4"+ "\1\0\12\4\1\u022f\4\4\11\0\3\4\2\0\3\4"+ "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4"+ "\1\0\21\4\4\0\7\4\1\0\16\4\1\u0230\11\0"+ "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0"+ "\3\4\4\0\2\4\1\0\21\4\17\0\1\u020a\114\0"+ "\1\u0231\114\0\1\u0231\124\0\1\u0232\106\0\1\u020a\121\0"+ "\1\u0233\125\0\1\u0234\70\0\1\4\6\5\1\0\5\5"+ "\1\u013f\11\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\1\5"+ "\1\u01e6\15\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\14\5"+ "\1\u0235\2\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5"+ "\1\u0236\6\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\1\u010f"+ "\4\5\1\u010f\4\5\1\u0101\3\5\1\136\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\1\5\1\u010f"+ "\17\5\4\0\1\4\6\5\1\0\16\5\1\u0217\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ "\2\0\1\5\1\u010f\1\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\36\0\1\u01cf\115\0\1\u01d2\63\0\1\4\1\5\1\u0237"+ "\4\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\11\5\1\u0238\5\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\3\5\1\u01eb\13\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\14\5\1\u010f\2\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\14\5\1\u0239\2\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\11\5\1\u023a\5\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\14\5\1\u0210\2\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\7\5\1\u023b\7\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\1\5\1\u023c\15\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\10\5\1\314\6\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\10\5\1\u023c\6\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\7\5\1\u0163\7\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\11\5\1\u023d\5\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\12\5\1\306\4\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\1\5\1\u0128\15\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ "\1\u023e\1\0\21\5\4\0\1\4\6\5\1\0\11\5"+ "\1\327\5\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\5\5"+ "\1\127\11\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\7\4\1\0\1\u01b6\16\4"+ "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4"+ "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\7\4"+ "\1\0\14\4\1\u0205\2\4\11\0\3\4\2\0\3\4"+ "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4"+ "\1\0\21\4\23\0\1\u0231\120\0\1\u023f\121\0\1\u0240"+ "\67\0\1\4\6\5\1\0\16\5\1\306\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\16\5\1\136\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\1\5\1\u0241\4\5\1\0\17\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\11\5\1\306\5\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\10\5\1\u01a2\6\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\13\5\1\u0242\3\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\7\5\1\127\7\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\14\5\1\u0243\2\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\1\5\1\u01d9\15\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\14\0\1\u020b"+ "\131\0\1\u0231\71\0\1\4\6\5\1\0\7\5\1\u0244"+ "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u01eb"+ "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u0245"+ "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\1\5\1\u0238\1\0"+ "\21\5\4\0"; private static int [] zzUnpackTrans() { int [] result = new int[43056]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\3\0\26\1\1\11\6\1\1\11\6\1\1\11\1\1"+ "\2\11\7\1\1\11\5\1\1\11\114\1\1\0\2\11"+ "\2\1\1\11\3\1\1\11\17\1\1\0\14\1\2\0"+ "\1\11\6\0\6\1\1\0\142\1\1\11\7\1\1\11"+ "\21\1\6\0\14\1\10\0\6\1\1\0\142\1\4\0"+ "\1\1\4\0\11\1\2\0\1\1\2\0\67\1\7\0"+ "\10\1\4\0\25\1\1\11\3\0\12\1\2\0\5\1"; private static int [] zzUnpackAttribute() { int [] result = new int[581]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public CPlusPlusTokenMaker() { super(); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.COMMENT_MULTILINE: state = MLC; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public CPlusPlusTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public CPlusPlusTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 184) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 27: { addToken(Token.PREPROCESSOR); } case 31: break; case 7: { addNullToken(); return firstToken; } case 32: break; case 24: { addToken(Token.LITERAL_CHAR); } case 33: break; case 21: { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } case 34: break; case 17: { start = zzMarkedPos-2; yybegin(MLC); } case 35: break; case 9: { addToken(Token.WHITESPACE); } case 36: break; case 26: { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } case 37: break; case 18: { addToken(Token.ERROR_CHAR); /*addNullToken(); return firstToken;*/ } case 38: break; case 25: { addToken(Token.ERROR_STRING_DOUBLE); } case 39: break; case 14: { addToken(Token.LITERAL_NUMBER_FLOAT); } case 40: break; case 15: { addToken(Token.RESERVED_WORD); } case 41: break; case 5: { addToken(Token.SEPARATOR); } case 42: break; case 2: { addToken(Token.IDENTIFIER); } case 43: break; case 12: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } case 44: break; case 16: { start = zzMarkedPos-2; yybegin(EOL_COMMENT); } case 45: break; case 22: { addToken(Token.FUNCTION); } case 46: break; case 6: { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; } case 47: break; case 8: { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } case 48: break; case 23: { addToken(Token.DATA_TYPE); } case 49: break; case 1: { addToken(Token.ERROR_IDENTIFIER); } case 50: break; case 19: { addToken(Token.ERROR_CHAR); } case 51: break; case 20: { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } case 52: break; case 29: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } case 53: break; case 28: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } case 54: break; case 30: { addToken(Token.RESERVED_WORD_2); } case 55: break; case 13: { addToken(Token.ERROR_NUMBER_FORMAT); } case 56: break; case 3: { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } case 57: break; case 4: { addToken(Token.OPERATOR); } case 58: break; case 10: { } case 59: break; case 11: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } case 60: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case EOL_COMMENT: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } case 582: break; case YYINITIAL: { addNullToken(); return firstToken; } case 583: break; case MLC: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } case 584: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSSTokenMaker.flex000066400000000000000000000401511257417003700312220ustar00rootroot00000000000000/* * 09/03/2005 * * CSSTokenMaker.java - Token maker for CSS 3 files. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * This class splits up text into tokens representing a CSS 3 file. It's * written with a few extra internal states so that it can easily be copy * and pasted into HTML, PHP, and JSP TokenMakres when it is updated.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated CSSTokenMaker.java file will contain 2 * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.5 * */ %% %public %class CSSTokenMaker %extends AbstractJFlexCTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Internal type denoting a line ending in a CSS property. */ public static final int INTERNAL_CSS_PROPERTY = -1; /** * Internal type denoting a line ending in a CSS property value. */ public static final int INTERNAL_CSS_VALUE = -2; /** * Internal type denoting line ending in a CSS double-quote string. * The state to return to is embedded in the actual end token type. */ public static final int INTERNAL_CSS_STRING = -(1<<11); /** * Internal type denoting line ending in a CSS single-quote string. * The state to return to is embedded in the actual end token type. */ public static final int INTERNAL_CSS_CHAR = -(2<<11); /** * Internal type denoting line ending in a CSS multi-line comment. * The state to return to is embedded in the actual end token type. */ public static final int INTERNAL_CSS_MLC = -(3<<11); /** * The state previous CSS-related state we were in before going into a CSS * string, multi-line comment, etc. */ private int cssPrevState; /** * Whether we are highlighting less instead of CSS. */ private boolean highlightingLess; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public CSSTokenMaker() { super(); } /** * Adds the token specified to the current linked list of tokens as an * "end token;" that is, at zzMarkedPos. * * @param tokenType The token's type. */ private void addEndToken(int tokenType) { addToken(zzMarkedPos,zzMarkedPos, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * Returns the closest {@link TokenTypes "standard" token type} for a given * "internal" token type (e.g. one whose value is < 0). */ @Override public int getClosestStandardTokenTypeForInternalType(int type) { switch (type) { case INTERNAL_CSS_STRING: case INTERNAL_CSS_CHAR: return TokenTypes.LITERAL_STRING_DOUBLE_QUOTE; case INTERNAL_CSS_MLC: return TokenTypes.COMMENT_MULTILINE; } return type; } /** * Returns true since CSS uses curly braces. * * @return true always. */ public boolean getCurlyBracesDenoteCodeBlocks() { return true; } /** * {@inheritDoc} */ @Override public boolean getMarkOccurrencesOfTokenType(int type) { return type==Token.RESERVED_WORD; // Used for CSS keys } /** * {@inheritDoc} */ @Override public boolean getShouldIndentNextLineAfter(Token t) { if (t!=null && t.length()==1) { char ch = t.charAt(0); return ch=='{' || ch=='('; } return false; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; cssPrevState = YYINITIAL; // Shouldn't be necessary // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.LITERAL_STRING_DOUBLE_QUOTE: state = CSS_STRING; break; case Token.LITERAL_CHAR: state = CSS_CHAR_LITERAL; break; case Token.COMMENT_MULTILINE: state = CSS_C_STYLE_COMMENT; break; case INTERNAL_CSS_PROPERTY: state = CSS_PROPERTY; break; case INTERNAL_CSS_VALUE: state = CSS_VALUE; break; default: if (initialTokenType<-1024) { int main = -(-initialTokenType & 0xffffff00); switch (main) { default: // Should never happen case INTERNAL_CSS_STRING: state = CSS_STRING; break; case INTERNAL_CSS_CHAR: state = CSS_CHAR_LITERAL; break; case INTERNAL_CSS_MLC: state = CSS_C_STYLE_COMMENT; break; } cssPrevState = -initialTokenType&0xff; } else { state = Token.NULL; } } start = text.offset; s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Overridden to accept letters, digits, underscores, and hyphens. */ @Override public boolean isIdentifierChar(int languageIndex, char ch) { return Character.isLetterOrDigit(ch) || ch=='-' || ch=='.' || ch=='_'; } /** * Toggles whether we're highlighting less instead of just CSS. * * @param highlightingLess Whether we're highlighting less. */ public void setHighlightingLess(boolean highlightingLess) { this.highlightingLess = highlightingLess; } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} Digit = ([0-9]) Letter = ([A-Za-z]) LetterOrUnderscore = ({Letter}|[_]) LetterOrUnderscoreOrDash = ({LetterOrUnderscore}|[\-]) CSS_SelectorPiece = (("*"|"."|{LetterOrUnderscoreOrDash})({LetterOrUnderscoreOrDash}|"."|{Digit})*) CSS_PseudoClass = (":"("root"|"nth-child"|"nth-last-child"|"nth-of-type"|"nth-last-of-type"|"first-child"|"last-child"|"first-of-type"|"last-of-type"|"only-child"|"only-of-type"|"empty"|"link"|"visited"|"active"|"hover"|"focus"|"target"|"lang"|"enabled"|"disabled"|"checked"|":first-line"|":first-letter"|":before"|":after"|"not")) CSS_AtRule = ("@"(charset|import|namespace|media|document|page|font-face|keyframes|viewport)) CSS_Less_Var = ("@"({LetterOrUnderscoreOrDash})({LetterOrUnderscoreOrDash}|"."|{Digit})*) CSS_Id = ("#"{CSS_SelectorPiece}) CSS_Separator = ([;\(\)\[\]]) WhiteSpace = ([ \t]+) MlcStart = ("/*") MlcEnd = ("*/") CSS_Property = ([\*]?{LetterOrUnderscoreOrDash}({LetterOrUnderscoreOrDash}|{Digit})*) CSS_ValueChar = ({LetterOrUnderscoreOrDash}|[\\/]) CSS_Value = ({CSS_ValueChar}*) CSS_Function = ({CSS_Value}\() CSS_Digits = ([\-]?{Digit}+([0-9\.]+)?(pt|pc|in|mm|cm|em|ex|px|ms|s|%)?) CSS_Hex = ("#"[0-9a-fA-F]+) CSS_Number = ({CSS_Digits}|{CSS_Hex}) URLGenDelim = ([:\/\?#\[\]@]) URLSubDelim = ([\!\$&'\(\)\*\+,;=]) URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) URLCharacters = ({URLCharacter}*) URLEndCharacter = ([\/\$]|{Letter}|{Digit}) URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) %state CSS_PROPERTY %state CSS_VALUE %state CSS_STRING %state CSS_CHAR_LITERAL %state CSS_C_STYLE_COMMENT %% { {CSS_SelectorPiece} { addToken(Token.DATA_TYPE); } {CSS_PseudoClass} { addToken(Token.RESERVED_WORD); } ":" { /* Unknown pseudo class */ addToken(Token.DATA_TYPE); } {CSS_AtRule} { addToken(Token.REGEX); } {CSS_Less_Var} { addToken(highlightingLess ? Token.VARIABLE : Token.REGEX); } {CSS_Number} { addToken(highlightingLess ? Token.LITERAL_NUMBER_DECIMAL_INT : Token.IDENTIFIER); } {CSS_Id} { addToken(highlightingLess ? Token.ANNOTATION : Token.VARIABLE); } "{" { addToken(Token.SEPARATOR); yybegin(CSS_PROPERTY); } [,] { addToken(Token.IDENTIFIER); } \" { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } \' { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } "}" { addToken(highlightingLess ? Token.SEPARATOR : Token.IDENTIFIER); } [+>~\^$\|=] { addToken(Token.OPERATOR); } {CSS_Separator} { addToken(Token.SEPARATOR); } {WhiteSpace} { addToken(Token.WHITESPACE); } {MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } . { /*System.out.println("yyinitial: " + yytext());*/ addToken(Token.IDENTIFIER); } "\n" | <> { addNullToken(); return firstToken; } } { {CSS_Property} { addToken(Token.RESERVED_WORD); } {CSS_Less_Var} { addToken(highlightingLess ? Token.VARIABLE : Token.IDENTIFIER); } "{" { addToken(Token.SEPARATOR); /* helps with auto-closing curlies when editing CSS */ } "}" { addToken(Token.SEPARATOR); yybegin(YYINITIAL); } ":" { addToken(Token.OPERATOR); yybegin(CSS_VALUE); } {WhiteSpace} { addToken(Token.WHITESPACE); } {MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } . { /*System.out.println("css_property: " + yytext());*/ addToken(Token.IDENTIFIER); } "\n" | <> { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; } } { {CSS_Value} { addToken(Token.IDENTIFIER); } "!important" { addToken(Token.PREPROCESSOR); } {CSS_Function} { int temp = zzMarkedPos - 2; addToken(zzStartRead, temp, Token.FUNCTION); addToken(zzMarkedPos-1, zzMarkedPos-1, Token.SEPARATOR); zzStartRead = zzCurrentPos = zzMarkedPos; } {CSS_Number} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {CSS_Less_Var} { addToken(highlightingLess ? Token.VARIABLE : Token.IDENTIFIER); } \" { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } \' { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } ")" { /* End of a function */ addToken(Token.SEPARATOR); } [;] { addToken(Token.OPERATOR); yybegin(CSS_PROPERTY); } [,\.] { addToken(Token.IDENTIFIER); } "}" { addToken(Token.SEPARATOR); yybegin(YYINITIAL); } {WhiteSpace} { addToken(Token.WHITESPACE); } {MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } . { /*System.out.println("css_value: " + yytext());*/ addToken(Token.IDENTIFIER); } "\n" | <> { addEndToken(INTERNAL_CSS_VALUE); return firstToken; } } { [^\n\\\"]+ {} \\.? { /* Skip escaped chars. */ } \" { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(cssPrevState); } \n | <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; } } { [^\n\\\']+ {} \\.? { /* Skip escaped chars. */ } \' { addToken(start,zzStartRead, Token.LITERAL_CHAR); yybegin(cssPrevState); } \n | <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; } } { [^hwf\n\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } [hwf] {} {MlcEnd} { addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(cssPrevState); } \* {} \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSSTokenMaker.java000066400000000000000000001163071257417003700312140ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 8/22/15 12:29 PM */ /* * 09/03/2005 * * CSSTokenMaker.java - Token maker for CSS 3 files. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * This class splits up text into tokens representing a CSS 3 file. It's * written with a few extra internal states so that it can easily be copy * and pasted into HTML, PHP, and JSP TokenMakres when it is updated.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated CSSTokenMaker.java file will contain 2 * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.5 * */ public class CSSTokenMaker extends AbstractJFlexCTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int CSS_C_STYLE_COMMENT = 5; public static final int YYINITIAL = 0; public static final int CSS_STRING = 3; public static final int CSS_VALUE = 2; public static final int CSS_PROPERTY = 1; public static final int CSS_CHAR_LITERAL = 4; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\41\1\62\25\0\1\41\1\63\1\56\1\37\1\53\1\46"+ "\1\50\1\57\1\44\1\64\1\5\1\52\1\55\1\4\1\6\1\42"+ "\12\1\1\7\1\40\1\0\1\52\1\61\1\50\1\35\6\47\24\2"+ "\1\51\1\43\1\51\1\61\1\3\1\0\1\21\1\34\1\15\1\20"+ "\1\26\1\23\1\33\1\14\1\16\1\2\1\30\1\17\1\27\1\13"+ "\1\11\1\25\1\2\1\10\1\22\1\12\1\32\1\31\1\36\1\45"+ "\1\24\1\2\1\54\1\61\1\60\1\52\uff81\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\2\0\1\1\3\0\1\2\1\3\2\4\1\5\2\2"+ "\1\6\1\7\1\2\1\10\1\11\1\1\1\12\1\13"+ "\1\14\1\15\1\16\1\17\1\16\1\20\2\16\1\21"+ "\1\22\1\23\1\24\1\25\2\1\2\24\1\26\1\1"+ "\1\27\1\30\1\24\1\31\1\32\1\33\1\34\1\35"+ "\1\32\1\36\1\37\5\32\1\40\2\0\1\3\3\0"+ "\1\4\15\0\12\41\1\3\1\42\1\3\1\43\1\44"+ "\2\0\1\25\3\0\1\25\1\0\1\33\1\45\27\0"+ "\11\41\12\0\1\17\14\0\11\41\3\0\1\46\14\0"+ "\5\41\1\47\2\41\13\0\6\41\5\0\3\41\4\0"+ "\2\41\3\0\1\41\4\0\1\50"; private static int [] zzUnpackAction() { int [] result = new int[230]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\65\0\152\0\237\0\324\0\u0109\0\u013e\0\u0173"+ "\0\u01a8\0\u01dd\0\u0212\0\u0247\0\u027c\0\u013e\0\u02b1\0\u02e6"+ "\0\u013e\0\u013e\0\u013e\0\u013e\0\u013e\0\u013e\0\u013e\0\u013e"+ "\0\u031b\0\u0350\0\u013e\0\u0385\0\u02e6\0\u013e\0\u013e\0\u013e"+ "\0\u013e\0\u03ba\0\u03ef\0\u0424\0\u0385\0\u0459\0\u013e\0\u048e"+ "\0\u013e\0\u013e\0\u04c3\0\u013e\0\u04f8\0\u052d\0\u013e\0\u013e"+ "\0\u0562\0\u013e\0\u013e\0\u0597\0\u05cc\0\u0601\0\u0636\0\u066b"+ "\0\u013e\0\u06a0\0\u06d5\0\u013e\0\u070a\0\u073f\0\u0774\0\u07a9"+ "\0\u07de\0\u0813\0\u0848\0\u087d\0\u08b2\0\u08e7\0\u091c\0\u0951"+ "\0\u0986\0\u09bb\0\u09f0\0\u0a25\0\u0a5a\0\u0a8f\0\u0ac4\0\u0af9"+ "\0\u0b2e\0\u0b63\0\u0b98\0\u0bcd\0\u0c02\0\u0c37\0\u0c6c\0\u0ca1"+ "\0\u0cd6\0\u0d0b\0\u013e\0\u0d40\0\u0d75\0\u0daa\0\u013e\0\u0ddf"+ "\0\u0e14\0\u0e49\0\u0459\0\u0e7e\0\u013e\0\u013e\0\u0eb3\0\u0ee8"+ "\0\u0f1d\0\u0f52\0\u0f87\0\u0fbc\0\u0ff1\0\u1026\0\u105b\0\u1090"+ "\0\u10c5\0\u10fa\0\u112f\0\u1164\0\u1199\0\u11ce\0\u1203\0\u1238"+ "\0\u126d\0\u12a2\0\u12d7\0\u130c\0\u1341\0\u1376\0\u13ab\0\u13e0"+ "\0\u1415\0\u144a\0\u147f\0\u14b4\0\u14e9\0\u151e\0\u1553\0\u1588"+ "\0\u15bd\0\u15f2\0\u1627\0\u165c\0\u1691\0\u16c6\0\u16fb\0\u1730"+ "\0\u013e\0\u1765\0\u179a\0\u17cf\0\u1804\0\u1839\0\u186e\0\u18a3"+ "\0\u18d8\0\u190d\0\u1942\0\u1977\0\u19ac\0\u19e1\0\u1a16\0\u1a4b"+ "\0\u1a80\0\u1ab5\0\u1aea\0\u1b1f\0\u1b54\0\u1b89\0\u1bbe\0\u1bf3"+ "\0\u1c28\0\u1c5d\0\u1c92\0\u1cc7\0\u1cfc\0\u1d31\0\u1d66\0\u1d9b"+ "\0\u1dd0\0\u1e05\0\u1e3a\0\u1e6f\0\u1ea4\0\u1ed9\0\u1f0e\0\u1f43"+ "\0\u1f78\0\u1fad\0\u1fe2\0\u0a8f\0\u2017\0\u204c\0\u2081\0\u20b6"+ "\0\u1c5d\0\u20eb\0\u2120\0\u2155\0\u218a\0\u21bf\0\u21f4\0\u2229"+ "\0\u225e\0\u2293\0\u22c8\0\u22fd\0\u2332\0\u2367\0\u239c\0\u23d1"+ "\0\u2406\0\u243b\0\u2470\0\u24a5\0\u24da\0\u250f\0\u2544\0\u2579"+ "\0\u25ae\0\u25e3\0\u2618\0\u264d\0\u2682\0\u26b7\0\u26ec\0\u2721"+ "\0\u2756\0\u278b\0\u27c0\0\u27f5\0\u282a\0\u013e"; private static int [] zzUnpackRowMap() { int [] result = new int[230]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\7\1\10\2\11\1\12\2\11\1\13\25\11\1\14"+ "\1\11\1\15\1\16\1\17\1\20\1\7\1\16\1\11"+ "\1\7\1\11\1\7\1\16\2\21\1\22\1\23\1\24"+ "\1\25\1\26\1\21\1\27\1\7\1\16\2\30\3\31"+ "\1\32\1\30\1\33\25\31\1\34\1\31\2\30\1\17"+ "\1\35\2\30\1\31\1\30\1\31\4\30\1\36\3\30"+ "\1\37\1\30\1\40\2\30\1\41\1\42\2\43\1\44"+ "\1\41\1\23\1\41\25\43\1\45\1\43\1\46\1\47"+ "\1\17\1\50\1\43\1\51\1\43\1\41\1\43\5\41"+ "\1\23\1\24\1\25\1\37\1\41\1\52\1\53\1\54"+ "\43\55\1\56\12\55\1\57\3\55\1\60\2\55\43\61"+ "\1\56\13\61\1\62\2\61\1\63\2\61\5\64\1\65"+ "\6\64\1\66\6\64\1\67\12\64\1\70\23\64\1\71"+ "\2\64\66\0\1\10\4\0\1\10\6\0\1\72\1\73"+ "\3\0\1\74\2\0\1\75\1\76\1\77\16\0\1\74"+ "\17\0\4\11\1\0\1\11\1\0\25\11\1\0\1\11"+ "\6\0\1\11\1\0\1\11\16\0\1\100\3\11\1\0"+ "\1\11\1\0\25\11\1\0\1\11\6\0\1\11\1\0"+ "\1\11\24\0\1\101\1\102\1\103\1\104\1\105\1\106"+ "\1\107\1\0\1\110\1\111\1\112\1\0\1\113\2\0"+ "\1\114\2\0\1\115\35\0\3\116\3\0\3\116\1\117"+ "\1\116\1\120\1\121\1\116\1\122\2\116\1\123\1\116"+ "\1\124\1\116\1\125\1\126\1\127\3\116\1\0\1\116"+ "\6\0\1\116\1\0\1\116\16\0\1\130\5\131\1\0"+ "\5\131\1\132\2\131\2\132\1\131\1\132\2\131\1\132"+ "\5\131\1\132\1\0\1\131\6\0\1\131\1\0\1\132"+ "\56\0\1\17\30\0\1\133\60\0\4\31\3\0\25\31"+ "\1\0\1\31\6\0\1\31\1\0\1\31\17\0\3\31"+ "\3\0\25\31\1\0\1\31\6\0\1\31\1\0\1\31"+ "\17\0\3\134\3\0\25\134\1\0\1\134\6\0\1\134"+ "\1\0\1\134\16\0\1\42\4\0\1\42\6\0\1\135"+ "\1\136\3\0\1\137\2\0\1\140\1\141\1\142\16\0"+ "\1\137\20\0\3\43\3\0\25\43\1\0\1\43\3\0"+ "\2\43\1\51\1\43\1\0\1\43\16\0\1\42\3\43"+ "\3\0\25\43\1\0\1\43\3\0\2\43\1\51\1\43"+ "\1\0\1\43\16\0\1\143\13\0\1\143\2\0\2\143"+ "\1\0\1\143\2\0\1\143\5\0\1\143\12\0\1\143"+ "\17\0\3\43\1\133\2\0\25\43\1\0\1\43\3\0"+ "\2\43\1\51\1\43\1\0\1\43\33\0\1\144\46\0"+ "\43\55\1\0\12\55\1\0\3\55\1\0\2\55\62\145"+ "\1\0\2\145\43\61\1\0\13\61\1\0\2\61\1\0"+ "\2\61\5\64\1\0\6\64\1\0\6\64\1\0\12\64"+ "\1\0\23\64\1\0\2\64\42\0\1\146\34\0\1\147"+ "\64\0\1\150\3\0\1\151\104\0\1\152\55\0\1\74"+ "\50\0\1\74\63\0\1\74\2\0\1\74\27\0\1\74"+ "\46\0\1\74\15\0\1\74\41\0\1\74\4\0\1\74"+ "\36\0\1\100\3\11\1\0\1\100\1\0\25\11\1\0"+ "\1\11\6\0\1\11\1\74\1\11\36\0\1\153\1\0"+ "\1\154\10\0\1\155\41\0\1\156\66\0\1\157\72\0"+ "\1\160\54\0\1\161\1\162\63\0\1\163\67\0\1\164"+ "\66\0\1\165\2\0\1\166\61\0\1\167\63\0\1\170"+ "\60\0\1\171\4\0\1\172\61\0\1\173\13\0\1\174"+ "\53\0\1\175\47\0\4\116\1\0\1\116\1\0\25\116"+ "\1\0\1\116\6\0\1\116\1\0\1\116\16\0\4\116"+ "\1\0\1\116\1\0\11\116\1\176\13\116\1\0\1\116"+ "\6\0\1\116\1\0\1\116\16\0\4\116\1\0\1\116"+ "\1\0\4\116\1\177\20\116\1\0\1\116\6\0\1\116"+ "\1\0\1\116\16\0\4\116\1\0\1\116\1\0\17\116"+ "\1\200\5\116\1\0\1\116\6\0\1\116\1\0\1\116"+ "\16\0\4\116\1\0\1\116\1\0\1\116\1\201\23\116"+ "\1\0\1\116\6\0\1\116\1\0\1\116\16\0\4\116"+ "\1\0\1\116\1\0\1\116\1\202\23\116\1\0\1\116"+ "\6\0\1\116\1\0\1\116\16\0\4\116\1\0\1\116"+ "\1\0\11\116\1\203\13\116\1\0\1\116\6\0\1\116"+ "\1\0\1\116\16\0\4\116\1\0\1\116\1\0\16\116"+ "\1\204\6\116\1\0\1\116\6\0\1\116\1\0\1\116"+ "\16\0\4\116\1\0\1\116\1\0\16\116\1\205\6\116"+ "\1\0\1\116\6\0\1\116\1\0\1\116\16\0\4\116"+ "\1\0\1\116\1\0\6\116\1\206\16\116\1\0\1\116"+ "\6\0\1\116\1\0\1\116\16\0\1\130\13\0\1\130"+ "\2\0\2\130\1\0\1\130\2\0\1\130\5\0\1\130"+ "\12\0\1\130\16\0\4\131\1\0\1\131\1\0\25\131"+ "\1\0\1\131\6\0\1\131\1\0\1\131\16\0\1\132"+ "\3\131\1\0\1\131\1\0\5\131\1\132\2\131\2\132"+ "\1\131\1\132\2\131\1\132\5\131\1\132\1\0\1\131"+ "\6\0\1\131\1\0\1\132\16\0\4\134\1\0\1\134"+ "\1\0\25\134\1\0\1\134\6\0\1\134\1\0\1\134"+ "\44\0\1\137\50\0\1\137\63\0\1\137\2\0\1\137"+ "\27\0\1\137\46\0\1\137\15\0\1\137\41\0\1\137"+ "\4\0\1\137\64\0\1\207\47\0\1\210\77\0\1\211"+ "\56\0\1\212\103\0\1\213\51\0\1\214\57\0\1\215"+ "\74\0\1\216\47\0\1\161\72\0\1\217\55\0\1\220"+ "\66\0\1\221\66\0\1\222\101\0\1\223\61\0\1\224"+ "\51\0\1\225\64\0\1\226\6\0\1\227\64\0\1\173"+ "\54\0\1\230\67\0\1\231\57\0\1\232\75\0\1\233"+ "\70\0\1\234\61\0\1\235\43\0\4\116\1\0\1\116"+ "\1\0\17\116\1\236\5\116\1\0\1\116\6\0\1\116"+ "\1\0\1\116\16\0\4\116\1\0\1\116\1\0\11\116"+ "\1\237\13\116\1\0\1\116\6\0\1\116\1\0\1\116"+ "\16\0\4\116\1\0\1\116\1\0\15\116\1\240\7\116"+ "\1\0\1\116\6\0\1\116\1\0\1\116\16\0\4\116"+ "\1\0\1\116\1\0\5\116\1\241\17\116\1\0\1\116"+ "\6\0\1\116\1\0\1\116\16\0\4\116\1\0\1\116"+ "\1\0\3\116\1\242\21\116\1\0\1\116\6\0\1\116"+ "\1\0\1\116\16\0\4\116\1\0\1\116\1\0\23\116"+ "\1\243\1\116\1\0\1\116\6\0\1\116\1\0\1\116"+ "\16\0\4\116\1\0\1\116\1\0\10\116\1\244\14\116"+ "\1\0\1\116\6\0\1\116\1\0\1\116\16\0\4\116"+ "\1\0\1\116\1\0\14\116\1\245\10\116\1\0\1\116"+ "\6\0\1\116\1\0\1\116\16\0\4\116\1\0\1\116"+ "\1\0\16\116\1\246\6\116\1\0\1\116\6\0\1\116"+ "\1\0\1\116\42\0\1\247\64\0\1\250\46\0\1\251"+ "\103\0\1\211\44\0\1\252\70\0\1\223\62\0\1\253"+ "\77\0\1\254\65\0\1\255\73\0\1\256\35\0\1\257"+ "\106\0\1\260\53\0\1\261\77\0\1\221\67\0\1\221"+ "\43\0\1\255\70\0\1\262\100\0\1\263\54\0\1\227"+ "\76\0\1\264\42\0\1\265\70\0\1\266\47\0\4\116"+ "\1\0\1\116\1\0\16\116\1\267\6\116\1\0\1\116"+ "\6\0\1\116\1\0\1\116\16\0\4\116\1\0\1\116"+ "\1\0\1\270\24\116\1\0\1\116\6\0\1\116\1\0"+ "\1\116\16\0\4\116\1\0\1\116\1\0\1\116\1\271"+ "\23\116\1\0\1\116\6\0\1\116\1\0\1\116\16\0"+ "\4\116\1\0\1\116\1\0\22\116\1\272\2\116\1\0"+ "\1\116\6\0\1\116\1\0\1\116\16\0\4\116\1\0"+ "\1\116\1\0\2\116\1\273\22\116\1\0\1\116\6\0"+ "\1\116\1\0\1\116\16\0\4\116\1\0\1\116\1\0"+ "\16\116\1\274\6\116\1\0\1\116\6\0\1\116\1\0"+ "\1\116\16\0\4\116\1\0\1\116\1\0\6\116\1\275"+ "\16\116\1\0\1\116\6\0\1\116\1\0\1\116\16\0"+ "\4\116\1\0\1\116\1\0\13\116\1\276\11\116\1\0"+ "\1\116\6\0\1\116\1\0\1\116\16\0\4\116\1\0"+ "\1\116\1\0\25\116\1\0\1\200\6\0\1\116\1\0"+ "\1\116\26\0\1\277\62\0\1\251\12\0\1\211\104\0"+ "\1\300\23\0\2\252\5\301\25\252\1\301\1\252\2\301"+ "\1\0\1\252\1\0\1\301\1\252\1\301\1\252\3\301"+ "\1\252\1\0\1\301\1\0\1\301\3\0\2\301\22\0"+ "\1\302\53\0\1\303\57\0\1\304\106\0\1\161\47\0"+ "\1\305\3\0\1\306\1\0\1\307\55\0\1\221\104\0"+ "\1\310\65\0\1\311\55\0\1\221\61\0\1\310\71\0"+ "\1\221\52\0\1\310\53\0\4\116\1\0\1\116\1\0"+ "\12\116\1\312\12\116\1\0\1\116\6\0\1\116\1\0"+ "\1\116\16\0\4\116\1\0\1\116\1\0\12\116\1\313"+ "\12\116\1\0\1\116\6\0\1\116\1\0\1\116\16\0"+ "\4\116\1\0\1\116\1\0\1\314\24\116\1\0\1\116"+ "\6\0\1\116\1\0\1\116\16\0\4\116\1\0\1\116"+ "\1\0\17\116\1\315\5\116\1\0\1\116\6\0\1\116"+ "\1\0\1\116\16\0\3\116\1\316\1\0\1\116\1\0"+ "\25\116\1\0\1\116\6\0\1\116\1\0\1\116\16\0"+ "\4\116\1\0\1\116\1\0\11\116\1\274\13\116\1\0"+ "\1\116\6\0\1\116\1\0\1\116\16\0\4\116\1\0"+ "\1\116\1\0\1\317\24\116\1\0\1\116\6\0\1\116"+ "\1\0\1\116\25\0\1\320\116\0\1\252\34\0\1\321"+ "\62\0\1\311\65\0\1\305\3\0\1\306\72\0\1\322"+ "\55\0\1\323\71\0\1\232\71\0\1\324\64\0\1\221"+ "\37\0\4\116\1\0\1\116\1\0\15\116\1\325\7\116"+ "\1\0\1\116\6\0\1\116\1\0\1\116\16\0\4\116"+ "\1\0\1\116\1\0\16\116\1\314\6\116\1\0\1\116"+ "\6\0\1\116\1\0\1\116\16\0\4\116\1\0\1\116"+ "\1\0\2\116\1\274\22\116\1\0\1\116\6\0\1\116"+ "\1\0\1\116\16\0\4\116\1\0\1\116\1\0\16\116"+ "\1\326\6\116\1\0\1\116\6\0\1\116\1\0\1\116"+ "\16\0\4\116\1\0\1\116\1\0\13\116\1\325\11\116"+ "\1\0\1\116\6\0\1\116\1\0\1\116\16\0\4\116"+ "\1\0\1\116\1\0\11\116\1\327\13\116\1\0\1\116"+ "\6\0\1\116\1\0\1\116\27\0\1\330\56\0\1\331"+ "\64\0\1\332\76\0\1\333\66\0\1\221\45\0\4\116"+ "\1\0\1\116\1\0\11\116\1\334\13\116\1\0\1\116"+ "\6\0\1\116\1\0\1\116\16\0\4\116\1\0\1\116"+ "\1\0\3\116\1\314\21\116\1\0\1\116\6\0\1\116"+ "\1\0\1\116\16\0\4\116\1\0\1\116\1\0\17\116"+ "\1\335\5\116\1\0\1\116\6\0\1\116\1\0\1\116"+ "\36\0\1\336\62\0\1\337\57\0\1\340\71\0\1\324"+ "\46\0\4\116\1\0\1\116\1\0\5\116\1\243\17\116"+ "\1\0\1\116\6\0\1\116\1\0\1\116\16\0\4\116"+ "\1\0\1\116\1\0\16\116\1\341\6\116\1\0\1\116"+ "\6\0\1\116\1\0\1\116\30\0\1\342\67\0\1\343"+ "\7\0\1\344\62\0\1\345\41\0\4\116\1\0\1\116"+ "\1\0\12\116\1\274\12\116\1\0\1\116\6\0\1\116"+ "\1\0\1\116\27\0\1\346\65\0\1\311\63\0\1\214"+ "\77\0\1\311\37\0"; private static int [] zzUnpackTrans() { int [] result = new int[10335]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\2\0\1\1\3\0\1\11\6\1\1\11\2\1\10\11"+ "\2\1\1\11\2\1\4\11\5\1\1\11\1\1\2\11"+ "\1\1\1\11\2\1\2\11\1\1\2\11\5\1\1\11"+ "\2\0\1\11\3\0\1\1\15\0\15\1\1\11\1\1"+ "\2\0\1\11\3\0\1\1\1\0\2\11\27\0\11\1"+ "\12\0\1\11\14\0\11\1\3\0\1\1\14\0\10\1"+ "\13\0\6\1\5\0\3\1\4\0\2\1\3\0\1\1"+ "\4\0\1\11"; private static int [] zzUnpackAttribute() { int [] result = new int[230]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Internal type denoting a line ending in a CSS property. */ public static final int INTERNAL_CSS_PROPERTY = -1; /** * Internal type denoting a line ending in a CSS property value. */ public static final int INTERNAL_CSS_VALUE = -2; /** * Internal type denoting line ending in a CSS double-quote string. * The state to return to is embedded in the actual end token type. */ public static final int INTERNAL_CSS_STRING = -(1<<11); /** * Internal type denoting line ending in a CSS single-quote string. * The state to return to is embedded in the actual end token type. */ public static final int INTERNAL_CSS_CHAR = -(2<<11); /** * Internal type denoting line ending in a CSS multi-line comment. * The state to return to is embedded in the actual end token type. */ public static final int INTERNAL_CSS_MLC = -(3<<11); /** * The state previous CSS-related state we were in before going into a CSS * string, multi-line comment, etc. */ private int cssPrevState; /** * Whether we are highlighting less instead of CSS. */ private boolean highlightingLess; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public CSSTokenMaker() { super(); } /** * Adds the token specified to the current linked list of tokens as an * "end token;" that is, at zzMarkedPos. * * @param tokenType The token's type. */ private void addEndToken(int tokenType) { addToken(zzMarkedPos,zzMarkedPos, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * Returns the closest {@link TokenTypes "standard" token type} for a given * "internal" token type (e.g. one whose value is < 0). */ @Override public int getClosestStandardTokenTypeForInternalType(int type) { switch (type) { case INTERNAL_CSS_STRING: case INTERNAL_CSS_CHAR: return TokenTypes.LITERAL_STRING_DOUBLE_QUOTE; case INTERNAL_CSS_MLC: return TokenTypes.COMMENT_MULTILINE; } return type; } /** * Returns true since CSS uses curly braces. * * @return true always. */ public boolean getCurlyBracesDenoteCodeBlocks() { return true; } /** * {@inheritDoc} */ @Override public boolean getMarkOccurrencesOfTokenType(int type) { return type==Token.RESERVED_WORD; // Used for CSS keys } /** * {@inheritDoc} */ @Override public boolean getShouldIndentNextLineAfter(Token t) { if (t!=null && t.length()==1) { char ch = t.charAt(0); return ch=='{' || ch=='('; } return false; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; cssPrevState = YYINITIAL; // Shouldn't be necessary // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.LITERAL_STRING_DOUBLE_QUOTE: state = CSS_STRING; break; case Token.LITERAL_CHAR: state = CSS_CHAR_LITERAL; break; case Token.COMMENT_MULTILINE: state = CSS_C_STYLE_COMMENT; break; case INTERNAL_CSS_PROPERTY: state = CSS_PROPERTY; break; case INTERNAL_CSS_VALUE: state = CSS_VALUE; break; default: if (initialTokenType<-1024) { int main = -(-initialTokenType & 0xffffff00); switch (main) { default: // Should never happen case INTERNAL_CSS_STRING: state = CSS_STRING; break; case INTERNAL_CSS_CHAR: state = CSS_CHAR_LITERAL; break; case INTERNAL_CSS_MLC: state = CSS_C_STYLE_COMMENT; break; } cssPrevState = -initialTokenType&0xff; } else { state = Token.NULL; } } start = text.offset; s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Overridden to accept letters, digits, underscores, and hyphens. */ @Override public boolean isIdentifierChar(int languageIndex, char ch) { return Character.isLetterOrDigit(ch) || ch=='-' || ch=='.' || ch=='_'; } /** * Toggles whether we're highlighting less instead of just CSS. * * @param highlightingLess Whether we're highlighting less. */ public void setHighlightingLess(boolean highlightingLess) { this.highlightingLess = highlightingLess; } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public CSSTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public CSSTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 134) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 1: { addToken(Token.IDENTIFIER); } case 41: break; case 2: { /*System.out.println("yyinitial: " + yytext());*/ addToken(Token.IDENTIFIER); } case 42: break; case 24: { addEndToken(INTERNAL_CSS_VALUE); return firstToken; } case 43: break; case 40: { addToken(Token.PREPROCESSOR); } case 44: break; case 9: { addToken(Token.SEPARATOR); yybegin(CSS_PROPERTY); } case 45: break; case 28: { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(cssPrevState); } case 46: break; case 31: { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; } case 47: break; case 35: { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } case 48: break; case 30: { addToken(start,zzStartRead, Token.LITERAL_CHAR); yybegin(cssPrevState); } case 49: break; case 37: { addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(cssPrevState); } case 50: break; case 12: { addToken(highlightingLess ? Token.SEPARATOR : Token.IDENTIFIER); } case 51: break; case 10: { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } case 52: break; case 16: { addToken(Token.OPERATOR); yybegin(CSS_VALUE); } case 53: break; case 5: { /* Unknown pseudo class */ addToken(Token.DATA_TYPE); } case 54: break; case 22: { addToken(Token.OPERATOR); yybegin(CSS_PROPERTY); } case 55: break; case 27: { /* Skip escaped chars. */ } case 56: break; case 39: { addToken(Token.REGEX); } case 57: break; case 34: { addToken(highlightingLess ? Token.ANNOTATION : Token.VARIABLE); } case 58: break; case 3: { addToken(highlightingLess ? Token.LITERAL_NUMBER_DECIMAL_INT : Token.IDENTIFIER); } case 59: break; case 19: { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; } case 60: break; case 23: { int temp = zzMarkedPos - 2; addToken(zzStartRead, temp, Token.FUNCTION); addToken(zzMarkedPos-1, zzMarkedPos-1, Token.SEPARATOR); zzStartRead = zzCurrentPos = zzMarkedPos; } case 61: break; case 7: { addToken(Token.WHITESPACE); } case 62: break; case 18: { addToken(Token.SEPARATOR); yybegin(YYINITIAL); } case 63: break; case 4: { addToken(Token.DATA_TYPE); } case 64: break; case 33: { addToken(highlightingLess ? Token.VARIABLE : Token.REGEX); } case 65: break; case 17: { addToken(Token.SEPARATOR); /* helps with auto-closing curlies when editing CSS */ } case 66: break; case 21: { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } case 67: break; case 29: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; } case 68: break; case 32: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; } case 69: break; case 25: { /* End of a function */ addToken(Token.SEPARATOR); } case 70: break; case 36: { addToken(highlightingLess ? Token.VARIABLE : Token.IDENTIFIER); } case 71: break; case 14: { /*System.out.println("css_property: " + yytext());*/ addToken(Token.IDENTIFIER); } case 72: break; case 15: { addToken(Token.RESERVED_WORD); } case 73: break; case 38: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } case 74: break; case 11: { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } case 75: break; case 6: { addToken(Token.SEPARATOR); } case 76: break; case 13: { addNullToken(); return firstToken; } case 77: break; case 8: { addToken(Token.OPERATOR); } case 78: break; case 20: { /*System.out.println("css_value: " + yytext());*/ addToken(Token.IDENTIFIER); } case 79: break; case 26: { } case 80: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case CSS_C_STYLE_COMMENT: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; } case 231: break; case YYINITIAL: { addNullToken(); return firstToken; } case 232: break; case CSS_STRING: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; } case 233: break; case CSS_VALUE: { addEndToken(INTERNAL_CSS_VALUE); return firstToken; } case 234: break; case CSS_PROPERTY: { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; } case 235: break; case CSS_CHAR_LITERAL: { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; } case 236: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSharpTokenMaker.flex000066400000000000000000000431161257417003700317560ustar00rootroot00000000000000/* * 11/13/2004 * * CSharpTokenMaker.java - An object that can take a chunk of text and return * a linked list of tokens representing it in the C# programming language. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * A lexer for the C# programming language. * * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated CSharpTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.5 * */ %% %public %class CSharpTokenMaker %extends AbstractJFlexCTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public CSharpTokenMaker() { super(); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.LITERAL_STRING_DOUBLE_QUOTE: state = VERBATIMSTRING; start = text.offset; break; case Token.COMMENT_MULTILINE: state = DELIMITEDCOMMENT; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} /* C1.1 - Line terminators. */ NewlineCharacter = ([\n]) /* C.1.2 - Whitespace. */ Whitespace = ([\t ]+) /* C.1.3 - Comments */ InputCharacter = ([^\n]) InputCharacters = ({InputCharacter}+) DocumentationCommentStart = ("///") SingleLineComment = ("//"([^/]{InputCharacters}?)?) DelimitedCommentStart = ("/*") DelimitedCommentEnd = ("*/") /* C.1.5 - Unicode character escape sequences. */ UnicodeEscape1 = ("\\u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) UnicodeEscape2 = ("\\U"{HexDigit}{HexDigit}{HexDigit}{HexDigit}{HexDigit}{HexDigit}{HexDigit}{HexDigit}) UnicodeEscapeSequence = ({UnicodeEscape1}|{UnicodeEscape2}) /* C1.6 - Identifiers. */ LetterCharacter = ([A-Za-z]) /* Not accurate - many more Unicode letters, Unicode escapes */ /* CombiningCharacter = () */ DecimalDigitCharacter = ([0-9]) ConnectingCharacter = ([_\-]) /* FormattingCharacter = () */ /* IdentifierPartCharacter = ({LetterCharacter}|{DecimalDigitCharacter}|{ConnectingCharacter}|{CombiningCharacter}|{FormattingCharacter}) */ IdentifierPartCharacter = ({LetterCharacter}|{DecimalDigitCharacter}|{ConnectingCharacter}) IdentifierPartCharacters = ({IdentifierPartCharacter}+) IdentifierStartCharacter = ({LetterCharacter}|[_]) IdentifierOrKeyword = ({IdentifierStartCharacter}{IdentifierPartCharacters}?) Identifier = ("@"?{IdentifierOrKeyword}) /* NOTE: The two below aren't from the C# spec, but we add them so we can */ /* highlight errors. */ NonSeparator = (([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\")) ErrorIdentifier = ({NonSeparator}+) /* C1.8 - Literals. */ BooleanLiteral = ("true"|"false") DecimalDigit = ([0-9]) DecimalDigits = ({DecimalDigit}+) IntegerTypeSuffix = (([uU][lL]?)|([lL][uU]?)) DecimalIntegerLiteral = ({DecimalDigits}{IntegerTypeSuffix}?) HexDigit = ([0-9A-Fa-f]) HexDigits = ({HexDigit}+) HexadecimalIntegerLiteral = ("0"[xX]{HexDigits}{IntegerTypeSuffix}?) Sign = ([+\-]) ExponentPart = ([eE]{Sign}?{DecimalDigits}) RealTypeSuffix = ([fFdDmM]) RealHelper1 = ({DecimalDigits}"."{DecimalDigits}{ExponentPart}?{RealTypeSuffix}?) RealHelper2 = ("."{DecimalDigits}{ExponentPart}?{RealTypeSuffix}?) RealHelper3 = ({DecimalDigits}{ExponentPart}{RealTypeSuffix}?) RealHelper4 = ({DecimalDigits}{RealTypeSuffix}) RealLiteral = ({RealHelper1}|{RealHelper2}|{RealHelper3}|{RealHelper4}) ErrorNumberFormat = (({DecimalIntegerLiteral}|{HexadecimalIntegerLiteral}|{RealLiteral}){NonSeparator}+) SingleCharacter = ([^\'\\\n]) SimpleEscapeSequence = ("\\"[\'\"\\0abfnrtv]) HexadecimalEscapeSequence = ("\\x"{HexDigit}{HexDigit}?{HexDigit}?{HexDigit}?) Character = ({SingleCharacter}|{SimpleEscapeSequence}|{HexadecimalEscapeSequence}|{UnicodeEscapeSequence}) UnclosedCharacterLiteral = ("'"{Character}) CharacterLiteral = ({UnclosedCharacterLiteral}"'") ErrorUnclosedCharacterLiteral = ("'"[^\'\n]*) ErrorCharacterLiteral = ("''"|{ErrorUnclosedCharacterLiteral}[\']) QuoteEscapeSequence = ("\"\"") SingleVerbatimStringLiteralCharacter = ([^\"]) VerbatimStringLiteralStart = ("@\"") SingleRegularStringLiteralCharacter = ([^\"\\\n]) RegularStringLiteralCharacter = ({SingleRegularStringLiteralCharacter}|{SimpleEscapeSequence}|{HexadecimalEscapeSequence}|{UnicodeEscapeSequence}) RegularStringLiteralCharacters = ({RegularStringLiteralCharacter}+) RegularStringLiteral = ([\"]{RegularStringLiteralCharacters}?[\"]) UnclosedRegularStringLiteral = ([\"]([\\].|[^\\\"])*[^\"]?) ErrorRegularStringLiteral = ({UnclosedRegularStringLiteral}[\"]) /* C.1.9 - Operators and Punctuators. */ OOPHelper1 = (":") OOPHelper2 = ("+"|"-"|"*"|"/"|"%"|"&"|"|"|"^"|"!"|"~") OOPHelper3 = ("="|"<"|">"|"?"|"++"|"--"|"&&"|"||"|"<<"|">>") OOPHelper4 = ("=="|"!="|"<="|">="|"+="|"-="|"*="|"/="|"%="|"&=") OOPHelper5 = ("|="|"^="|"<<="|">>="|"->") OperatorOrPunctuator = ({OOPHelper1}|{OOPHelper2}|{OOPHelper3}|{OOPHelper4}|{OOPHelper5}) /* NOTE: We distinguish between operators and separators (punctuators), but */ /* the C# spec doesn't, so the stuff below isn't in the spec. */ Separator = ([\{\}\[\]\(\)]) Separator2 = ([,;]) /* C.1.10 - Pre-processing Directives. */ /* NOTE: We don't do ALL of the PP stuff here as it's unnecessary */ /* for us to know the difference between declarations, diagnostics, */ /* regions, etc. */ ConditionalSymbol = ({IdentifierOrKeyword}) /* Not correct - excludes "true" and "false". */ PPNewLine = ({Whitespace}?{SingleLineComment}?{NewlineCharacter}) PPPrimaryExpression = ({IdentifierOrKeyword}|({Whitespace}?{PPExpression}{Whitespace}?)) PPUnaryExpression = ({PPPrimaryExpression}|("!"{Whitespace}?{PPUnaryExpression})) PPEqualityExpression = ({PPUnaryExpression}|({Whitespace}?"=="{Whitespace}?{PPUnaryExpression})|({Whitespace}?"!="{Whitespace}?{PPUnaryExpression})) PPAndExpression = ({PPEqualityExpression}|({Whitespace}?"&&"{Whitespace}?{PPEqualityExpression})) PPOrExpression = ({PPAndExpression}|({Whitespace}?"||"{Whitespace}?{PPAndExpression})) PPExpression = ({Whitespace}?{PPOrExpression}{Whitespace}?) PPWord = ("define"|"undef"|"if"|"elif"|"else"|"endif"|"line"|"error"|"warning"|"region"|"endregion") PPDirective = ({Whitespace}?"#"{Whitespace}?{PPWord}{InputCharacter}*) /* URL matching, for comments (not in C# spec) */ URLGenDelim = ([:\/\?#\[\]@]) URLSubDelim = ([\!\$&'\(\)\*\+,;=]) URLUnreserved = ([A-Za-z_]|{DecimalDigitCharacter}|[\-\.\~]) URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) URLCharacters = ({URLCharacter}*) URLEndCharacter = ([\/\$]|[A-Za-z0-9]) URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) %state DELIMITEDCOMMENT %state DOCUMENTCOMMENT %state VERBATIMSTRING %% { /* Keywords */ "abstract" | "as" | "base" | "break" | "case" | "catch" | "checked" | "class" | "const" | "continue" | "decimal" | "default" | "delegate" | "do" | "else" | "enum" | "event" | "explicit" | "extern" | "finally" | "fixed" | "for" | "foreach" | "goto" | "if" | "implicit" | "in" | "interface" | "internal" | "is" | "lock" | "namespace" | "new" | "null" | "object" | "operator" | "out" | "override" | "params" | "private" | "protected" | "public" | "readonly" | "ref" | "return" | "sealed" | "sizeof" | "stackalloc" | "static" | "string" | "struct" | "switch" | "this" | "throw" | "try" | "typeof" | "unchecked" | "unsafe" | "using" | "virtual" | "void" | "volatile" | "while" { addToken(Token.RESERVED_WORD); } /* Data types. */ "bool" | "byte" | "char" | "double" | "float" | "int" | "long" | "object" | "sbyte" | "short" | "string" | "uint" | "ulong" | "ushort" { addToken(Token.DATA_TYPE); } {NewlineCharacter} { addNullToken(); return firstToken; } {BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } {Identifier} { addToken(Token.IDENTIFIER); } {Whitespace} { addToken(Token.WHITESPACE); } /* String/Character Literals. */ {CharacterLiteral} { addToken(Token.LITERAL_CHAR); } {UnclosedCharacterLiteral} { addToken(Token.ERROR_CHAR); /*addNullToken(); return firstToken;*/ } {ErrorUnclosedCharacterLiteral} { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; } {ErrorCharacterLiteral} { addToken(Token.ERROR_CHAR); } {VerbatimStringLiteralStart} { start = zzMarkedPos-2; yybegin(VERBATIMSTRING); } {RegularStringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } {UnclosedRegularStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } {ErrorRegularStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); } /* Comments. */ {DelimitedCommentStart} { start = zzMarkedPos-2; yybegin(DELIMITEDCOMMENT); } {DocumentationCommentStart} { start = zzMarkedPos-3; yybegin(DOCUMENTCOMMENT); } {SingleLineComment} { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; } /* Separators. */ {Separator} { addToken(Token.SEPARATOR); } {Separator2} { addToken(Token.IDENTIFIER); } /* Operators. */ {OperatorOrPunctuator} { addToken(Token.OPERATOR); } /* Numbers */ {DecimalIntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {HexadecimalIntegerLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } {RealLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } /* Preprocessor directives. */ {PPDirective} { addToken(Token.PREPROCESSOR); } /* Pretty-much anything else. */ {ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } /* Ended with a line not in a string or comment. */ <> { addNullToken(); return firstToken; } /* Catch any other (unhandled) characters and flag them as bad. */ . { addToken(Token.ERROR_IDENTIFIER); } } { [^hwf\n\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } [hwf] {} \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } {DelimitedCommentEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } \* {} <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } } { [^hwf\<\n]* {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; } [hwf] {} \n { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addNullToken(); return firstToken; } "<"[^\>]*">" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.PREPROCESSOR); start = zzMarkedPos; } "<" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzEndRead, Token.PREPROCESSOR); addNullToken(); return firstToken; } <> { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addNullToken(); return firstToken; } } { [^\"\n]* {} {QuoteEscapeSequence} {} \" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSharpTokenMaker.java000066400000000000000000001746331257417003700317520ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 1/21/09 4:27 PM */ /* * 11/13/2004 * * CSharpTokenMaker.java - An object that can take a chunk of text and return * a linked list of tokens representing it in the C# programming language. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * A lexer for the C# programming language. * * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated CSharpTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.5 * */ public class CSharpTokenMaker extends AbstractJFlexCTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int VERBATIMSTRING = 3; public static final int DOCUMENTCOMMENT = 2; public static final int YYINITIAL = 0; public static final int DELIMITEDCOMMENT = 1; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\2\1\1\1\0\2\15\22\0\1\2\1\45\1\41\1\16"+ "\1\66\1\45\1\46\1\37\2\65\1\4\1\32\1\56\1\12\1\36"+ "\1\3\1\30\11\11\1\44\1\56\1\53\1\52\1\54\1\51\1\14"+ "\3\27\1\35\1\33\1\35\5\10\1\26\1\34\7\10\1\7\2\10"+ "\1\31\2\10\1\65\1\5\1\65\1\50\1\13\1\0\1\23\1\42"+ "\1\71\1\57\1\21\1\22\1\64\1\67\1\60\1\75\1\72\1\24"+ "\1\73\1\61\1\62\1\70\1\10\1\20\1\25\1\17\1\6\1\40"+ "\1\63\1\43\1\74\1\76\1\55\1\47\1\55\1\51\uff81\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\2\0\2\1\1\2\1\3\1\4\2\5\2\6\1\7"+ "\1\5\3\2\7\6\1\7\1\5\1\2\1\10\1\6"+ "\1\11\1\6\5\5\1\12\11\6\1\1\1\13\5\1"+ "\1\14\1\1\1\15\3\1\1\16\1\17\1\0\1\20"+ "\1\21\5\6\1\22\1\7\1\22\1\23\1\7\1\0"+ "\1\24\7\2\14\6\1\25\10\6\1\22\1\23\1\26"+ "\1\10\1\27\2\6\2\11\1\30\4\6\2\25\21\6"+ "\1\31\7\0\1\32\2\0\1\1\7\0\1\20\1\33"+ "\5\6\1\7\1\23\1\0\7\2\1\34\1\2\17\6"+ "\1\25\10\6\1\35\1\10\1\36\2\10\1\26\1\10"+ "\3\6\1\11\1\37\3\11\7\6\1\40\20\6\20\0"+ "\1\6\1\40\2\6\6\2\1\41\12\6\2\35\2\10"+ "\1\26\2\6\2\11\16\6\1\0\1\42\2\0\1\43"+ "\7\0\3\2\10\6\1\35\2\10\1\26\1\6\2\11"+ "\10\6\7\0\2\2\3\6\2\10\1\26\1\11\5\6"+ "\2\0\1\2\3\6\1\0\1\6"; private static int [] zzUnpackAction() { int [] result = new int[364]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\77\0\176\0\275\0\374\0\u013b\0\u017a\0\u01b9"+ "\0\u01f8\0\u0237\0\u0276\0\u02b5\0\u02f4\0\u0333\0\u013b\0\u0372"+ "\0\u03b1\0\u03f0\0\u042f\0\u046e\0\u04ad\0\u04ec\0\u052b\0\u056a"+ "\0\u05a9\0\u05e8\0\u0627\0\u0666\0\u06a5\0\u06e4\0\u013b\0\u0723"+ "\0\u0762\0\u07a1\0\u07e0\0\u013b\0\u013b\0\u081f\0\u085e\0\u089d"+ "\0\u08dc\0\u091b\0\u095a\0\u0999\0\u09d8\0\u0a17\0\u013b\0\u0a56"+ "\0\u0a95\0\u0ad4\0\u0b13\0\u0b52\0\u013b\0\u0b91\0\u0bd0\0\u0c0f"+ "\0\u0c4e\0\u0c8d\0\u013b\0\u0ccc\0\u0d0b\0\u0d4a\0\u013b\0\u0d89"+ "\0\u0dc8\0\u0e07\0\u0e46\0\u0e85\0\u0ec4\0\u0f03\0\u0f42\0\u0ec4"+ "\0\u0f81\0\u05e8\0\u013b\0\u0fc0\0\u0fff\0\u103e\0\u107d\0\u10bc"+ "\0\u10fb\0\u113a\0\u1179\0\u11b8\0\u11f7\0\u1236\0\u1275\0\u12b4"+ "\0\u12f3\0\u1332\0\u1371\0\u13b0\0\u13ef\0\u142e\0\u0276\0\u146d"+ "\0\u14ac\0\u14eb\0\u152a\0\u1569\0\u15a8\0\u15e7\0\u1626\0\u1665"+ "\0\u16a4\0\u16e3\0\u1722\0\u013b\0\u1761\0\u17a0\0\u17df\0\u181e"+ "\0\u013b\0\u185d\0\u189c\0\u18db\0\u191a\0\u1959\0\u1998\0\u19d7"+ "\0\u1a16\0\u1a55\0\u1a94\0\u1ad3\0\u1b12\0\u1b51\0\u1b90\0\u1bcf"+ "\0\u1c0e\0\u1c4d\0\u1c8c\0\u1ccb\0\u1d0a\0\u1d49\0\u1d88\0\u1dc7"+ "\0\u013b\0\u1e06\0\u1e45\0\u1e84\0\u1ec3\0\u1f02\0\u1f41\0\u0bd0"+ "\0\u013b\0\u1f80\0\u1fbf\0\u013b\0\u1ffe\0\u203d\0\u207c\0\u20bb"+ "\0\u20fa\0\u2139\0\u2178\0\u21b7\0\u013b\0\u21f6\0\u2235\0\u2274"+ "\0\u22b3\0\u22f2\0\u0ec4\0\u2331\0\u2370\0\u23af\0\u23ee\0\u242d"+ "\0\u246c\0\u24ab\0\u24ea\0\u2529\0\u2568\0\u25a7\0\u25e6\0\u2625"+ "\0\u2664\0\u26a3\0\u26e2\0\u2721\0\u2760\0\u279f\0\u27de\0\u281d"+ "\0\u285c\0\u289b\0\u28da\0\u2919\0\u2958\0\u2997\0\u29d6\0\u2a15"+ "\0\u2a54\0\u2a93\0\u2ad2\0\u2b11\0\u2b50\0\u2b8f\0\u2bce\0\u2c0d"+ "\0\u013b\0\u2c4c\0\u2c8b\0\u2cca\0\u2d09\0\u2d48\0\u2d87\0\u2dc6"+ "\0\u2e05\0\u013b\0\u2e44\0\u2e83\0\u2ec2\0\u2f01\0\u2f40\0\u2f7f"+ "\0\u2fbe\0\u2ffd\0\u303c\0\u307b\0\u30ba\0\u30f9\0\u3138\0\u3177"+ "\0\u31b6\0\u31f5\0\u3234\0\u3273\0\u32b2\0\u32f1\0\u3330\0\u336f"+ "\0\u33ae\0\u33ed\0\u342c\0\u346b\0\u34aa\0\u34e9\0\u3528\0\u3567"+ "\0\u35a6\0\u35e5\0\u3624\0\u3663\0\u36a2\0\u36e1\0\u3720\0\u375f"+ "\0\u379e\0\u37dd\0\u381c\0\u385b\0\u389a\0\u38d9\0\u0276\0\u3918"+ "\0\u3957\0\u3996\0\u39d5\0\u3a14\0\u3a53\0\u3a92\0\u3ad1\0\u0276"+ "\0\u3b10\0\u3b4f\0\u3b8e\0\u3bcd\0\u3c0c\0\u3c4b\0\u3c8a\0\u3cc9"+ "\0\u3d08\0\u3d47\0\u3d86\0\u3dc5\0\u3e04\0\u3e43\0\u3e82\0\u3ec1"+ "\0\u3f00\0\u3f3f\0\u3f7e\0\u3fbd\0\u3ffc\0\u403b\0\u407a\0\u40b9"+ "\0\u40f8\0\u4137\0\u4176\0\u41b5\0\u41f4\0\u4233\0\u4272\0\u42b1"+ "\0\u42f0\0\u432f\0\u436e\0\u43ad\0\u43ec\0\u442b\0\u446a\0\u44a9"+ "\0\u44e8\0\u4527\0\u4566\0\u45a5\0\u45e4\0\u4623\0\u4662\0\u46a1"+ "\0\u46e0\0\u471f\0\u475e\0\u479d\0\u47dc\0\u481b\0\u485a\0\u4899"+ "\0\u0ec4\0\u48d8\0\u4917\0\u4956\0\u4995\0\u49d4\0\u4a13\0\u4a52"+ "\0\u4a91\0\u4ad0\0\u4b0f\0\u4b4e\0\u4b8d\0\u4bcc\0\u4c0b\0\u4c4a"+ "\0\u436e\0\u4c89\0\u442b\0\u4cc8\0\u4d07\0\u4d46\0\u4d85\0\u4dc4"+ "\0\u4e03\0\u4e42\0\u4e81\0\u4ec0\0\u4eff\0\u4f3e\0\u4f7d\0\u4fbc"+ "\0\u4ffb\0\u503a\0\u5079\0\u50b8\0\u50f7\0\u5136\0\u5175\0\u51b4"+ "\0\u51f3\0\u5232\0\u5271\0\u52b0"; private static int [] zzUnpackRowMap() { int [] result = new int[364]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\5\1\6\1\7\1\10\1\11\1\5\1\12\2\13"+ "\1\14\1\15\1\13\1\16\1\17\1\20\1\21\1\22"+ "\1\23\1\24\1\25\1\26\1\27\2\13\1\30\1\13"+ "\1\31\3\13\1\32\1\33\1\34\1\35\1\36\1\13"+ "\1\37\1\11\1\40\1\41\1\11\1\37\1\11\1\42"+ "\1\43\1\44\1\45\1\46\1\47\1\50\1\51\1\52"+ "\1\53\1\44\1\5\1\13\1\54\1\55\5\13\1\56"+ "\1\57\2\56\1\60\15\56\1\61\40\56\1\62\3\56"+ "\1\63\7\56\1\64\1\65\20\64\1\66\30\64\1\67"+ "\7\64\1\70\3\64\1\71\7\64\1\72\1\73\37\72"+ "\1\74\35\72\1\5\4\0\5\5\1\0\2\5\1\0"+ "\14\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0"+ "\6\5\1\0\11\5\101\0\1\7\13\0\1\75\63\0"+ "\1\76\1\77\45\0\1\37\76\0\1\37\24\0\1\5"+ "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ "\5\13\1\101\1\102\4\13\1\0\3\13\2\0\1\13"+ "\1\0\2\13\13\0\1\13\1\103\1\104\3\13\1\0"+ "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\105"+ "\4\0\1\105\2\106\1\105\1\14\1\0\2\105\1\0"+ "\3\105\1\107\1\110\1\105\1\111\1\105\1\111\1\105"+ "\1\14\1\105\1\0\1\107\2\110\1\112\1\0\1\105"+ "\1\0\2\105\13\0\1\110\5\105\1\0\5\105\1\110"+ "\3\105\12\0\1\37\37\0\1\37\1\0\1\37\22\0"+ "\1\5\4\0\1\5\3\13\1\5\1\0\1\13\1\5"+ "\1\0\1\5\11\13\1\5\1\13\1\0\3\13\2\0"+ "\1\13\1\113\2\13\13\0\6\13\1\0\1\5\10\13"+ "\1\5\1\0\1\75\2\0\1\5\1\114\3\5\1\0"+ "\2\5\1\0\2\5\1\115\1\116\2\5\1\117\5\5"+ "\1\0\3\5\2\0\1\5\1\0\2\5\13\0\1\120"+ "\1\121\2\5\1\122\1\5\1\0\12\5\4\0\1\5"+ "\4\13\1\100\1\13\1\5\1\0\1\5\1\13\1\123"+ "\11\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ "\6\13\1\0\1\5\1\124\4\13\1\125\2\13\1\5"+ "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ "\2\13\1\126\10\13\1\0\3\13\2\0\1\13\1\0"+ "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\5\13"+ "\1\127\5\13\1\0\3\13\2\0\1\130\1\0\1\13"+ "\1\131\13\0\2\13\1\132\3\13\1\0\1\5\10\13"+ "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ "\1\5\4\13\1\133\1\134\5\13\1\0\3\13\2\0"+ "\1\13\1\0\2\13\13\0\1\13\1\135\1\13\1\136"+ "\2\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ "\1\100\1\13\1\5\1\0\1\5\6\13\1\137\4\13"+ "\1\0\3\13\2\0\1\13\1\0\1\140\1\13\13\0"+ "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\3\13\1\141\2\13"+ "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ "\1\13\1\5\1\0\1\5\1\142\1\13\1\143\10\13"+ "\1\0\3\13\2\0\1\13\1\0\1\144\1\13\13\0"+ "\1\13\1\145\2\13\1\146\1\13\1\0\1\5\1\147"+ "\7\13\1\105\4\0\1\105\2\106\1\105\1\14\1\0"+ "\2\105\1\0\3\105\1\107\1\110\1\105\1\111\1\105"+ "\1\111\1\105\1\14\1\150\1\0\1\107\2\110\1\112"+ "\1\0\1\105\1\0\1\105\1\150\13\0\1\110\5\105"+ "\1\0\5\105\1\110\3\105\32\0\1\37\17\0\1\37"+ "\35\0\1\151\16\0\1\151\46\0\1\152\1\0\3\152"+ "\1\153\31\152\1\154\37\152\1\5\4\0\1\5\4\13"+ "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\1\13\1\155\1\13"+ "\1\156\2\13\1\0\1\5\10\13\1\35\1\157\3\35"+ "\1\160\33\35\1\161\35\35\1\5\4\0\1\5\4\13"+ "\1\100\1\13\1\5\1\0\1\5\1\13\1\162\2\13"+ "\1\127\6\13\1\0\3\13\2\0\1\13\1\0\2\13"+ "\13\0\3\13\1\163\2\13\1\0\1\5\5\13\1\164"+ "\2\13\46\0\1\37\3\0\1\37\73\0\1\37\2\0"+ "\1\37\76\0\1\37\1\11\75\0\1\37\1\0\1\11"+ "\22\0\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\2\13\1\165\10\13\1\0\3\13\2\0"+ "\1\13\1\0\2\13\13\0\3\13\1\166\2\13\1\0"+ "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ "\1\5\1\0\1\5\3\13\1\137\2\13\1\137\4\13"+ "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\2\13"+ "\1\167\3\13\1\0\1\5\4\13\1\170\3\13\1\5"+ "\4\0\1\5\1\171\3\13\1\100\1\13\1\5\1\0"+ "\1\5\2\13\1\172\1\13\1\173\6\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\10\13\1\5\4\0\1\5\1\174\3\13\1\100\1\13"+ "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\175"+ "\1\0\1\176\1\13\13\0\6\13\1\0\1\5\1\13"+ "\1\177\6\13\1\5\4\0\1\5\4\13\1\100\1\13"+ "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ "\1\0\2\13\13\0\6\13\1\0\1\5\1\200\7\13"+ "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ "\13\0\3\13\1\201\2\13\1\0\1\5\10\13\1\5"+ "\4\0\1\5\1\202\3\13\1\100\1\13\1\5\1\0"+ "\1\5\1\13\1\203\2\13\1\204\6\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\4\13\1\205\1\206\5\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\3\13\1\207\2\13"+ "\1\0\1\5\1\210\7\13\1\56\1\0\2\56\1\0"+ "\15\56\1\0\40\56\1\0\3\56\1\0\7\56\3\0"+ "\1\211\112\0\1\212\40\0\1\213\101\0\1\214\32\0"+ "\1\215\57\0\1\64\1\0\20\64\1\0\30\64\1\0"+ "\7\64\1\0\3\64\1\0\7\64\17\0\1\216\40\0"+ "\1\217\16\0\54\220\1\221\22\220\63\0\1\222\32\0"+ "\1\223\57\0\1\72\1\0\37\72\1\0\35\72\41\0"+ "\1\224\37\0\1\75\3\0\1\225\11\0\1\226\1\227"+ "\2\0\1\230\32\0\1\231\1\232\2\0\1\233\13\0"+ "\3\234\1\235\73\234\6\0\6\100\3\0\13\100\1\0"+ "\3\100\2\0\1\100\1\0\2\100\13\0\6\100\2\0"+ "\10\100\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ "\2\13\13\0\3\13\1\236\2\13\1\0\1\5\10\13"+ "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ "\13\0\1\13\1\237\4\13\1\0\1\5\1\147\7\13"+ "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ "\13\0\2\13\1\240\3\13\1\0\1\5\10\13\1\5"+ "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ "\6\13\1\241\4\13\1\0\3\13\2\0\1\13\1\0"+ "\2\13\13\0\6\13\1\0\1\5\2\13\1\242\5\13"+ "\1\105\4\0\5\105\1\0\2\105\1\0\14\105\1\0"+ "\3\105\2\0\1\105\1\0\2\105\13\0\6\105\1\0"+ "\12\105\4\0\5\105\1\0\2\105\1\0\6\105\1\243"+ "\1\105\1\243\3\105\1\0\3\105\2\0\1\105\1\0"+ "\2\105\13\0\6\105\1\0\12\105\4\0\4\105\1\244"+ "\1\245\2\105\1\0\12\105\1\244\1\105\1\245\3\105"+ "\2\0\1\105\1\0\2\105\13\0\6\105\1\0\12\105"+ "\4\0\1\105\2\243\2\105\1\0\2\105\1\0\14\105"+ "\1\0\3\105\2\0\1\105\1\0\2\105\13\0\6\105"+ "\1\0\11\105\1\5\4\0\5\5\1\0\2\5\1\0"+ "\14\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0"+ "\2\5\1\246\3\5\1\0\12\5\4\0\5\5\1\0"+ "\2\5\1\0\3\5\1\247\10\5\1\0\3\5\2\0"+ "\1\5\1\0\2\5\13\0\6\5\1\0\12\5\4\0"+ "\5\5\1\0\2\5\1\0\2\5\1\250\3\5\1\251"+ "\5\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0"+ "\2\5\1\252\3\5\1\0\12\5\4\0\5\5\1\0"+ "\2\5\1\0\14\5\1\0\3\5\2\0\1\5\1\0"+ "\2\5\13\0\1\5\1\253\4\5\1\0\12\5\4\0"+ "\5\5\1\0\2\5\1\0\3\5\1\254\10\5\1\0"+ "\3\5\2\0\1\5\1\0\2\5\13\0\6\5\1\0"+ "\12\5\4\0\5\5\1\0\2\5\1\0\4\5\1\255"+ "\7\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0"+ "\6\5\1\0\12\5\4\0\5\5\1\0\2\5\1\0"+ "\5\5\1\256\6\5\1\0\3\5\2\0\1\5\1\0"+ "\2\5\13\0\6\5\1\0\12\5\4\0\1\5\1\257"+ "\3\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ "\1\5\5\13\1\137\2\13\1\5\4\0\1\5\4\13"+ "\1\100\1\13\1\5\1\0\1\5\1\13\1\260\11\13"+ "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\1\13"+ "\1\261\4\13\1\0\1\5\10\13\1\5\4\0\1\5"+ "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ "\1\5\1\13\1\262\6\13\1\5\4\0\1\5\4\13"+ "\1\100\1\13\1\5\1\0\1\5\1\263\2\13\1\137"+ "\1\264\6\13\1\0\3\13\2\0\1\13\1\0\2\13"+ "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ "\4\13\1\100\1\13\1\5\1\0\1\5\6\13\1\265"+ "\4\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ "\1\100\1\13\1\5\1\0\1\5\2\13\1\266\10\13"+ "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ "\1\13\1\5\1\0\1\5\1\267\12\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\1\13\1\270\6\13\1\5\4\0\1\5\1\271\3\13"+ "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\5\13\1\272\5\13\1\0\3\13\2\0"+ "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ "\13\0\3\13\1\273\2\13\1\0\1\5\10\13\1\5"+ "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ "\13\13\1\0\3\13\2\0\1\13\1\0\1\13\1\274"+ "\13\0\2\13\1\275\3\13\1\0\1\5\10\13\1\5"+ "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ "\1\13\1\276\11\13\1\0\3\13\2\0\1\13\1\0"+ "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\6\13"+ "\1\277\4\13\1\0\3\13\2\0\1\13\1\0\2\13"+ "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ "\3\13\2\0\1\13\1\0\2\13\13\0\2\13\1\300"+ "\3\13\1\0\1\5\2\13\1\301\5\13\1\5\4\0"+ "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\1\13"+ "\1\302\2\13\1\303\6\13\1\0\3\13\2\0\1\13"+ "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ "\4\13\1\304\6\13\1\0\3\13\2\0\1\13\1\0"+ "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\13\13"+ "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ "\1\0\1\5\5\13\1\164\2\13\1\5\4\0\1\5"+ "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ "\1\5\7\13\1\262\1\5\4\0\1\5\4\13\1\100"+ "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ "\1\13\1\0\2\13\13\0\1\13\1\305\4\13\1\0"+ "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ "\1\0\2\13\13\0\3\13\1\306\2\13\1\0\1\5"+ "\10\13\1\105\4\0\4\105\1\307\1\0\2\105\1\0"+ "\3\105\3\307\3\105\2\307\1\105\1\0\1\307\1\105"+ "\1\307\2\0\1\105\1\0\1\307\1\105\13\0\1\307"+ "\5\105\1\0\3\105\1\307\6\105\4\0\4\105\1\151"+ "\1\0\2\105\1\0\3\105\1\107\1\110\5\105\1\151"+ "\1\105\1\0\1\107\2\110\2\0\1\105\1\0\2\105"+ "\13\0\1\110\5\105\1\0\5\105\1\110\3\105\1\310"+ "\1\0\35\310\1\311\40\310\1\0\3\310\1\152\1\312"+ "\1\313\7\310\2\152\1\310\2\152\4\310\1\152\6\310"+ "\1\314\3\152\1\315\15\310\1\152\15\310\1\5\4\0"+ "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\1\13"+ "\1\316\11\13\1\0\3\13\2\0\1\13\1\0\2\13"+ "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ "\4\13\1\100\1\13\1\5\1\0\1\5\5\13\1\317"+ "\5\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ "\1\13\1\320\4\13\1\0\1\5\10\13\5\157\1\321"+ "\33\157\1\322\36\157\1\0\3\157\1\35\1\323\1\324"+ "\7\157\2\35\1\157\2\35\4\157\1\35\6\157\4\35"+ "\1\325\15\157\1\35\15\157\1\5\4\0\1\5\4\13"+ "\1\100\1\13\1\5\1\0\1\5\2\13\1\326\10\13"+ "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ "\1\13\1\0\2\13\13\0\3\13\1\327\2\13\1\0"+ "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ "\1\5\1\0\1\5\1\330\12\13\1\0\3\13\2\0"+ "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ "\1\5\3\13\1\331\1\13\1\332\5\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\2\13\1\333\5\13\1\5\4\0\1\5\1\334\3\13"+ "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\1\335\12\13\1\0\3\13\2\0\1\13"+ "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ "\13\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ "\6\13\1\0\1\5\1\13\1\270\6\13\1\5\4\0"+ "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\5\13"+ "\1\336\5\13\1\0\3\13\2\0\1\13\1\0\2\13"+ "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ "\3\13\2\0\1\13\1\0\2\13\13\0\4\13\1\137"+ "\1\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\4\13\1\337\3\13\1\5\4\0\1\5\4\13\1\100"+ "\1\13\1\5\1\0\1\5\1\137\12\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\2\13\1\340\10\13\1\0\3\13\2\0"+ "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ "\13\0\6\13\1\0\1\5\6\13\1\341\1\13\1\5"+ "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ "\2\13\1\342\10\13\1\0\3\13\2\0\1\13\1\0"+ "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\13\13"+ "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\1\13"+ "\1\343\4\13\1\0\1\5\10\13\1\5\4\0\1\5"+ "\4\13\1\100\1\13\1\5\1\0\1\5\1\344\12\13"+ "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ "\1\13\1\0\1\345\1\13\13\0\6\13\1\0\1\5"+ "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ "\2\13\13\0\1\13\1\346\1\13\1\347\2\13\1\0"+ "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ "\1\5\1\0\1\5\1\13\1\350\11\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\1\351\5\13\1\265\4\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\4\13\1\352\6\13\1\0\3\13\2\0"+ "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ "\13\0\2\13\1\353\3\13\1\0\1\5\10\13\1\5"+ "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ "\2\13\1\354\1\13\1\355\6\13\1\0\3\13\2\0"+ "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ "\70\0\1\356\32\0\1\357\135\0\1\360\32\0\1\361"+ "\147\0\1\362\32\0\1\363\135\0\1\364\32\0\1\365"+ "\140\0\1\366\36\0\1\367\75\0\1\370\3\0\1\371"+ "\34\0\1\372\75\0\1\373\37\0\1\374\77\0\1\255"+ "\77\0\1\375\53\0\1\234\1\0\75\234\1\5\4\0"+ "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\13\13"+ "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\2\13"+ "\1\300\3\13\1\0\1\5\10\13\1\5\4\0\1\5"+ "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ "\3\13\2\0\1\13\1\0\2\13\13\0\2\13\1\376"+ "\3\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ "\1\100\1\13\1\5\1\0\1\5\1\377\12\13\1\0"+ "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ "\1\5\1\0\1\5\4\13\1\u0100\6\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ "\2\13\13\0\6\13\1\0\1\5\1\u0101\7\13\1\105"+ "\4\0\4\105\1\244\1\0\2\105\1\0\4\105\1\110"+ "\5\105\1\244\1\105\1\0\1\105\2\110\2\0\1\105"+ "\1\0\2\105\13\0\1\110\5\105\1\0\5\105\1\110"+ "\3\105\11\0\1\244\16\0\1\244\46\0\1\5\4\0"+ "\5\5\1\0\2\5\1\0\14\5\1\0\3\5\2\0"+ "\1\5\1\0\2\5\13\0\1\u0102\5\5\1\0\12\5"+ "\4\0\5\5\1\0\2\5\1\0\14\5\1\0\3\5"+ "\2\0\1\5\1\0\2\5\13\0\5\5\1\u0103\1\0"+ "\12\5\4\0\5\5\1\0\2\5\1\0\2\5\1\u0104"+ "\11\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0"+ "\6\5\1\0\12\5\4\0\5\5\1\0\2\5\1\0"+ "\7\5\1\u0105\4\5\1\0\3\5\2\0\1\5\1\0"+ "\2\5\13\0\1\5\1\121\4\5\1\0\12\5\4\0"+ "\5\5\1\0\2\5\1\0\14\5\1\0\3\5\2\0"+ "\1\5\1\0\2\5\13\0\1\u0106\5\5\1\0\12\5"+ "\4\0\5\5\1\0\2\5\1\0\14\5\1\0\3\5"+ "\2\0\1\5\1\0\2\5\13\0\2\5\1\u0105\3\5"+ "\1\0\12\5\4\0\5\5\1\0\2\5\1\0\4\5"+ "\1\117\7\5\1\0\3\5\2\0\1\5\1\0\2\5"+ "\13\0\6\5\1\0\11\5\1\255\1\0\75\255\1\5"+ "\4\0\5\5\1\0\2\5\1\0\2\5\1\u0107\11\5"+ "\1\0\3\5\2\0\1\5\1\0\2\5\13\0\6\5"+ "\1\0\12\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\2\13\1\u0108\10\13\1\0\3\13\2\0"+ "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ "\13\0\3\13\1\172\2\13\1\0\1\5\10\13\1\5"+ "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ "\6\13\1\137\4\13\1\0\3\13\2\0\1\13\1\0"+ "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\2\13"+ "\1\u0109\10\13\1\0\3\13\2\0\1\13\1\0\2\13"+ "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ "\1\u010a\3\13\1\100\1\13\1\5\1\0\1\5\13\13"+ "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ "\1\13\1\0\2\13\13\0\1\u010b\5\13\1\0\1\5"+ "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\2\13\1\137\10\13\1\0\3\13\2\0"+ "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ "\13\0\2\13\1\174\3\13\1\0\1\5\10\13\1\5"+ "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ "\2\13\1\u010a\10\13\1\0\3\13\2\0\1\13\1\0"+ "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\5\13"+ "\1\u010c\5\13\1\0\3\13\2\0\1\13\1\0\2\13"+ "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ "\1\5\4\13\1\137\3\13\1\5\4\0\1\5\4\13"+ "\1\100\1\13\1\5\1\0\1\5\6\13\1\257\4\13"+ "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ "\1\13\1\5\1\0\1\5\4\13\1\240\6\13\1\0"+ "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ "\1\5\1\0\1\5\2\13\1\320\10\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\4\13\1\u010d\6\13\1\0\3\13\2\0"+ "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ "\1\5\2\13\1\u010e\10\13\1\0\3\13\2\0\1\13"+ "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ "\1\u010f\12\13\1\0\3\13\2\0\1\13\1\0\2\13"+ "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ "\3\13\2\0\1\13\1\0\2\13\13\0\5\13\1\377"+ "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\3\13"+ "\1\137\4\13\1\5\4\0\1\5\1\u0110\3\13\1\100"+ "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ "\1\13\1\0\2\13\13\0\1\13\1\237\4\13\1\0"+ "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ "\1\5\1\0\1\5\1\u0111\12\13\1\0\3\13\2\0"+ "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\2\13"+ "\1\u0112\5\13\1\5\4\0\1\5\4\13\1\100\1\13"+ "\1\5\1\0\1\5\5\13\1\274\5\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\1\351\12\13\1\0\3\13\2\0\1\13"+ "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ "\1\13\1\240\11\13\1\0\3\13\2\0\1\13\1\0"+ "\2\13\13\0\6\13\1\0\1\5\10\13\1\105\4\0"+ "\1\105\2\u0113\1\105\1\307\1\0\2\105\1\0\3\105"+ "\3\307\1\u0114\1\105\1\u0114\2\307\1\105\1\0\1\307"+ "\1\105\1\307\2\0\1\105\1\0\1\307\1\105\13\0"+ "\1\307\5\105\1\0\3\105\1\307\5\105\1\310\1\0"+ "\35\310\1\154\40\310\1\0\7\310\1\u0115\7\310\3\u0115"+ "\3\310\2\u0115\2\310\1\u0115\1\310\1\u0115\1\310\1\154"+ "\2\310\1\u0115\14\310\1\u0115\11\310\1\u0115\6\310\1\0"+ "\7\310\1\u0116\7\310\3\u0116\3\310\2\u0116\2\310\1\u0116"+ "\1\310\1\u0116\1\310\1\154\2\310\1\u0116\14\310\1\u0116"+ "\11\310\1\u0116\5\310\37\0\1\311\37\0\1\310\1\0"+ "\7\310\1\u0117\7\310\3\u0117\3\310\2\u0117\2\310\1\u0117"+ "\1\310\1\u0117\1\310\1\154\2\310\1\u0117\14\310\1\u0117"+ "\11\310\1\u0117\5\310\1\5\4\0\1\5\4\13\1\100"+ "\1\13\1\5\1\0\1\5\1\u0118\12\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\4\13\1\u0119\6\13\1\0\3\13\2\0"+ "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ "\13\0\1\137\5\13\1\0\1\5\10\13\1\157\1\0"+ "\102\157\1\321\3\157\1\u011a\7\157\3\u011a\3\157\2\u011a"+ "\2\157\1\u011a\1\157\1\u011a\3\157\1\322\1\u011a\14\157"+ "\1\u011a\11\157\1\u011a\12\157\1\321\3\157\1\u011b\7\157"+ "\3\u011b\3\157\2\u011b\2\157\1\u011b\1\157\1\u011b\3\157"+ "\1\322\1\u011b\14\157\1\u011b\11\157\1\u011b\12\157\1\321"+ "\3\157\1\35\7\157\3\35\3\157\2\35\2\157\1\35"+ "\1\157\1\35\3\157\1\322\1\35\14\157\1\35\11\157"+ "\1\35\5\157\1\5\4\0\1\5\4\13\1\100\1\13"+ "\1\5\1\0\1\5\4\13\1\301\6\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\5\13\1\377\5\13\1\0\3\13\2\0"+ "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ "\1\5\2\13\1\377\10\13\1\0\3\13\2\0\1\13"+ "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ "\4\13\1\u011c\6\13\1\0\3\13\2\0\1\13\1\0"+ "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\2\13"+ "\1\u011d\10\13\1\0\3\13\2\0\1\13\1\0\2\13"+ "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ "\3\13\2\0\1\13\1\0\2\13\13\0\1\13\1\u011e"+ "\4\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ "\2\0\1\13\1\0\1\u011f\1\13\13\0\6\13\1\0"+ "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ "\1\5\1\0\1\5\2\13\1\u0120\10\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\5\13\1\137\5\13\1\0\3\13\2\0"+ "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ "\1\5\2\13\1\u0121\10\13\1\0\3\13\2\0\1\13"+ "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ "\1\13\1\u0122\11\13\1\0\3\13\2\0\1\13\1\0"+ "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\2\13"+ "\1\u0110\10\13\1\0\3\13\2\0\1\13\1\0\2\13"+ "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ "\4\13\1\100\1\13\1\5\1\0\1\5\1\13\1\u0123"+ "\11\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ "\1\100\1\13\1\5\1\0\1\5\5\13\1\265\5\13"+ "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ "\1\13\1\0\2\13\13\0\3\13\1\137\2\13\1\0"+ "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ "\1\5\1\0\1\5\5\13\1\u0111\5\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\13\13\1\0\3\13\2\0\1\u0124\1\0"+ "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\1\u0125"+ "\12\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ "\1\100\1\13\1\5\1\0\1\5\4\13\1\u0126\6\13"+ "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\2\13"+ "\1\u0127\5\13\1\5\4\0\1\5\4\13\1\100\1\13"+ "\1\5\1\0\1\5\6\13\1\261\4\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\1\u0128\5\13\1\174\4\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ "\2\13\13\0\6\13\1\0\1\5\2\13\1\u0129\5\13"+ "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ "\1\5\1\13\1\377\11\13\1\0\3\13\2\0\1\13"+ "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\44\0"+ "\1\u012a\53\0\1\356\113\0\1\u012b\130\0\1\u012c\52\0"+ "\1\u012d\53\0\1\362\113\0\1\u012e\130\0\1\u012f\65\0"+ "\1\u0130\103\0\1\u0131\32\0\1\u0132\103\0\1\u0133\32\0"+ "\1\232\75\0\1\u0134\100\0\1\u0133\37\0\1\230\74\0"+ "\1\u0135\56\0\1\5\4\0\1\5\4\13\1\100\1\13"+ "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ "\1\0\2\13\13\0\5\13\1\137\1\0\1\5\10\13"+ "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ "\1\5\3\13\1\265\7\13\1\0\3\13\2\0\1\13"+ "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ "\2\13\1\354\10\13\1\0\3\13\2\0\1\13\1\0"+ "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ "\5\5\1\0\2\5\1\0\3\5\1\121\10\5\1\0"+ "\3\5\2\0\1\5\1\0\2\5\13\0\6\5\1\0"+ "\12\5\4\0\5\5\1\0\2\5\1\0\14\5\1\0"+ "\3\5\2\0\1\5\1\0\2\5\13\0\1\5\1\u0136"+ "\4\5\1\0\12\5\4\0\5\5\1\0\2\5\1\0"+ "\14\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0"+ "\3\5\1\u0137\2\5\1\0\12\5\4\0\5\5\1\0"+ "\2\5\1\0\3\5\1\255\10\5\1\0\3\5\2\0"+ "\1\5\1\0\2\5\13\0\6\5\1\0\12\5\4\0"+ "\5\5\1\0\2\5\1\0\2\5\1\115\11\5\1\0"+ "\3\5\2\0\1\5\1\0\2\5\13\0\1\5\1\121"+ "\4\5\1\0\12\5\4\0\5\5\1\0\2\5\1\0"+ "\14\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0"+ "\2\5\1\u0138\3\5\1\0\12\5\4\0\1\5\4\13"+ "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\3\13\1\u0139\2\13"+ "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ "\1\13\1\5\1\0\1\5\1\13\1\u013a\11\13\1\0"+ "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ "\1\0\2\13\13\0\3\13\1\u013b\2\13\1\0\1\5"+ "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ "\2\13\13\0\1\13\1\u013c\4\13\1\0\1\5\10\13"+ "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ "\1\5\5\13\1\u013d\5\13\1\0\3\13\2\0\1\13"+ "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ "\4\13\1\351\6\13\1\0\3\13\2\0\1\13\1\0"+ "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\1\13"+ "\1\u013e\11\13\1\0\3\13\2\0\1\13\1\0\2\13"+ "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ "\1\5\2\13\1\174\5\13\1\5\4\0\1\5\4\13"+ "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\1\13\1\u013f\4\13"+ "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\3\13"+ "\1\u0140\4\13\1\105\4\0\5\105\1\0\2\105\1\0"+ "\6\105\1\u0141\1\105\1\u0141\3\105\1\0\3\105\2\0"+ "\1\105\1\0\2\105\13\0\6\105\1\0\12\105\4\0"+ "\1\105\2\u0141\2\105\1\0\2\105\1\0\14\105\1\0"+ "\3\105\2\0\1\105\1\0\2\105\13\0\6\105\1\0"+ "\11\105\1\310\1\0\7\310\1\u0142\7\310\3\u0142\3\310"+ "\2\u0142\2\310\1\u0142\1\310\1\u0142\1\310\1\154\2\310"+ "\1\u0142\14\310\1\u0142\11\310\1\u0142\6\310\1\0\7\310"+ "\1\u0143\7\310\3\u0143\3\310\2\u0143\2\310\1\u0143\1\310"+ "\1\u0143\1\310\1\154\2\310\1\u0143\14\310\1\u0143\11\310"+ "\1\u0143\6\310\1\0\7\310\1\u0144\7\310\3\u0144\3\310"+ "\2\u0144\2\310\1\u0144\1\310\1\u0144\1\310\1\311\2\310"+ "\1\u0144\14\310\1\u0144\11\310\1\u0144\5\310\1\5\4\0"+ "\1\5\1\u0145\3\13\1\100\1\13\1\5\1\0\1\5"+ "\13\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ "\1\100\1\13\1\5\1\0\1\5\1\200\12\13\1\0"+ "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ "\1\5\10\13\5\157\1\321\3\157\1\u0146\7\157\3\u0146"+ "\3\157\2\u0146\2\157\1\u0146\1\157\1\u0146\3\157\1\322"+ "\1\u0146\14\157\1\u0146\11\157\1\u0146\12\157\1\321\3\157"+ "\1\u0147\7\157\3\u0147\3\157\2\u0147\2\157\1\u0147\1\157"+ "\1\u0147\3\157\1\322\1\u0147\14\157\1\u0147\11\157\1\u0147"+ "\5\157\1\5\4\0\1\5\1\u0148\3\13\1\100\1\13"+ "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ "\13\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ "\5\13\1\u0124\1\0\1\5\10\13\1\5\4\0\1\5"+ "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ "\1\5\4\13\1\u0145\3\13\1\5\4\0\1\5\4\13"+ "\1\100\1\13\1\5\1\0\1\5\5\13\1\330\5\13"+ "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ "\1\13\1\5\1\0\1\5\1\13\1\u0149\11\13\1\0"+ "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ "\1\5\1\0\1\5\6\13\1\u014a\4\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\1\13\1\u014b\11\13\1\0\3\13\2\0"+ "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ "\1\5\4\13\1\u014c\6\13\1\0\3\13\2\0\1\13"+ "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ "\4\13\1\u014d\6\13\1\0\3\13\2\0\1\13\1\0"+ "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\2\13"+ "\1\u014e\10\13\1\0\3\13\2\0\1\13\1\0\2\13"+ "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ "\1\5\4\13\1\261\3\13\1\5\4\0\1\5\4\13"+ "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\1\137\7\13\1\5\4\0\1\5\4\13\1\100\1\13"+ "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ "\1\0\2\13\13\0\1\13\1\u014f\4\13\1\0\1\5"+ "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ "\2\13\13\0\6\13\1\0\1\5\3\13\1\274\4\13"+ "\3\0\1\u0150\76\0\1\u012b\1\u0151\1\0\4\u012b\3\u0151"+ "\1\0\1\u0151\13\u012b\1\u0151\3\u012b\2\u0151\1\u012b\1\0"+ "\2\u012b\3\u0151\2\0\2\u0151\3\0\1\u0151\6\u012b\1\u0151"+ "\11\u012b\25\0\1\356\16\0\1\u012a\35\0\1\u0152\76\0"+ "\1\u012e\1\u0153\1\0\4\u012e\3\u0153\1\0\1\u0153\13\u012e"+ "\1\u0153\3\u012e\2\u0153\1\u012e\1\0\2\u012e\3\u0153\2\0"+ "\2\u0153\3\0\1\u0153\6\u012e\1\u0153\11\u012e\25\0\1\362"+ "\16\0\1\u012d\53\0\1\232\135\0\1\u0154\100\0\1\u0155"+ "\35\0\1\255\75\0\1\226\37\0\1\232\77\0\1\u0156"+ "\15\0\1\5\4\0\5\5\1\0\2\5\1\0\14\5"+ "\1\0\3\5\2\0\1\5\1\0\2\5\13\0\3\5"+ "\1\u0157\2\5\1\0\12\5\4\0\5\5\1\0\2\5"+ "\1\0\2\5\1\255\11\5\1\0\3\5\2\0\1\5"+ "\1\0\2\5\13\0\6\5\1\0\12\5\4\0\5\5"+ "\1\0\2\5\1\0\14\5\1\0\3\5\2\0\1\5"+ "\1\0\2\5\13\0\1\5\1\u0158\4\5\1\0\12\5"+ "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ "\3\13\1\137\7\13\1\0\3\13\2\0\1\13\1\0"+ "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\13\13"+ "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\2\13"+ "\1\137\3\13\1\0\1\5\10\13\1\5\4\0\1\5"+ "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ "\3\13\2\0\1\13\1\0\2\13\13\0\2\13\1\u013d"+ "\3\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\2\13\1\u0159\5\13\1\5\4\0\1\5\4\13\1\100"+ "\1\13\1\5\1\0\1\5\5\13\1\u015a\5\13\1\0"+ "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ "\1\5\1\0\1\5\4\13\1\u0110\6\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ "\2\13\13\0\6\13\1\0\1\5\2\13\1\137\5\13"+ "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ "\1\5\4\13\1\u015b\6\13\1\0\3\13\2\0\1\13"+ "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\310"+ "\1\0\7\310\1\u015c\7\310\3\u015c\3\310\2\u015c\2\310"+ "\1\u015c\1\310\1\u015c\1\310\1\154\2\310\1\u015c\14\310"+ "\1\u015c\11\310\1\u015c\6\310\1\0\7\310\1\u015d\7\310"+ "\3\u015d\3\310\2\u015d\2\310\1\u015d\1\310\1\u015d\1\310"+ "\1\154\2\310\1\u015d\14\310\1\u015d\11\310\1\u015d\6\310"+ "\1\0\7\310\1\u015e\7\310\3\u015e\3\310\2\u015e\2\310"+ "\1\u015e\1\310\1\u015e\1\310\1\311\2\310\1\u015e\14\310"+ "\1\u015e\11\310\1\u015e\5\310\1\5\4\0\1\5\4\13"+ "\1\100\1\13\1\5\1\0\1\5\4\13\1\336\6\13"+ "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ "\1\0\1\5\10\13\5\157\1\321\3\157\1\325\7\157"+ "\3\325\3\157\2\325\2\157\1\325\1\157\1\325\3\157"+ "\1\322\1\325\14\157\1\325\11\157\1\325\12\157\1\321"+ "\3\157\1\u015f\7\157\3\u015f\3\157\2\u015f\2\157\1\u015f"+ "\1\157\1\u015f\3\157\1\322\1\u015f\14\157\1\u015f\11\157"+ "\1\u015f\5\157\1\5\4\0\1\5\4\13\1\100\1\13"+ "\1\5\1\0\1\5\5\13\1\174\5\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\3\13\1\u0160\7\13\1\0\3\13\2\0"+ "\1\13\1\0\2\13\13\0\2\13\1\u0145\3\13\1\0"+ "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ "\1\0\2\13\13\0\6\13\1\0\1\5\1\13\1\u0160"+ "\6\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ "\2\13\13\0\1\13\1\u0161\4\13\1\0\1\5\10\13"+ "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ "\1\5\1\u0162\12\13\1\0\3\13\2\0\1\13\1\0"+ "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\1\265"+ "\12\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\2\13\1\u0163\5\13\1\5\4\0\1\5\4\13\1\100"+ "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ "\1\13\1\0\2\13\13\0\2\13\1\u0164\3\13\1\0"+ "\1\5\10\13\3\0\1\u012b\76\0\1\u012e\155\0\1\u0165"+ "\34\0\1\255\136\0\1\u0166\16\0\1\5\4\0\5\5"+ "\1\0\2\5\1\0\14\5\1\0\3\5\2\0\1\5"+ "\1\0\2\5\13\0\2\5\1\255\3\5\1\0\12\5"+ "\4\0\5\5\1\0\2\5\1\0\14\5\1\0\3\5"+ "\2\0\1\5\1\0\2\5\13\0\2\5\1\u0167\3\5"+ "\1\0\12\5\4\0\1\5\4\13\1\100\1\13\1\5"+ "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ "\2\13\13\0\1\13\1\174\4\13\1\0\1\5\10\13"+ "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ "\13\0\6\13\1\0\1\5\5\13\1\137\2\13\1\5"+ "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ "\5\13\1\u0168\5\13\1\0\3\13\2\0\1\13\1\0"+ "\2\13\13\0\6\13\1\0\1\5\10\13\1\310\1\0"+ "\7\310\1\152\7\310\3\152\3\310\2\152\2\310\1\152"+ "\1\310\1\152\1\310\1\154\2\310\1\152\14\310\1\152"+ "\11\310\1\152\6\310\1\0\7\310\1\312\7\310\3\312"+ "\3\310\2\312\2\310\1\312\1\310\1\312\1\310\1\154"+ "\2\310\1\312\14\310\1\312\11\310\1\312\6\310\1\0"+ "\7\310\1\152\7\310\3\152\3\310\2\152\2\310\1\152"+ "\1\310\1\152\1\310\1\311\2\310\1\152\14\310\1\152"+ "\11\310\1\152\5\310\5\157\1\321\3\157\1\323\7\157"+ "\3\323\3\157\2\323\2\157\1\323\1\157\1\323\3\157"+ "\1\322\1\323\14\157\1\323\11\157\1\323\5\157\1\5"+ "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ "\4\13\1\u0169\6\13\1\0\3\13\2\0\1\13\1\0"+ "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\13\13"+ "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\1\265"+ "\5\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\3\13\1\u016a\2\13"+ "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ "\1\13\1\5\1\0\1\5\1\274\12\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\10\13\1\5\4\0\1\5\1\265\3\13\1\100\1\13"+ "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\61\0"+ "\1\255\76\0\1\u016b\15\0\1\5\4\0\5\5\1\0"+ "\2\5\1\0\14\5\1\0\3\5\2\0\1\5\1\0"+ "\2\5\13\0\5\5\1\255\1\0\12\5\4\0\1\5"+ "\4\13\1\100\1\13\1\5\1\0\1\5\5\13\1\u016c"+ "\5\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ "\2\13\1\265\5\13\1\5\4\0\1\5\4\13\1\100"+ "\1\13\1\5\1\0\1\5\1\13\1\137\11\13\1\0"+ "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ "\1\5\10\13\64\0\1\255\12\0\1\5\4\0\1\5"+ "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ "\3\13\2\0\1\13\1\0\2\13\13\0\3\13\1\u013f"+ "\2\13\1\0\1\5\10\13"; private static int [] zzUnpackTrans() { int [] result = new int[21231]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\2\0\3\1\1\11\10\1\1\11\17\1\1\11\4\1"+ "\2\11\11\1\1\11\5\1\1\11\5\1\1\11\1\1"+ "\1\0\1\1\1\11\12\1\1\0\1\11\40\1\1\11"+ "\4\1\1\11\27\1\1\11\7\0\1\11\2\0\1\11"+ "\7\0\1\1\1\11\7\1\1\0\43\1\1\11\10\1"+ "\1\11\33\1\20\0\54\1\1\0\1\1\2\0\1\1"+ "\7\0\32\1\7\0\16\1\2\0\4\1\1\0\1\1"; private static int [] zzUnpackAttribute() { int [] result = new int[364]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public CSharpTokenMaker() { super(); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.LITERAL_STRING_DOUBLE_QUOTE: state = VERBATIMSTRING; start = text.offset; break; case Token.COMMENT_MULTILINE: state = DELIMITEDCOMMENT; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public CSharpTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public CSharpTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 158) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 35: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; } case 36: break; case 28: { addToken(Token.PREPROCESSOR); } case 37: break; case 3: { addNullToken(); return firstToken; } case 38: break; case 30: { addToken(Token.LITERAL_CHAR); } case 39: break; case 25: { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } case 40: break; case 4: { addToken(Token.WHITESPACE); } case 41: break; case 29: { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } case 42: break; case 22: { addToken(Token.ERROR_CHAR); /*addNullToken(); return firstToken;*/ } case 43: break; case 31: { addToken(Token.ERROR_STRING_DOUBLE); } case 44: break; case 19: { addToken(Token.LITERAL_NUMBER_FLOAT); } case 45: break; case 21: { addToken(Token.RESERVED_WORD); } case 46: break; case 10: { addToken(Token.SEPARATOR); } case 47: break; case 12: { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addNullToken(); return firstToken; } case 48: break; case 6: { addToken(Token.IDENTIFIER); } case 49: break; case 13: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzEndRead, Token.PREPROCESSOR); addNullToken(); return firstToken; } case 50: break; case 8: { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; } case 51: break; case 9: { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } case 52: break; case 32: { addToken(Token.DATA_TYPE); } case 53: break; case 2: { addToken(Token.ERROR_IDENTIFIER); } case 54: break; case 23: { addToken(Token.ERROR_CHAR); } case 55: break; case 33: { addToken(Token.LITERAL_BOOLEAN); } case 56: break; case 20: { start = zzMarkedPos-2; yybegin(VERBATIMSTRING); } case 57: break; case 24: { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } case 58: break; case 14: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } case 59: break; case 34: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } case 60: break; case 16: { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; } case 61: break; case 18: { addToken(Token.ERROR_NUMBER_FORMAT); } case 62: break; case 27: { start = zzMarkedPos-3; yybegin(DOCUMENTCOMMENT); } case 63: break; case 17: { start = zzMarkedPos-2; yybegin(DELIMITEDCOMMENT); } case 64: break; case 7: { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } case 65: break; case 5: { addToken(Token.OPERATOR); } case 66: break; case 26: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.PREPROCESSOR); start = zzMarkedPos; } case 67: break; case 15: { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } case 68: break; case 1: { } case 69: break; case 11: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } case 70: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case VERBATIMSTRING: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } case 365: break; case DOCUMENTCOMMENT: { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addNullToken(); return firstToken; } case 366: break; case YYINITIAL: { addNullToken(); return firstToken; } case 367: break; case DELIMITEDCOMMENT: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } case 368: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CTokenMaker.flex000066400000000000000000000363511257417003700307630ustar00rootroot00000000000000/* * 11/13/2004 * * CTokenMaker.java - An object that can take a chunk of text and * return a linked list of tokens representing it in the C programming * language. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for the C programming language. * * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated CTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.6 * */ %% %public %class CTokenMaker %extends AbstractJFlexCTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public CTokenMaker() { super(); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.COMMENT_MULTILINE: state = MLC; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} Letter = [A-Za-z] LetterOrUnderscore = ({Letter}|[_]) Digit = [0-9] HexDigit = {Digit}|[A-Fa-f] OctalDigit = [0-7] Exponent = [eE][+-]?{Digit}+ PreprocessorWord = define|elif|else|endif|error|if|ifdef|ifndef|include|line|pragma|undef Trigraph = ("??="|"??("|"??)"|"??/"|"??'"|"??<"|"??>"|"??!"|"??-") OctEscape1 = ([\\]{OctalDigit}) OctEscape2 = ([\\]{OctalDigit}{OctalDigit}) OctEscape3 = ([\\][0-3]{OctalDigit}{OctalDigit}) OctEscape = ({OctEscape1}|{OctEscape2}|{OctEscape3}) HexEscape = ([\\][xX]{HexDigit}{HexDigit}) AnyChrChr = ([^\'\n\\]) Escape = ([\\]([abfnrtv\'\"\?\\0e])) UnclosedCharLiteral = ([\']({Escape}|{OctEscape}|{HexEscape}|{Trigraph}|{AnyChrChr})) CharLiteral = ({UnclosedCharLiteral}[\']) ErrorUnclosedCharLiteral = ([\'][^\'\n]*) ErrorCharLiteral = (([\'][\'])|{ErrorUnclosedCharLiteral}[\']) AnyStrChr = ([^\"\n\\]) FalseTrigraph = (("?"(("?")*)[^\=\(\)\/\'\<\>\!\-\\\?\"\n])|("?"[\=\(\)\/\'\<\>\!\-])) StringLiteral = ([\"]((((("?")*)({Escape}|{OctEscape}|{HexEscape}|{Trigraph}))|{FalseTrigraph}|{AnyStrChr})*)(("?")*)[\"]) UnclosedStringLiteral = ([\"]([\\].|[^\\\"])*[^\"]?) ErrorStringLiteral = ({UnclosedStringLiteral}[\"]) LineTerminator = \n WhiteSpace = [ \t\f] MLCBegin = "/*" MLCEnd = "*/" LineCommentBegin = "//" NonFloatSuffix = (([uU][lL]?)|([lL][uU]?)) IntegerLiteral = ({Digit}+{Exponent}?{NonFloatSuffix}?) HexLiteral = ("0"[xX]{HexDigit}+{NonFloatSuffix}?) FloatLiteral = ((({Digit}*[\.]{Digit}+)|({Digit}+[\.]{Digit}*)){Exponent}?[fFlL]?) ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+) NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#") Identifier = ({LetterOrUnderscore}({LetterOrUnderscore}|{Digit}|[$])*) ErrorIdentifier = ({NonSeparator}+) URLGenDelim = ([:\/\?#\[\]@]) URLSubDelim = ([\!\$&'\(\)\*\+,;=]) URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) URLCharacters = ({URLCharacter}*) URLEndCharacter = ([\/\$]|{Letter}|{Digit}) URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) %state MLC %state EOL_COMMENT %% { /* Keywords */ "auto" | "break" | "case" | "const" | "continue" | "default" | "do" | "else" | "enum" | "extern" | "for" | "goto" | "if" | "register" | "sizeof" | "static" | "struct" | "switch" | "typedef" | "union" | "volatile" | "while" { addToken(Token.RESERVED_WORD); } "return" { addToken(Token.RESERVED_WORD_2); } /* Data types. */ "char" | "div_t" | "double" | "float" | "int" | "ldiv_t" | "long" | "short" | "signed" | "size_t" | "unsigned" | "void" | "wchar_t" { addToken(Token.DATA_TYPE); } /* Standard functions */ "abort" | "abs" | "acos" | "asctime" | "asin" | "assert" | "atan2" | "atan" | "atexit" | "atof" | "atoi" | "atol" | "bsearch" | "btowc" | "calloc" | "ceil" | "clearerr" | "clock" | "cosh" | "cos" | "ctime" | "difftime" | "div" | "errno" | "exit" | "exp" | "fabs" | "fclose" | "feof" | "ferror" | "fflush" | "fgetc" | "fgetpos" | "fgetwc" | "fgets" | "fgetws" | "floor" | "fmod" | "fopen" | "fprintf" | "fputc" | "fputs" | "fputwc" | "fputws" | "fread" | "free" | "freopen" | "frexp" | "fscanf" | "fseek" | "fsetpos" | "ftell" | "fwprintf" | "fwrite" | "fwscanf" | "getchar" | "getc" | "getenv" | "gets" | "getwc" | "getwchar" | "gmtime" | "isalnum" | "isalpha" | "iscntrl" | "isdigit" | "isgraph" | "islower" | "isprint" | "ispunct" | "isspace" | "isupper" | "isxdigit" | "labs" | "ldexp" | "ldiv" | "localeconv" | "localtime" | "log10" | "log" | "longjmp" | "malloc" | "mblen" | "mbrlen" | "mbrtowc" | "mbsinit" | "mbsrtowcs" | "mbstowcs" | "mbtowc" | "memchr" | "memcmp" | "memcpy" | "memmove" | "memset" | "mktime" | "modf" | "offsetof" | "perror" | "pow" | "printf" | "putchar" | "putc" | "puts" | "putwc" | "putwchar" | "qsort" | "raise" | "rand" | "realloc" | "remove" | "rename" | "rewind" | "scanf" | "setbuf" | "setjmp" | "setlocale" | "setvbuf" | "setvbuf" | "signal" | "sinh" | "sin" | "sprintf" | "sqrt" | "srand" | "sscanf" | "strcat" | "strchr" | "strcmp" | "strcmp" | "strcoll" | "strcpy" | "strcspn" | "strerror" | "strftime" | "strlen" | "strncat" | "strncmp" | "strncpy" | "strpbrk" | "strrchr" | "strspn" | "strstr" | "strtod" | "strtok" | "strtol" | "strtoul" | "strxfrm" | "swprintf" | "swscanf" | "system" | "tanh" | "tan" | "time" | "tmpfile" | "tmpnam" | "tolower" | "toupper" | "ungetc" | "ungetwc" | "va_arg" | "va_end" | "va_start" | "vfprintf" | "vfwprintf" | "vprintf" | "vsprintf" | "vswprintf" | "vwprintf" | "wcrtomb" | "wcscat" | "wcschr" | "wcscmp" | "wcscoll" | "wcscpy" | "wcscspn" | "wcsftime" | "wcslen" | "wcsncat" | "wcsncmp" | "wcsncpy" | "wcspbrk" | "wcsrchr" | "wcsrtombs" | "wcsspn" | "wcsstr" | "wcstod" | "wcstok" | "wcstol" | "wcstombs" | "wcstoul" | "wcsxfrm" | "wctob" | "wctomb" | "wmemchr" | "wmemcmp" | "wmemcpy" | "wmemmove" | "wmemset" | "wprintf" | "wscanf" { addToken(Token.FUNCTION); } /* Standard-defined macros. */ "__DATE__" | "__TIME__" | "__FILE__" | "__LINE__" | "__STDC__" { addToken(Token.PREPROCESSOR); } {LineTerminator} { addNullToken(); return firstToken; } {Identifier} { addToken(Token.IDENTIFIER); } {WhiteSpace}+ { addToken(Token.WHITESPACE); } /* Preprocessor directives */ "#"{WhiteSpace}*{PreprocessorWord} { addToken(Token.PREPROCESSOR); } /* String/Character Literals. */ {CharLiteral} { addToken(Token.LITERAL_CHAR); } {UnclosedCharLiteral} { addToken(Token.ERROR_CHAR); /*addNullToken(); return firstToken;*/ } {ErrorUnclosedCharLiteral} { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; } {ErrorCharLiteral} { addToken(Token.ERROR_CHAR); } {StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } {UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } {ErrorStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); } /* Comment Literals. */ {MLCBegin} { start = zzMarkedPos-2; yybegin(MLC); } {LineCommentBegin} { start = zzMarkedPos-2; yybegin(EOL_COMMENT); } /* Separators. */ "(" | ")" | "[" | "]" | "{" | "}" { addToken(Token.SEPARATOR); } /* Operators. */ {Trigraph} | "=" | "+" | "-" | "*" | "/" | "%" | "~" | "<" | ">" | "<<" | ">>" | "==" | "+=" | "-=" | "*=" | "/=" | "%=" | "&=" | "|=" | "^=" | ">=" | "<=" | "!=" | ">>=" | "<<=" | "^" | "&" | "&&" | "|" | "||" | "?" | ":" | "," | "!" | "++" | "--" | "." | "," { addToken(Token.OPERATOR); } /* Numbers */ {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } {FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } /* Some lines will end in '\' to wrap an expression. */ "\\" { addToken(Token.IDENTIFIER); } {ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } /* Other punctuation, we'll highlight it as "identifiers." */ ";" { addToken(Token.IDENTIFIER); } /* Ended with a line not in a string or comment. */ <> { addNullToken(); return firstToken; } /* Catch any other (unhandled) characters and flag them as bad. */ . { addToken(Token.ERROR_IDENTIFIER); } } { [^hwf\n\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } [hwf] {} \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } \* {} <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } } { [^hwf\n]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } [hwf] {} \n { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CTokenMaker.java000066400000000000000000002421441257417003700307450ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 3/22/15 4:43 PM */ /* * 11/13/2004 * * CTokenMaker.java - An object that can take a chunk of text and * return a linked list of tokens representing it in the C programming * language. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for the C programming language. * * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated CTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.6 * */ public class CTokenMaker extends AbstractJFlexCTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int EOL_COMMENT = 2; public static final int YYINITIAL = 0; public static final int MLC = 1; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\50\1\43\1\0\1\50\1\56\22\0\1\50\1\36\1\44"+ "\1\57\1\60\1\65\1\113\1\33\1\31\1\31\1\51\1\7\1\64"+ "\1\37\1\54\1\32\1\47\1\77\1\76\1\41\4\5\2\3\1\70"+ "\1\63\1\34\1\30\1\35\1\27\1\61\1\103\1\4\1\111\1\102"+ "\1\6\1\55\2\1\1\105\2\1\1\53\1\106\1\107\4\1\1\110"+ "\1\104\1\52\2\1\1\42\2\1\1\62\1\40\1\62\1\115\1\2"+ "\1\0\1\24\1\46\1\21\1\10\1\11\1\12\1\25\1\66\1\13"+ "\1\100\1\72\1\15\1\26\1\14\1\20\1\23\1\101\1\17\1\16"+ "\1\67\1\22\1\45\1\71\1\73\1\75\1\74\1\112\1\114\1\112"+ "\1\64\uff81\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\3\0\1\1\2\2\1\3\1\4\16\2\2\4\1\5"+ "\1\4\1\6\3\4\1\2\1\7\1\10\2\2\1\3"+ "\1\11\1\4\2\1\1\2\1\4\3\2\2\4\2\12"+ "\1\13\5\12\1\14\2\12\1\2\2\15\2\3\1\16"+ "\2\2\1\17\21\2\1\17\50\2\1\0\1\20\1\21"+ "\2\22\1\23\1\6\2\10\1\24\7\2\1\15\6\1"+ "\1\0\11\2\2\0\1\25\6\0\5\2\1\3\1\0"+ "\1\3\1\15\1\16\2\2\1\26\5\2\1\26\17\2"+ "\1\27\15\2\1\26\1\2\1\26\45\2\1\6\1\30"+ "\1\6\3\22\1\6\2\10\1\31\6\2\1\32\4\1"+ "\1\33\4\1\6\0\10\2\10\0\5\2\1\16\1\0"+ "\27\2\1\27\37\2\1\26\2\2\1\26\6\2\1\6"+ "\1\10\6\2\2\32\7\1\4\0\1\33\4\0\10\2"+ "\2\0\1\34\2\0\1\35\50\2\1\32\1\33\3\1"+ "\7\0\7\2\4\0\5\2\1\36\5\2\2\1\1\33"+ "\3\0\4\2\2\0\1\33"; private static int [] zzUnpackAction() { int [] result = new int[503]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\116\0\234\0\352\0\u0138\0\u0186\0\u01d4\0\u0222"+ "\0\u0270\0\u02be\0\u030c\0\u035a\0\u03a8\0\u03f6\0\u0444\0\u0492"+ "\0\u04e0\0\u052e\0\u057c\0\u05ca\0\u0618\0\u0666\0\u06b4\0\u0702"+ "\0\u0750\0\u079e\0\u07ec\0\u083a\0\u0888\0\u08d6\0\352\0\u0750"+ "\0\u0924\0\u0972\0\u09c0\0\u0a0e\0\u0a5c\0\u0aaa\0\u0750\0\u0af8"+ "\0\u0750\0\u0750\0\u0b46\0\u0b94\0\u0be2\0\u0c30\0\u0c7e\0\u0ccc"+ "\0\u0d1a\0\u0750\0\u0d68\0\u0db6\0\u0e04\0\u0e52\0\u0ea0\0\u0750"+ "\0\u0eee\0\u0f3c\0\u0f8a\0\u0fd8\0\u1026\0\u1074\0\u10c2\0\u1110"+ "\0\u115e\0\u11ac\0\u11fa\0\u1248\0\u1296\0\u12e4\0\u1332\0\u1380"+ "\0\u13ce\0\u141c\0\u146a\0\u14b8\0\u1506\0\u1554\0\u15a2\0\u15f0"+ "\0\u163e\0\u168c\0\u16da\0\u1728\0\u0138\0\u1776\0\u17c4\0\u1812"+ "\0\u1860\0\u18ae\0\u18fc\0\u194a\0\u1998\0\u19e6\0\u1a34\0\u1a82"+ "\0\u1ad0\0\u1b1e\0\u1b6c\0\u1bba\0\u1c08\0\u1c56\0\u1ca4\0\u1cf2"+ "\0\u1d40\0\u1d8e\0\u1ddc\0\u1e2a\0\u1e78\0\u1ec6\0\u1f14\0\u1f62"+ "\0\u1fb0\0\u1ffe\0\u204c\0\u209a\0\u20e8\0\u2136\0\u2184\0\u21d2"+ "\0\u2220\0\u226e\0\u22bc\0\u230a\0\u2358\0\u23a6\0\u0750\0\u0750"+ "\0\u23f4\0\u2442\0\u0750\0\u2490\0\u24de\0\u252c\0\u0750\0\u257a"+ "\0\u25c8\0\u2616\0\u2664\0\u26b2\0\u2700\0\u274e\0\u279c\0\u27ea"+ "\0\u2838\0\u2886\0\u28d4\0\u2922\0\u2970\0\u29be\0\u2a0c\0\u2a5a"+ "\0\u2aa8\0\u2af6\0\u2b44\0\u2b92\0\u2be0\0\u2c2e\0\u2c7c\0\u2cca"+ "\0\u2d18\0\u0750\0\u2d66\0\u2db4\0\u2e02\0\u2e50\0\u2e9e\0\u2eec"+ "\0\u2f3a\0\u2f88\0\u2fd6\0\u3024\0\u3072\0\u30c0\0\u310e\0\u0fd8"+ "\0\u315c\0\u0fd8\0\u31aa\0\u31f8\0\u3246\0\u3294\0\u32e2\0\u3330"+ "\0\u337e\0\u33cc\0\u0138\0\u341a\0\u3468\0\u34b6\0\u3504\0\u3552"+ "\0\u35a0\0\u35ee\0\u363c\0\u368a\0\u36d8\0\u3726\0\u3774\0\u37c2"+ "\0\u3810\0\u385e\0\u0138\0\u38ac\0\u38fa\0\u3948\0\u3996\0\u39e4"+ "\0\u3a32\0\u3a80\0\u3ace\0\u3b1c\0\u3b6a\0\u3bb8\0\u3c06\0\u3c54"+ "\0\u3ca2\0\u3cf0\0\u3d3e\0\u3d8c\0\u3dda\0\u3e28\0\u3e76\0\u3ec4"+ "\0\u3f12\0\u3f60\0\u3fae\0\u3ffc\0\u404a\0\u4098\0\u40e6\0\u4134"+ "\0\u4182\0\u41d0\0\u421e\0\u426c\0\u42ba\0\u4308\0\u4356\0\u43a4"+ "\0\u43f2\0\u4440\0\u448e\0\u44dc\0\u452a\0\u4578\0\u45c6\0\u4614"+ "\0\u4662\0\u46b0\0\u46fe\0\u474c\0\u479a\0\u47e8\0\u4836\0\u4884"+ "\0\u48d2\0\u0750\0\u4920\0\u496e\0\u49bc\0\u4a0a\0\u4a58\0\u4aa6"+ "\0\u4af4\0\u0750\0\u4b42\0\u4b90\0\u4bde\0\u4c2c\0\u4c7a\0\u4cc8"+ "\0\u4d16\0\u4d64\0\u4db2\0\u4e00\0\u4e4e\0\u4e9c\0\u4eea\0\u4f38"+ "\0\u4f86\0\u4fd4\0\u5022\0\u5070\0\u50be\0\u510c\0\u515a\0\u51a8"+ "\0\u51f6\0\u5244\0\u5292\0\u52e0\0\u532e\0\u537c\0\u53ca\0\u5418"+ "\0\u5466\0\u54b4\0\u5502\0\u5550\0\u559e\0\u55ec\0\u563a\0\u5688"+ "\0\u56d6\0\u5724\0\u5772\0\u57c0\0\u580e\0\u585c\0\u58aa\0\u58f8"+ "\0\u5946\0\u5994\0\u59e2\0\u5a30\0\u5a7e\0\u5acc\0\u5b1a\0\u5b68"+ "\0\u5bb6\0\u5c04\0\u5c52\0\u5ca0\0\u5cee\0\u5d3c\0\u5d8a\0\u5dd8"+ "\0\u5e26\0\u5e74\0\u5ec2\0\u5f10\0\u5f5e\0\u5fac\0\u5ffa\0\u6048"+ "\0\u6096\0\u60e4\0\u6132\0\u6180\0\u61ce\0\u621c\0\u626a\0\u62b8"+ "\0\u6306\0\u6354\0\u63a2\0\u63f0\0\u643e\0\u648c\0\u64da\0\u6528"+ "\0\u6576\0\u65c4\0\u6612\0\u6660\0\u66ae\0\u66fc\0\u674a\0\u6798"+ "\0\u67e6\0\u6834\0\u6882\0\u68d0\0\u691e\0\u696c\0\u69ba\0\u6a08"+ "\0\u6a56\0\u6aa4\0\u6af2\0\u6b40\0\u6b8e\0\u6bdc\0\u6c2a\0\u6c78"+ "\0\u6cc6\0\u6d14\0\u6d62\0\u6db0\0\u6dfe\0\u6e4c\0\u6e9a\0\u6ee8"+ "\0\u6f36\0\u6f84\0\u6fd2\0\u7020\0\u706e\0\u70bc\0\u710a\0\u7158"+ "\0\u71a6\0\u71f4\0\u7242\0\u7290\0\u72de\0\u732c\0\u737a\0\u73c8"+ "\0\u7416\0\u7464\0\u74b2\0\u7500\0\u754e\0\u759c\0\u75ea\0\u7638"+ "\0\u7686\0\u76d4\0\u7722\0\u7770\0\u77be\0\u780c\0\u785a\0\u78a8"+ "\0\u78f6\0\u7944\0\u7992\0\u79e0\0\u3d3e\0\u7a2e\0\u7a7c\0\u7aca"+ "\0\u7b18\0\u7b66\0\u7bb4\0\u7c02\0\u7c50\0\u7c9e\0\u7cec\0\u7d3a"+ "\0\u7d88\0\u7dd6\0\u7e24\0\u7e72\0\u7ec0\0\u7f0e\0\u7f5c\0\u7faa"+ "\0\u7ff8\0\u8046\0\u8094\0\u80e2\0\u8130\0\u817e\0\u81cc\0\u821a"+ "\0\u8268\0\u82b6\0\u8304\0\u8352\0\u83a0\0\u83ee\0\u843c\0\u848a"+ "\0\u0fd8\0\352\0\u84d8\0\u8526\0\u8574\0\u85c2\0\u8610\0\u865e"+ "\0\u86ac\0\u86fa\0\u8748\0\u8796\0\u87e4\0\u8832\0\u8880\0\u88ce"+ "\0\u891c\0\u3246\0\u896a\0\u89b8\0\u77be\0\u8a06\0\u78a8\0\u8a54"+ "\0\u8aa2\0\u8af0\0\u8b3e\0\u8b8c\0\u0138\0\u8bda\0\u8c28\0\u8c76"+ "\0\u8cc4\0\u8d12\0\u8d60\0\u8dae\0\u0750\0\u8dfc\0\u8e4a\0\u8e98"+ "\0\u8ee6\0\u8f34\0\u8f82\0\u8fd0\0\u901e\0\u906c\0\u0138"; private static int [] zzUnpackRowMap() { int [] result = new int[503]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\4\1\5\1\6\1\7\1\5\1\7\1\5\1\10"+ "\1\11\1\12\1\13\1\14\1\5\1\15\1\16\1\17"+ "\1\20\1\21\1\22\1\23\1\24\1\25\1\26\1\27"+ "\1\30\1\31\1\32\1\33\1\34\1\35\1\30\1\36"+ "\1\37\1\7\1\5\1\40\1\41\1\42\1\43\1\44"+ "\1\45\1\30\2\5\1\46\1\5\1\47\1\50\2\4"+ "\1\31\1\51\1\52\1\30\1\5\1\53\1\52\1\54"+ "\4\5\2\7\1\5\1\55\10\5\1\31\1\56\1\57"+ "\1\30\12\60\1\61\30\60\1\62\5\60\1\63\14\60"+ "\1\64\2\60\1\65\24\60\12\66\1\67\30\66\1\70"+ "\22\66\1\71\2\66\1\72\24\66\7\4\1\0\17\4"+ "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4"+ "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\1\4"+ "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\1\5\1\73"+ "\4\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\3\74\1\7\1\74"+ "\1\7\1\75\1\0\1\74\1\75\3\74\1\76\4\74"+ "\1\77\4\74\11\0\1\74\1\7\1\74\2\0\2\74"+ "\1\7\2\0\1\77\1\76\1\100\1\74\1\0\3\74"+ "\4\0\2\74\1\0\5\74\2\7\12\74\13\0\1\52"+ "\20\0\1\52\65\0\1\4\6\5\1\0\1\5\1\101"+ "\1\5\1\102\4\5\1\103\6\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\4\5\1\104\1\105\1\5\1\106\7\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\2\5\1\107\16\5\4\0\1\4\6\5\1\0\1\5"+ "\1\110\1\111\2\5\1\112\1\113\1\114\1\115\1\116"+ "\1\5\1\117\1\120\1\121\1\122\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\1\5\1\123\1\0\1\124\20\5"+ "\4\0\1\4\6\5\1\0\2\5\1\125\1\5\1\126"+ "\1\5\1\127\10\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\1\130\7\5\1\131\3\5\1\120\2\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\1\5\1\132\1\5\1\133\2\5"+ "\1\134\1\135\1\5\1\136\1\5\1\137\3\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\1\140\1\141\1\0"+ "\1\142\3\5\1\143\3\5\1\144\10\5\4\0\1\4"+ "\6\5\1\0\1\5\1\145\12\5\1\146\2\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\2\5\1\147\14\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\1\5\1\150\3\5\1\151"+ "\2\5\1\152\3\5\1\153\2\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\1\154\1\155\1\0\21\5\4\0"+ "\1\4\6\5\1\0\4\5\1\156\12\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\1\5\1\157\5\5\1\160\1\161"+ "\1\5\1\162\4\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\6\5\1\163\2\5\1\164\1\165\4\5\11\0\1\4"+ "\2\5\2\0\1\5\1\166\1\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\167"+ "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\170"+ "\6\5\1\165\5\5\1\171\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\1\5\1\172\6\5\1\173\3\5\1\174\2\5"+ "\11\0\1\4\2\5\2\0\1\5\1\175\1\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\1\5\1\171\17\5\33\0\1\176\116\0"+ "\1\52\233\0\1\52\1\0\1\177\16\0\1\200\44\0"+ "\27\201\1\202\3\201\1\203\4\201\1\204\2\201\1\0"+ "\52\201\30\0\1\52\3\0\1\30\111\0\1\52\4\0"+ "\1\30\110\0\1\52\6\0\1\52\56\0\40\41\1\205"+ "\2\41\1\206\1\207\51\41\1\4\6\5\1\0\2\5"+ "\1\210\3\5\1\210\1\5\1\211\2\5\1\137\1\212"+ "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\1\213\20\5\4\0\1\4\6\5\1\0\6\5"+ "\1\214\1\215\7\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\1\5\1\216\1\0\21\5\4\0\3\74\1\7"+ "\1\74\1\7\1\75\1\0\1\74\1\75\3\74\1\76"+ "\4\74\1\77\4\74\11\0\1\74\1\7\1\217\2\0"+ "\2\74\1\7\2\0\1\77\1\76\1\100\1\74\1\0"+ "\3\74\4\0\2\74\1\0\2\74\1\217\2\74\2\7"+ "\12\74\54\0\1\45\50\0\1\100\1\0\1\100\33\0"+ "\1\100\5\0\1\100\26\0\2\100\16\0\7\4\1\0"+ "\1\220\1\221\1\4\1\222\1\4\1\223\4\4\1\224"+ "\1\225\3\4\11\0\3\4\2\0\3\4\1\226\1\0"+ "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ "\21\4\4\0\1\4\6\5\1\0\3\5\1\227\4\5"+ "\1\230\3\5\1\231\1\5\1\232\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\4\5\1\233\14\5"+ "\4\0\1\4\6\5\1\0\6\5\1\134\2\5\1\234"+ "\1\5\1\137\2\5\1\235\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\1\236\1\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\6\5\1\237\10\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\34\0\1\52"+ "\62\0\1\52\32\0\1\52\63\0\1\52\1\0\12\60"+ "\1\0\30\60\1\0\5\60\1\0\14\60\1\0\2\60"+ "\1\0\24\60\13\0\1\240\53\0\1\241\60\0\1\242"+ "\152\0\1\243\117\0\1\244\24\0\12\66\1\0\30\66"+ "\1\0\22\66\1\0\2\66\1\0\24\66\13\0\1\245"+ "\53\0\1\246\115\0\1\247\117\0\1\250\24\0\1\4"+ "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\1\5\1\251\1\0\1\252\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\11\5\1\253\1\5\1\254"+ "\3\5\1\255\1\5\4\0\7\74\1\0\17\74\11\0"+ "\3\74\2\0\3\74\2\0\2\74\1\0\1\74\1\0"+ "\3\74\4\0\2\74\1\0\21\74\4\0\3\74\1\256"+ "\1\74\1\256\1\74\1\257\17\74\10\0\1\257\1\74"+ "\1\256\1\74\2\0\2\74\1\256\2\0\2\74\1\0"+ "\1\74\1\0\3\74\4\0\2\74\1\0\5\74\2\256"+ "\12\74\4\0\7\74\1\0\12\74\1\260\4\74\11\0"+ "\3\74\2\0\3\74\2\0\1\260\1\74\1\0\1\74"+ "\1\0\3\74\4\0\2\74\1\0\21\74\4\0\7\74"+ "\1\0\5\74\1\260\11\74\11\0\3\74\2\0\3\74"+ "\2\0\1\74\1\260\1\0\1\74\1\0\3\74\4\0"+ "\2\74\1\0\21\74\4\0\3\74\1\100\1\74\1\100"+ "\1\261\1\0\1\74\1\261\1\262\2\74\1\262\11\74"+ "\11\0\1\74\1\100\1\74\2\0\2\74\1\100\2\0"+ "\1\74\1\262\1\0\1\262\1\0\3\74\4\0\2\74"+ "\1\0\5\74\2\100\12\74\4\0\1\4\6\5\1\0"+ "\2\5\1\263\14\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\2\5\1\264\14\5\11\0\1\4\2\5\2\0\1\265"+ "\2\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\12\5\1\266\4\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\12\5\1\267\4\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\6\5\1\270\10\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\7\5\1\271\7\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\3\5\1\272\7\5\1\273\3\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\1\5\1\274\1\0\21\5"+ "\4\0\1\4\6\5\1\0\7\5\1\275\1\276\6\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\5\5\1\277\11\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\10\5\1\300\6\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\1\5\1\301\7\5"+ "\1\136\5\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\1\5"+ "\1\302\15\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\7\5"+ "\1\125\3\5\1\303\3\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\5\5\1\304\11\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\7\5\1\160\2\5\1\305\4\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ "\1\5\1\306\1\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\1\5\1\307\15\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\10\5\1\310\6\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\1\5\1\311\15\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\6\5\1\134\1\312\3\5\1\137"+ "\3\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\1\5\1\313\1\0"+ "\21\5\4\0\1\4\6\5\1\0\1\314\4\5\1\315"+ "\1\316\2\5\1\317\1\320\1\321\1\322\1\323\1\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\2\5\1\324\16\5\4\0\1\4\6\5\1\0\1\5"+ "\1\325\1\5\1\326\13\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\4\5\1\327\4\5\1\330\3\5\1\331\1\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\1\5\1\332\1\0\21\5"+ "\4\0\1\4\6\5\1\0\4\5\1\333\10\5\1\334"+ "\1\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\3\5\1\335\15\5\4\0\1\4\6\5\1\0"+ "\11\5\1\136\5\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\14\5\1\336\2\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\14\5\1\337\2\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\7\5\1\160\7\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\10\5\1\340\6\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\7\5\1\341\4\5\1\342\2\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\3\5\1\343\2\5\1\134\4\5\1\137"+ "\3\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\344"+ "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\272"+ "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\345"+ "\7\5\1\174\1\346\1\347\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\1\5\1\350\1\0\1\351\20\5\4\0"+ "\1\4\6\5\1\0\3\5\1\352\1\310\12\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\2\5\1\353\14\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\3\5\1\354\13\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\1\5\1\355\6\5\1\356"+ "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\357"+ "\1\5\1\333\10\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\5\5\1\360\1\270\10\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\14\5\1\361\2\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\3\5\1\227\13\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\3\5\1\362\2\5\1\363\6\5\1\364\1\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\7\5\1\275\7\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\3\5\1\365\13\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\1\273\20\5"+ "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\1\5\1\366\1\0\21\5\4\0"+ "\1\4\6\5\1\0\3\5\1\367\2\5\1\370\2\5"+ "\1\171\5\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5"+ "\1\306\6\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\17\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\371"+ "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\273"+ "\1\5\1\144\6\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\1\5\1\372\6\5\1\373\3\5\1\374\2\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\1\5\1\375\1\0\21\5\4\0"+ "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\1\5\1\155\1\0\21\5\4\0\1\4"+ "\6\5\1\0\16\5\1\376\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\1\276\16\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\5\5\1\360\11\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\5\5\1\303\1\377\1\u0100\7\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\1\5\1\216\1\0\21\5\34\0"+ "\10\52\56\0\33\u0101\1\u0102\7\u0101\1\0\101\u0101\1\u0103"+ "\3\u0101\1\u0102\7\u0101\1\0\57\u0101\1\u0104\3\u0101\2\201"+ "\1\u0101\1\201\2\u0101\1\201\4\u0101\1\201\2\u0101\1\201"+ "\3\u0101\1\u0105\4\u0101\1\201\1\u0106\1\u0107\1\0\3\201"+ "\1\u0106\17\u0101\1\201\3\u0101\1\u0107\2\u0101\2\u0106\16\u0101"+ "\5\206\1\41\3\206\2\41\1\206\1\41\2\206\1\41"+ "\4\206\1\41\2\206\1\41\3\206\1\41\4\206\2\41"+ "\1\u0108\1\0\4\41\17\206\1\41\3\206\1\u0108\2\206"+ "\2\41\56\206\1\u0109\3\206\1\u010a\51\206\1\4\6\5"+ "\1\0\13\5\1\137\3\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\1\213\20\5\4\0\1\4"+ "\6\5\1\0\3\5\1\u010b\1\5\1\u010c\11\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\1\5\1\u010d\4\5\1\0\17\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\13\5\1\137\3\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\1\5\1\u010e\15\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\1\5\1\u010f\15\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\10\5\1\u0110\6\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\3\74\4\u0111\1\0\3\u0111\6\74\1\u0111\2\74"+ "\1\u0111\2\74\11\0\1\74\1\u0111\1\74\2\0\1\74"+ "\2\u0111\2\0\2\74\1\0\1\u0111\1\0\3\74\4\0"+ "\2\74\1\0\5\74\2\u0111\2\74\2\u0111\5\74\1\u0111"+ "\4\0\7\4\1\0\1\4\1\u0112\15\4\11\0\3\4"+ "\2\0\3\4\2\0\2\4\1\0\1\4\1\0\3\4"+ "\4\0\2\4\1\0\21\4\4\0\7\4\1\0\4\4"+ "\1\u0113\1\u0114\1\4\1\u0115\7\4\11\0\3\4\2\0"+ "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ "\2\4\1\0\21\4\4\0\7\4\1\0\2\4\1\u0116"+ "\1\4\1\u0117\12\4\11\0\3\4\2\0\3\4\2\0"+ "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ "\21\4\4\0\7\4\1\0\3\4\1\u0118\13\4\11\0"+ "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0"+ "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0"+ "\4\4\1\u0119\12\4\11\0\3\4\2\0\3\4\2\0"+ "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ "\21\4\4\0\7\4\1\0\7\4\1\u011a\7\4\11\0"+ "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0"+ "\3\4\4\0\2\4\1\0\21\4\14\0\1\u011b\1\u011c"+ "\1\0\1\u011d\1\0\1\u011e\4\0\1\u011f\1\u0120\24\0"+ "\1\226\45\0\1\4\6\5\1\0\16\5\1\u0121\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\5\5\1\315\4\5\1\320"+ "\4\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\333"+ "\12\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\13\5\1\u0122"+ "\3\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\13\5\1\u0123"+ "\3\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u0124"+ "\1\u0125\7\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\1\u0126\1\u0127\1\0\21\5\4\0\1\4\6\5\1\0"+ "\1\5\1\172\15\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\3\5\1\u0128\13\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\10\5\1\144\6\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\21\0\1\u0129\123\0\1\u012a"+ "\161\0\1\u012b\117\0\1\u012c\41\0\1\u012d\123\0\1\u012e"+ "\161\0\1\u012f\117\0\1\u0130\24\0\1\4\6\5\1\0"+ "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\14\5\1\u0131\4\5\4\0\1\4\6\5\1\0"+ "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\14\5\1\u0132\4\5\4\0\1\4\6\5\1\0"+ "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\12\5\1\u0133\6\5\4\0\1\4\6\5\1\0"+ "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\14\5\1\u0134\4\5\4\0\1\4\6\5\1\0"+ "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\13\5\1\u0135\5\5\4\0\3\74\1\256\1\74"+ "\1\256\1\74\1\0\5\74\1\76\4\74\1\77\4\74"+ "\11\0\1\74\1\256\1\74\2\0\2\74\1\256\2\0"+ "\1\77\1\76\1\0\1\74\1\0\3\74\4\0\2\74"+ "\1\0\5\74\2\256\12\74\7\0\1\256\1\0\1\256"+ "\33\0\1\256\5\0\1\256\26\0\2\256\16\0\3\74"+ "\1\u0136\1\74\1\u0136\1\74\1\u0137\17\74\10\0\1\u0137"+ "\1\74\1\u0136\1\74\2\0\2\74\1\u0136\2\0\2\74"+ "\1\0\1\74\1\0\3\74\4\0\2\74\1\0\5\74"+ "\2\u0136\12\74\4\0\1\4\6\5\1\0\14\5\1\u0138"+ "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\2\5\1\171"+ "\14\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\1\5\1\126\4\5\1\0"+ "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ "\1\4\2\5\2\0\1\5\1\u0139\1\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\16\5\1\125"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\1\5\1\125\15\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\4\5\1\u013a\12\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\1\5\1\273\1\0\21\5"+ "\4\0\1\4\6\5\1\0\1\5\1\u013b\15\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\7\5\1\u013c\7\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\2\5\1\273\14\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\12\5\1\u013d\4\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\10\5\1\u013e\3\5\1\126"+ "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u013f"+ "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ "\1\u0140\1\0\21\5\4\0\1\4\6\5\1\0\1\5"+ "\1\273\6\5\1\u0141\3\5\1\310\2\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\2\5\1\u0142"+ "\16\5\4\0\1\4\6\5\1\0\1\5\1\367\15\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\10\5\1\352\6\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\1\5\1\u0143\1\0\21\5"+ "\4\0\1\4\6\5\1\0\6\5\1\273\10\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\1\5\1\u0144\1\0\21\5\4\0"+ "\1\4\6\5\1\0\1\273\16\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\5\5\1\354\11\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\3\5\1\u0145\13\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\3\5\1\u0146\13\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\10\5\1\u0147\6\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\13\5\1\u0148\3\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\4\5\1\u0149\12\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\13\5\1\u014a\3\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\7\5\1\u014b\2\5\1\u014c\4\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\5\5\1\u014d\11\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\7\5\1\u014e\7\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\1\314\16\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\2\5\1\u0142\16\5\4\0"+ "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ "\1\265\2\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\15\5\1\u014f\1\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\14\5\1\u0150\2\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\6\5\1\u0151\12\5\4\0\1\4"+ "\6\5\1\0\5\5\1\u0152\11\5\11\0\1\4\2\5"+ "\2\0\1\u0153\1\u0154\1\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\7\5"+ "\1\u0155\11\5\4\0\1\4\6\5\1\0\17\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\1\273\1\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\4\5\1\u0156\12\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\1\5\1\u0157\15\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\4\5\1\310\12\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\4\5\1\276\12\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\7\5\1\126\7\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\1\5\1\157\1\171"+ "\1\5\1\u0158\1\303\1\u0159\1\u015a\1\5\1\u015b\1\u015c"+ "\1\u015d\3\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\1\5\1\u015e\1\0\2\5\1\u015f\16\5\4\0\1\4"+ "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\1\5\1\u0160\1\0\21\5\4\0\1\4\6\5"+ "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\1\5\1\u0161\1\0\21\5\4\0\1\4\6\5\1\0"+ "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ "\1\u0162\1\0\21\5\4\0\1\4\6\5\1\0\14\5"+ "\1\227\2\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\3\5"+ "\1\u0163\13\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5"+ "\1\u0164\6\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\12\5"+ "\1\u0165\4\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\3\5"+ "\1\336\13\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\6\5"+ "\1\u0121\10\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\6\5"+ "\1\u0166\10\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\5\5"+ "\1\273\11\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\14\5"+ "\1\u0167\2\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\11\5"+ "\1\u013f\5\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\6\5"+ "\1\u0168\10\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\1\5\1\u0169\1\0\21\5\4\0\1\4\6\5\1\0"+ "\5\5\1\u016a\11\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\7\5\1\313\7\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\10\5\1\u016b\6\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\3\5\1\u016c\13\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\1\5\1\u016d\15\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\4\5\1\u016e\12\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\6\5\1\273\2\5\1\u016f\5\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\1\u0170\20\5\4\0"+ "\1\4\6\5\1\0\4\5\1\273\12\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\1\5\1\144\15\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\10\5\1\125\6\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\2\5\1\u0171\16\5\4\0"+ "\1\4\6\5\1\0\2\5\2\273\1\5\1\273\11\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\4\5\1\u0172\12\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\1\5\1\u0173\4\5"+ "\1\273\2\5\1\u016f\5\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\1\u0170\20\5\4\0\1\4"+ "\6\5\1\0\6\5\1\u0174\2\5\1\u0175\4\5\1\347"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\3\5\1\u0176\3\5"+ "\1\u0177\7\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\1\5\1\u0178\1\0\21\5\4\0\1\4\6\5\1\0"+ "\5\5\1\303\11\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\1\5\1\216\1\0\21\5\4\0\33\u0101\1\203"+ "\7\u0101\1\0\102\u0101\3\201\1\u0105\4\201\3\u0101\1\0"+ "\57\u0101\1\201\25\u0101\1\u0102\5\u0101\1\201\1\u0101\1\0"+ "\3\u0101\1\201\26\u0101\2\201\16\u0101\33\0\1\u0102\62\0"+ "\5\u0101\1\u0104\25\u0101\1\u0102\5\u0101\1\u0104\1\u0101\1\0"+ "\3\u0101\1\u0104\26\u0101\2\u0104\21\u0101\4\u0179\1\u0101\3\u0179"+ "\6\u0101\1\u0179\2\u0101\1\u0179\6\u0101\1\203\5\u0101\1\u0179"+ "\1\u0101\1\0\2\u0101\2\u0179\5\u0101\1\u0179\20\u0101\2\u0179"+ "\2\u0101\2\u0179\5\u0101\1\u0179\4\u0101\3\206\4\u017a\1\206"+ "\3\u017a\6\206\1\u017a\2\206\1\u017a\13\206\1\u0109\1\u017a"+ "\2\206\1\u010a\1\206\2\u017a\5\206\1\u017a\20\206\2\u017a"+ "\2\206\2\u017a\5\206\1\u017a\47\206\1\0\52\206\1\4"+ "\6\5\1\0\1\313\16\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\14\5\1\u017b\2\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\1\5\1\336\4\5\1\u017c\5\5\1\u017d\2\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\14\5\1\u017e\2\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\14\5\1\u017f\2\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\1\u0180\20\5"+ "\4\0\3\74\4\u0111\1\0\3\u0111\2\74\1\u0181\3\74"+ "\1\u0111\1\u0182\1\74\1\u0111\2\74\11\0\1\74\1\u0111"+ "\1\74\2\0\1\74\2\u0111\2\0\1\u0182\1\u0181\1\0"+ "\1\u0111\1\0\3\74\4\0\2\74\1\0\5\74\2\u0111"+ "\2\74\2\u0111\5\74\1\u0111\4\0\7\4\1\0\2\4"+ "\1\223\14\4\11\0\3\4\2\0\3\4\2\0\2\4"+ "\1\0\1\4\1\0\3\4\4\0\2\4\1\0\21\4"+ "\4\0\7\4\1\0\1\u0183\16\4\11\0\3\4\2\0"+ "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ "\2\4\1\0\21\4\4\0\7\4\1\0\3\4\1\u0184"+ "\2\4\1\u0185\10\4\11\0\3\4\2\0\3\4\2\0"+ "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ "\21\4\4\0\7\4\1\0\7\4\1\u0186\7\4\11\0"+ "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0"+ "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0"+ "\1\u0187\3\4\1\u0119\12\4\11\0\3\4\2\0\3\4"+ "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4"+ "\1\0\21\4\4\0\7\4\1\0\11\4\1\u0188\5\4"+ "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4"+ "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\7\4"+ "\1\0\4\4\1\u0185\12\4\11\0\3\4\2\0\3\4"+ "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4"+ "\1\0\21\4\4\0\7\4\1\0\1\u0187\16\4\11\0"+ "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0"+ "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0"+ "\14\4\1\u0189\2\4\11\0\3\4\2\0\3\4\2\0"+ "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ "\21\4\15\0\1\u018a\120\0\1\u018b\1\u018c\1\0\1\u018d"+ "\110\0\1\u018e\1\0\1\u018f\114\0\1\u0190\116\0\1\u0191"+ "\120\0\1\u0192\76\0\1\4\6\5\1\0\1\5\1\273"+ "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\2\5\1\u0193"+ "\1\5\1\u0194\12\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\1\5\1\u0195\15\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\2\5\1\171\1\5\1\u0158\1\303\1\u0159\1\u0196\1\5"+ "\1\u015b\1\5\1\u015d\3\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\1\5\1\u0197\1\0\2\5\1\u015f\16\5"+ "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\1\5\1\u0198\1\0\21\5\4\0"+ "\1\4\6\5\1\0\14\5\1\u0199\2\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\10\5\1\u019a\6\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\5\5\1\270\11\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\15\0"+ "\1\u012a\174\0\1\u019b\50\0\1\u019c\146\0\1\u019d\52\0"+ "\1\u012e\174\0\1\u019e\50\0\1\u019f\146\0\1\u01a0\41\0"+ "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\16\5\1\u01a1\2\5\4\0"+ "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\1\5\1\u01a1\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\13\5\1\u01a1\5\5\4\0\1\4"+ "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\15\5\1\u01a1\3\5\4\0\1\4"+ "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\11\5\1\u01a2\7\5\4\0\3\74"+ "\1\u0136\1\74\1\u0136\1\74\1\0\2\74\1\262\2\74"+ "\1\262\11\74\11\0\1\74\1\u0136\1\74\2\0\2\74"+ "\1\u0136\2\0\1\74\1\262\1\0\1\262\1\0\3\74"+ "\4\0\2\74\1\0\5\74\2\u0136\12\74\7\0\1\u0136"+ "\1\0\1\u0136\33\0\1\u0136\5\0\1\u0136\26\0\2\u0136"+ "\16\0\1\4\6\5\1\0\12\5\1\u01a3\4\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\5\5\1\u01a4\11\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\10\5\1\273\6\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\7\5\1\u016b\7\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\10\5\1\u013e\6\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\6\5\1\u01a5\10\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\7\5\1\273\7\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\1\5\1\273\17\5"+ "\4\0\1\4\6\5\1\0\13\5\1\164\3\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\13\5\1\303\3\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\13\5\1\273\3\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\6\5\1\273\2\5\1\273"+ "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\1\u01a6\20\5\4\0\1\4\6\5\1\0\6\5"+ "\1\273\2\5\1\273\1\5\1\164\3\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\1\u01a6\20\5"+ "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\1\5\1\u0121\1\0\21\5\4\0"+ "\1\4\6\5\1\0\15\5\1\u0171\1\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\1\u01a7\20\5\4\0\1\4"+ "\6\5\1\0\14\5\1\u01a8\2\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\1\5\1\u01a9\1\0\21\5\4\0\1\4\6\5"+ "\1\0\13\5\1\u01a7\3\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\3\5\1\u01aa\13\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\4\5\1\u01ab\12\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\4\5\1\u01ac\6\5\1\u01ad\3\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\14\5\1\u01ae\2\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\7\5\1\u0155\11\5\4\0"+ "\1\4\6\5\1\0\5\5\1\u01af\11\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ "\2\5\1\273\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\10\5\1\u01b0\6\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\1\5"+ "\1\u0154\1\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\12\5\1\276\4\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\16\5\1\u0142\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\1\5\1\u010b\12\5\1\354\2\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\1\5\1\126\4\5\1\0\10\5\1\u01b1\6\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\11\5\1\u01b2\5\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\13\5\1\367\3\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\u013e"+ "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\u01b3"+ "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u01b4"+ "\1\5\1\311\2\5\1\u01b5\1\272\1\5\1\u0142\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\1\u013e\1\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\11\5\1\u0168\5\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ "\2\5\2\0\1\5\1\u01b6\1\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\10\5\1\u01b7\6\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\2\5\1\u01b8\14\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\3\5\1\u01b9\13\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\11\5\1\u01ba\5\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\1\5\1\u01bb\15\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\6\5\1\u01bc\10\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ "\2\5\2\0\1\u0121\2\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\7\5\1\u01bd\7\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\1\5\1\u01be\15\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\7\5\1\u01bf\7\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\1\5\1\125\1\0\21\5\4\0"+ "\1\4\6\5\1\0\3\5\1\u01c0\13\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\10\5\1\u0180\6\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\4\5\1\125\12\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\15\5\1\u01c1\1\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\1\5\1\u01c2\1\0\21\5\4\0\1\4"+ "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\1\5\1\276\1\0\21\5\4\0\1\4\6\5"+ "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\1\u01c3\1\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\11\5\1\u016f\5\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\3\5\1\272\13\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\5\5\1\273\13\5\4\0\1\4\6\5\1\0"+ "\4\5\1\u01c4\12\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\1\5\1\272\15\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\13\5\1\u01b5\2\5\1\u0142\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\1\u013e\1\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\4\5\1\u0171\12\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\1\5\1\u0178\1\0\21\5\4\0\1\4\6\5"+ "\1\0\10\5\1\u01c5\6\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\3\u0101\4\201"+ "\1\u0101\3\201\6\u0101\1\201\2\u0101\1\201\6\u0101\1\203"+ "\5\u0101\1\201\1\u0101\1\0\2\u0101\2\201\5\u0101\1\201"+ "\20\u0101\2\201\2\u0101\2\201\5\u0101\1\201\4\u0101\3\206"+ "\4\41\1\206\3\41\6\206\1\41\2\206\1\41\13\206"+ "\1\u0109\1\41\2\206\1\u010a\1\206\2\41\5\206\1\41"+ "\20\206\2\41\2\206\2\41\5\206\1\41\4\206\1\4"+ "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\1\5\1\236\1\0\21\5\4\0\1\4\6\5"+ "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\1\5\1\u01c6\1\0\21\5\4\0\1\4\6\5\1\0"+ "\7\5\1\u01c7\7\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\7\5\1\u01c8\7\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\1\5\1\125\17\5\4\0\1\4\6\5\1\0"+ "\11\5\1\273\5\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\21\5\4\0\7\74\1\0\12\74"+ "\1\u01c9\4\74\11\0\3\74\2\0\3\74\2\0\1\u01c9"+ "\1\74\1\0\1\74\1\0\3\74\4\0\2\74\1\0"+ "\21\74\4\0\7\74\1\0\5\74\1\u01c9\11\74\11\0"+ "\3\74\2\0\3\74\2\0\1\74\1\u01c9\1\0\1\74"+ "\1\0\3\74\4\0\2\74\1\0\21\74\4\0\7\4"+ "\1\0\3\4\1\u0184\13\4\11\0\3\4\2\0\3\4"+ "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4"+ "\1\0\21\4\4\0\7\4\1\0\2\4\1\u01ca\14\4"+ "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4"+ "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\7\4"+ "\1\0\1\4\1\u01ca\15\4\11\0\3\4\2\0\3\4"+ "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4"+ "\1\0\21\4\4\0\7\4\1\0\10\4\1\u01cb\6\4"+ "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4"+ "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\7\4"+ "\1\0\1\4\1\u0184\15\4\11\0\3\4\2\0\3\4"+ "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4"+ "\1\0\21\4\4\0\7\4\1\0\5\4\1\u01cc\11\4"+ "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4"+ "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\7\4"+ "\1\0\15\4\1\u01cd\1\4\11\0\3\4\2\0\3\4"+ "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4"+ "\1\0\21\4\16\0\1\u011e\113\0\1\u01ce\120\0\1\u01cf"+ "\2\0\1\u01d0\116\0\1\u01d1\106\0\1\u01d2\3\0\1\u0191"+ "\122\0\1\u01d3\110\0\1\u01d0\111\0\1\u01d2\131\0\1\u01d4"+ "\71\0\1\4\6\5\1\0\3\5\1\u01d5\13\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\14\5\1\u01bb\2\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\1\u01d6\16\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\11\5\1\u01b3\5\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\1\5\1\u01d7\1\0\21\5"+ "\4\0\1\4\6\5\1\0\10\5\1\u01d8\6\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\10\5\1\u01d9\6\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\7\5\1\u01da\7\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\16\5\1\u01db\11\0\1\4"+ "\2\5\2\0\1\5\1\273\1\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\36\0\1\u01dc\101\0\1\u012a\51\0\1\u019b\26\0"+ "\1\u019d\1\u01dd\4\u019d\1\u01dd\17\u019d\3\u01dd\1\u019d\1\u01dd"+ "\2\0\2\u01dd\1\0\2\u019d\2\0\3\u019d\1\0\1\u01dd"+ "\2\u019d\1\u01dd\1\u019d\1\0\1\u01dd\1\u019d\5\u01dd\2\u019d"+ "\1\u01dd\21\u019d\1\0\1\u01dd\34\0\1\u01de\101\0\1\u012e"+ "\51\0\1\u019e\26\0\1\u01a0\1\u01df\4\u01a0\1\u01df\17\u01a0"+ "\3\u01df\1\u01a0\1\u01df\2\0\2\u01df\1\0\2\u01a0\2\0"+ "\3\u01a0\1\0\1\u01df\2\u01a0\1\u01df\1\u01a0\1\0\1\u01df"+ "\1\u01a0\5\u01df\2\u01a0\1\u01df\21\u01a0\1\0\1\u01df\2\0"+ "\1\4\5\5\1\u01e0\1\0\17\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ "\4\0\2\5\1\0\20\5\1\u01e0\4\0\1\4\6\5"+ "\1\0\5\5\1\u0168\11\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\1\5\1\313\15\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\6\5\1\273\2\5\1\273\5\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\1\5\1\u013e\15\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\11\5\1\u0121\5\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\7\5\1\354\7\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\4\5\1\272\12\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\11\5\1\272\5\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\12\5\1\u01bb\4\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\1\u01e1\1\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\13\5\1\u01a5\3\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\1\5\1\u01e2\15\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\1\5\1\155\1\0\21\5\4\0"+ "\1\4\6\5\1\0\11\5\1\u01e3\5\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\2\5\1\125\14\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ "\1\4\6\5\1\0\13\5\1\u01b5\1\272\1\5\1\u0142"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\1\u013e\1\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\13\5\1\367\3\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\4\5\1\273\14\5"+ "\4\0\1\4\6\5\1\0\7\5\1\u013f\7\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\1\273\4\5\1\273\4\5"+ "\1\354\4\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\1\5\1\273\17\5\4\0\1\4\6\5"+ "\1\0\7\5\1\u01bb\7\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\11\5\1\125\5\5\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\1\125\1\5\1\0\21\5\4\0\1\4\6\5\1\0"+ "\16\5\1\273\11\0\1\4\2\5\2\0\3\5\2\0"+ "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\17\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\u01e4"+ "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\u01e5"+ "\12\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\1\5\1\u01e6\1\0"+ "\21\5\4\0\1\4\6\5\1\0\1\5\1\u01e7\15\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\4\5\1\u01e8\12\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\4\5\1\u01e9\12\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\11\5\1\273\5\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\1\u0180\20\5\4\0\1\4\6\5\1\0\14\5\1\u013e"+ "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ "\1\4\2\5\2\0\1\273\2\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ "\1\4\1\5\1\4\4\0\2\5\1\0\1\u01ea\20\5"+ "\4\0\1\4\6\5\1\0\14\5\1\144\2\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\15\5\1\273\1\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\1\4\6\5\1\0\11\5\1\u01a5\5\5\11\0"+ "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ "\4\0\7\4\1\0\7\4\1\u01ca\7\4\11\0\3\4"+ "\2\0\3\4\2\0\2\4\1\0\1\4\1\0\3\4"+ "\4\0\2\4\1\0\21\4\4\0\7\4\1\0\12\4"+ "\1\u01eb\4\4\11\0\3\4\2\0\3\4\2\0\2\4"+ "\1\0\1\4\1\0\3\4\4\0\2\4\1\0\21\4"+ "\4\0\7\4\1\0\16\4\1\u01ec\11\0\3\4\2\0"+ "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ "\2\4\1\0\21\4\17\0\1\u01cf\114\0\1\u01ed\114\0"+ "\1\u01ed\124\0\1\u01ee\106\0\1\u01cf\121\0\1\u01ef\125\0"+ "\1\u01f0\70\0\1\4\6\5\1\0\5\5\1\u0121\11\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\1\5\1\u01b1\15\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\10\5\1\u01f1\6\5"+ "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ "\21\5\4\0\1\4\6\5\1\0\1\273\4\5\1\273"+ "\4\5\1\354\3\5\1\120\11\0\1\4\2\5\2\0"+ "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ "\1\4\4\0\2\5\1\0\1\5\1\273\17\5\4\0"+ "\1\4\6\5\1\0\16\5\1\u01db\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\1\5"+ "\1\273\1\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\36\0\1\u019d"+ "\115\0\1\u01a0\63\0\1\4\1\5\1\u01f2\4\5\1\0"+ "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\273"+ "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\u01f3"+ "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\u01d5"+ "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u01f4"+ "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\10\5\1\276"+ "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\u013e"+ "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\12\5\1\270"+ "\4\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u010b"+ "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\306"+ "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ "\1\0\21\5\4\0\7\4\1\0\1\u0185\16\4\11\0"+ "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0"+ "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0"+ "\14\4\1\u01ca\2\4\11\0\3\4\2\0\3\4\2\0"+ "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ "\21\4\23\0\1\u01ed\120\0\1\u01f5\121\0\1\u01f6\67\0"+ "\1\4\6\5\1\0\16\5\1\120\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\1\5\1\u01f7\4\5\1\0\17\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\10\5\1\u0173\6\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ "\6\5\1\0\7\5\1\125\7\5\11\0\1\4\2\5"+ "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ "\1\5\1\4\4\0\2\5\1\0\21\5\14\0\1\u01d0"+ "\131\0\1\u01ed\71\0"; private static int [] zzUnpackTrans() { int [] result = new int[37050]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\3\0\25\1\1\11\6\1\1\11\6\1\1\11\1\1"+ "\2\11\7\1\1\11\5\1\1\11\105\1\1\0\2\11"+ "\2\1\1\11\3\1\1\11\16\1\1\0\11\1\2\0"+ "\1\11\6\0\6\1\1\0\122\1\1\11\7\1\1\11"+ "\20\1\6\0\10\1\10\0\6\1\1\0\122\1\4\0"+ "\1\1\4\0\10\1\2\0\1\1\2\0\56\1\7\0"+ "\7\1\4\0\15\1\1\11\3\0\4\1\2\0\1\1"; private static int [] zzUnpackAttribute() { int [] result = new int[503]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public CTokenMaker() { super(); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.COMMENT_MULTILINE: state = MLC; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public CTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public CTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 184) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 27: { addToken(Token.PREPROCESSOR); } case 31: break; case 7: { addNullToken(); return firstToken; } case 32: break; case 24: { addToken(Token.LITERAL_CHAR); } case 33: break; case 21: { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } case 34: break; case 17: { start = zzMarkedPos-2; yybegin(MLC); } case 35: break; case 9: { addToken(Token.WHITESPACE); } case 36: break; case 26: { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } case 37: break; case 18: { addToken(Token.ERROR_CHAR); /*addNullToken(); return firstToken;*/ } case 38: break; case 25: { addToken(Token.ERROR_STRING_DOUBLE); } case 39: break; case 14: { addToken(Token.LITERAL_NUMBER_FLOAT); } case 40: break; case 15: { addToken(Token.RESERVED_WORD); } case 41: break; case 5: { addToken(Token.SEPARATOR); } case 42: break; case 2: { addToken(Token.IDENTIFIER); } case 43: break; case 12: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } case 44: break; case 16: { start = zzMarkedPos-2; yybegin(EOL_COMMENT); } case 45: break; case 22: { addToken(Token.FUNCTION); } case 46: break; case 6: { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; } case 47: break; case 8: { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } case 48: break; case 23: { addToken(Token.DATA_TYPE); } case 49: break; case 1: { addToken(Token.ERROR_IDENTIFIER); } case 50: break; case 19: { addToken(Token.ERROR_CHAR); } case 51: break; case 20: { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } case 52: break; case 29: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } case 53: break; case 28: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } case 54: break; case 30: { addToken(Token.RESERVED_WORD_2); } case 55: break; case 13: { addToken(Token.ERROR_NUMBER_FORMAT); } case 56: break; case 3: { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } case 57: break; case 4: { addToken(Token.OPERATOR); } case 58: break; case 10: { } case 59: break; case 11: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } case 60: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case EOL_COMMENT: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } case 504: break; case YYINITIAL: { addNullToken(); return firstToken; } case 505: break; case MLC: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } case 506: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ClojureTokenMaker.flex000066400000000000000000000341671257417003700322070ustar00rootroot00000000000000/* * 12/23/2010 * * ClojureTokenMaker.java - Scanner for Clojure. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for the Clojure programming language.

* * The original version of this class was graciously donated by the folks at the * Fiji project. * This version has been modified to fix a few issues. * Its original location was * here. *

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated ClojureTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * */ %% %public %class ClojureTokenMaker %extends AbstractJFlexTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public ClojureTokenMaker() { } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addHyperlinkToken(int, int, int) */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, false); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. * @param hyperlink Whether this token is a hyperlink. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset, boolean hyperlink) { super.addToken(array, start,end, tokenType, startOffset, hyperlink); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { ";", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { /*case Token.COMMENT_MULTILINE: state = MLC; start = text.offset; break; case Token.COMMENT_DOCUMENTATION: state = DOCCOMMENT; start = text.offset; break;*/ case Token.LITERAL_STRING_DOUBLE_QUOTE: state = STRING; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} LineCommentBegin = (";") Keyword = ([:][a-zA-Z?!\-+*/][a-zA-Z0-9?!\-+*/]*) NonzeroDigit = [1-9] Digit = ("0"|{NonzeroDigit}) HexDigit = ({Digit}|[A-Fa-f]) OctalDigit = ([0-7]) EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) Escape = ("\\"(([btnfr\"'\\])|([0123]{OctalDigit}?{OctalDigit}?)|({OctalDigit}{OctalDigit}?)|{EscapedSourceCharacter})) AnyCharacterButDoubleQuoteOrBackSlash = ([^\\\"\n]) StringLiteralStart = ([\"]) CharLiteral = ("\\."|"\\space"|"\\tab"|"\\newline") AnyCharacter = ([.]*) Separator = ([\(\)\{\}\[\]]) NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']) BooleanLiteral =("true"|"false") LineTerminator = (\n) WhiteSpace = ([ \t\f]) IntegerHelper1 = (({NonzeroDigit}{Digit}*)|"0") IntegerHelper2 = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) IntegerLiteral = ({IntegerHelper1}[lL]?) HexLiteral = ({IntegerHelper2}[lL]?) FloatHelper1 = ([fFdD]?) FloatHelper2 = ([eE][+-]?{Digit}+{FloatHelper1}) FloatLiteral1 = ({Digit}+"."({FloatHelper1}|{FloatHelper2}|{Digit}+({FloatHelper1}|{FloatHelper2}))) FloatLiteral2 = ("."{Digit}+({FloatHelper1}|{FloatHelper2})) FloatLiteral3 = ({Digit}+{FloatHelper2}) FloatLiteral = ({FloatLiteral1}|{FloatLiteral2}|{FloatLiteral3}|({Digit}+[fFdD])) ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+) Nil = ("nil") Quote = (\('\|`\)) Unquote = (\(\~@\|\~\)) DispatchStart = ("#^"|"#^{") Dispatch = ({DispatchStart}[^\s\t\n;\"}]*([ \t\n;\"]|"}")) VarQuote = ("#'"[.]*[ \t\n;(\"]) DefName = ([a-zA-Z0-9?!\-+*\./<>_]*) NonAssignmentOperator = ("+"|"-"|"<="|"^"|"<"|"*"|">="|"%"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|">>>") AssignmentOperator = ("=") Operator = ({NonAssignmentOperator}|{AssignmentOperator}) Letter = [A-Za-z] LetterOrUnderscore = ({Letter}|[_]) Digit = [0-9] URLGenDelim = ([:\/\?#\[\]@]) URLSubDelim = ([\!\$&'\(\)\*\+,;=]) URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) URLCharacters = ({URLCharacter}*) URLEndCharacter = ([\/\$]|{Letter}|{Digit}) URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) %state STRING %state EOL_COMMENT %% { "case" | "class" | "cond" | "condp" | "def" | "defmacro" | "defn" | "do" | "fn" | "for" | "if" | "if-let" | "if-not" | "instance?" | "let" | "loop" | "monitor-enter" | "monitor-exit" | "new" | "quote" | "recur" | "set!" | "this" | "throw" | "try-finally" | "var" | "when" | "when-first" | "when-let" | "when-not" { addToken(Token.RESERVED_WORD); } "*warn-on-reflection*" | "*1" | "*2" | "*3" | "*agent*" | "*allow-unresolved-args*" | "*assert*" | "*clojure-version*" | "*command-line-args*" | "*compile-files*" | "*compile-path*" | "*e" | "*err*" | "*file*" | "*flush-on-newline*" | "*fn-loader*" | "*in*" | "*math-context*" | "*ns*" | "*out*" | "*print-dup*" | "*print-length*" | "*print-level*" | "*print-meta*" | "*print-readably*" | "*read-eval*" | "*source-path*" | "*unchecked-math*" | "*use-context-classloader*" { addToken(Token.VARIABLE); } "*current-namespace*" | "*in*" | "*out*" | "*print-meta*" "->" | ".." | "agent" | "agent-errors" | "agent-of" | "aget" | "alter" | "and" | "any" | "appl" | "apply" | "array" | "aset" | "aset-boolean" | "aset-byte" | "aset-double" | "aset-float" | "aset-int" | "aset-long" | "aset-short" | "assoc" | "binding" | "boolean" | "byte" | "char" | "clear-agent-errors" | "commute" | "comp" | "complement" | "concat" | "conj" | "cons" | "constantly" | "count" | "cycle" | "dec" | "defmethod" | "defmulti" | "delay" | "deref" | "dissoc" | "doseq" | "dotimes" | "doto" | "double" | "drop" | "drop-while" | "ensure" | "eql-ref?" | "eql?" | "eval" | "every" | "ffirst" | "filter" | "find" | "find-var" | "first" | "float" | "fnseq" | "frest" | "gensym" | "get" | "hash-map" | "identity" | "implement" | "import" | "in-namespace" | "inc" | "int" | "into" | "into-array" | "iterate" | "key" | "keys" | "lazy-cons" | "list" | "list*" | "load-file" | "locking" | "long" | "make-array" | "make-proxy" | "map" | "mapcat" | "max" | "memfn" | "merge" | "meta" | "min" | "name" | "namespace" | "neg?" | "newline" | "nil?" | "not" | "not-any" | "not-every" | "nth" | "or" | "peek" | "pmap" | "pop" | "pos?" | "print" | "prn" | "quot" | "range" | "read" | "reduce" | "ref" | "refer" | "rem" | "remove-method" | "repeat" | "replicate" | "rest" | "reverse" | "rfirst" | "rrest" | "rseq" | "second" | "seq" | "set" | "short" | "sorted-map" | "sorted-map-by" | "split-at" | "split-with" | "str" | "strcat" | "sym" | "sync" | "take" | "take-while" | "time" | "unimport" | "unintern" | "unrefer" | "val" | "vals" | "vector" | "with-meta" | "zero?" | "zipmap" { addToken(Token.FUNCTION); } {LineTerminator} { addNullToken(); return firstToken; } {WhiteSpace}+ { addToken(Token.WHITESPACE); } {CharLiteral} { addToken(Token.LITERAL_CHAR); } {StringLiteralStart} { start = zzMarkedPos-1; yybegin(STRING); } {Nil} { addToken(Token.DATA_TYPE); } {BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } {Quote} { addToken(Token.SEPARATOR); } {Unquote} { addToken(Token.SEPARATOR); } {VarQuote} { addToken(Token.SEPARATOR); } {Dispatch} { addToken(Token.DATA_TYPE); } {LineCommentBegin} { start = zzMarkedPos-1; yybegin(EOL_COMMENT); } {Separator} { addToken(Token.SEPARATOR); } {Operator} { addToken(Token.OPERATOR); } {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } {FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } {Keyword} { addToken(Token.PREPROCESSOR); } {DefName} { addToken(Token.IDENTIFIER); } <> { addNullToken(); return firstToken; } . { addToken(Token.ERROR_IDENTIFIER); } } { [^\n\\\"]+ {} \\.? { /* Skip escaped chars. */ } \"\" {} \" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } \n | <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } } { [^hwf\n]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } [hwf] {} \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ClojureTokenMaker.java000066400000000000000000002647041257417003700321740ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 9/14/13 7:14 PM */ /* * 12/23/2010 * * ClojureTokenMaker.java - Scanner for Clojure. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for the Clojure programming language.

* * The original version of this class was graciously donated by the folks at the * Fiji project. * This version has been modified to fix a few issues. * Its original location was * here. *

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated ClojureTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * */ public class ClojureTokenMaker extends AbstractJFlexTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int EOL_COMMENT = 2; public static final int STRING = 1; public static final int YYINITIAL = 0; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\57\1\16\1\0\1\37\1\35\22\0\1\60\1\71\1\17"+ "\1\53\1\72\1\67\1\67\1\12\1\45\1\50\1\66\1\63\1\73"+ "\1\44\1\20\1\70\1\4\1\15\1\15\1\15\4\7\2\5\1\2"+ "\1\1\1\64\1\65\1\62\1\36\1\52\3\6\1\42\1\43\1\42"+ "\5\3\1\41\13\3\1\40\2\3\1\34\1\11\1\34\1\54\1\61"+ "\1\47\1\23\1\27\1\24\1\76\1\25\1\14\1\104\1\74\1\33"+ "\1\105\1\106\1\32\1\77\1\30\1\75\1\22\1\101\1\13\1\21"+ "\1\26\1\10\1\103\1\31\1\100\1\102\1\107\1\55\1\46\1\56"+ "\1\51\uff81\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\1\1\2\0\1\2\1\3\1\4\1\1\2\5\1\1"+ "\1\2\2\1\1\6\1\7\14\1\1\10\1\4\1\11"+ "\1\10\1\4\1\2\4\4\11\1\1\12\1\13\1\14"+ "\1\15\2\12\1\16\2\12\1\17\2\20\1\21\1\20"+ "\2\22\1\20\1\5\1\20\1\1\1\23\3\0\6\1"+ "\1\24\3\1\1\25\52\1\1\24\4\1\4\0\1\4"+ "\3\1\1\26\4\1\1\26\11\1\1\24\13\1\1\13"+ "\1\12\4\0\1\21\1\22\1\1\1\21\2\1\3\0"+ "\4\1\1\25\5\1\1\25\4\1\1\24\2\1\2\25"+ "\40\1\1\24\1\27\1\25\13\1\1\25\3\1\2\0"+ "\2\27\26\1\1\24\10\1\1\25\4\1\4\0\3\1"+ "\2\0\4\1\1\25\4\1\2\25\2\1\1\25\1\24"+ "\1\25\3\1\1\30\1\1\1\25\3\1\1\25\3\1"+ "\1\24\1\1\1\25\5\1\1\25\3\1\2\0\26\1"+ "\1\25\2\1\1\0\1\31\1\0\1\1\2\0\7\1"+ "\1\25\52\1\2\0\1\1\1\0\176\1\1\25\50\1"+ "\1\26\44\1"; private static int [] zzUnpackAction() { int [] result = new int[629]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\110\0\220\0\330\0\330\0\u0120\0\u0168\0\u01b0"+ "\0\u01f8\0\u0240\0\u0288\0\u02d0\0\u0318\0\330\0\330\0\u0360"+ "\0\u03a8\0\u03f0\0\u0438\0\u0480\0\u04c8\0\u0510\0\u0558\0\u05a0"+ "\0\u05e8\0\u0630\0\u0678\0\330\0\u0168\0\u06c0\0\u0708\0\330"+ "\0\u0750\0\u0798\0\u07e0\0\u0828\0\u0870\0\u08b8\0\u0900\0\u0948"+ "\0\u0990\0\u09d8\0\u0a20\0\u0a68\0\u0ab0\0\u0af8\0\u0b40\0\u0b88"+ "\0\330\0\u0bd0\0\u0c18\0\u0c60\0\330\0\u0ca8\0\u0cf0\0\u0d38"+ "\0\u0d80\0\u0dc8\0\u0e10\0\u0e58\0\u0dc8\0\u0ea0\0\u0ee8\0\u0dc8"+ "\0\u0f30\0\u0f78\0\330\0\u0fc0\0\u1008\0\u1050\0\u1098\0\u10e0"+ "\0\u1128\0\u1170\0\u11b8\0\u1200\0\u1248\0\u1290\0\u12d8\0\u1320"+ "\0\u0168\0\u1368\0\u13b0\0\u13f8\0\u1440\0\u1488\0\u14d0\0\u1518"+ "\0\u1560\0\u15a8\0\u15f0\0\u1638\0\u1680\0\u16c8\0\u1710\0\u1758"+ "\0\u17a0\0\u17e8\0\u1830\0\u1878\0\u18c0\0\u1908\0\u1950\0\u1998"+ "\0\u19e0\0\u1a28\0\u1a70\0\u1ab8\0\u1b00\0\u1b48\0\u1b90\0\u1bd8"+ "\0\u1c20\0\u1c68\0\u1cb0\0\u1cf8\0\u1d40\0\u1d88\0\u1dd0\0\u1e18"+ "\0\u1e60\0\u1ea8\0\u1ef0\0\u1f38\0\u1f80\0\u1fc8\0\u2010\0\u2058"+ "\0\u20a0\0\u20e8\0\u2130\0\u2178\0\u21c0\0\u2208\0\u2250\0\u2298"+ "\0\u0168\0\u22e0\0\u2328\0\u2370\0\u23b8\0\u2400\0\u2448\0\u2490"+ "\0\u24d8\0\u2520\0\u2568\0\u25b0\0\u25f8\0\u2640\0\u2688\0\u26d0"+ "\0\u2718\0\u2760\0\u27a8\0\u27f0\0\u2838\0\u2880\0\u28c8\0\u2910"+ "\0\u2958\0\u29a0\0\u29e8\0\330\0\330\0\u2a30\0\u2a78\0\u2ac0"+ "\0\u2b08\0\u0dc8\0\u2b50\0\u2b98\0\u2be0\0\u2c28\0\u2c70\0\u2cb8"+ "\0\u2d00\0\u2d48\0\u2d90\0\u2dd8\0\u2e20\0\u2e68\0\u2eb0\0\u2ef8"+ "\0\u2f40\0\u2f88\0\u2fd0\0\u3018\0\u3060\0\u30a8\0\u30f0\0\u3138"+ "\0\u3180\0\u0168\0\u31c8\0\u3210\0\u3258\0\u32a0\0\u32e8\0\u3330"+ "\0\u3378\0\u33c0\0\u3408\0\u3450\0\u3498\0\u34e0\0\u3528\0\u3570"+ "\0\u35b8\0\u2eb0\0\u3600\0\u3648\0\u3690\0\u36d8\0\u3720\0\u3768"+ "\0\u37b0\0\u37f8\0\u3840\0\u3888\0\u38d0\0\u3918\0\u3960\0\u39a8"+ "\0\u39f0\0\u3a38\0\u3a80\0\u3ac8\0\u3b10\0\u3b58\0\u3ba0\0\u3450"+ "\0\u3be8\0\u3c30\0\u3c78\0\u3cc0\0\u3d08\0\u3d50\0\u3d98\0\u3de0"+ "\0\u3e28\0\u3e70\0\u3eb8\0\u3f00\0\u3f48\0\u3f90\0\u3fd8\0\u4020"+ "\0\u4068\0\u40b0\0\330\0\u2178\0\u40f8\0\u4140\0\u4188\0\u41d0"+ "\0\u4218\0\u4260\0\u42a8\0\u42f0\0\u4338\0\u4380\0\u43c8\0\u4410"+ "\0\u4458\0\u44a0\0\u44e8\0\u4530\0\u4578\0\u45c0\0\u4608\0\u4650"+ "\0\u4698\0\u46e0\0\u4728\0\u4770\0\u47b8\0\u4800\0\u4848\0\u4890"+ "\0\u48d8\0\u4920\0\u4968\0\u49b0\0\u49f8\0\u4a40\0\u4a88\0\u4ad0"+ "\0\u4b18\0\u4b60\0\u4ba8\0\u4bf0\0\u4c38\0\u4c80\0\u4cc8\0\u4d10"+ "\0\u4d58\0\u4da0\0\u4de8\0\u4e30\0\u4e78\0\u4ec0\0\u4f08\0\u4f50"+ "\0\u4f98\0\u4fe0\0\u5028\0\u4fe0\0\u5070\0\u50b8\0\u5100\0\u3e28"+ "\0\u5148\0\u5190\0\u51d8\0\u5220\0\u0168\0\u5268\0\u52b0\0\u52f8"+ "\0\u5340\0\u5388\0\u53d0\0\u5418\0\u5460\0\u54a8\0\u54f0\0\u5538"+ "\0\u5580\0\u55c8\0\u5610\0\u5658\0\u56a0\0\u56e8\0\u5730\0\u5778"+ "\0\u57c0\0\u5808\0\u5850\0\u5898\0\u58e0\0\u5928\0\u5970\0\u59b8"+ "\0\u5a00\0\u5a48\0\u5a90\0\u5ad8\0\u5b20\0\u5b68\0\u5bb0\0\u5bf8"+ "\0\u5c40\0\u5c88\0\u5cd0\0\u5d18\0\u5d60\0\u5da8\0\u5df0\0\u5e38"+ "\0\u5e80\0\u5ec8\0\u3648\0\u5f10\0\u5f58\0\u5fa0\0\u5fe8\0\u6030"+ "\0\u6078\0\u60c0\0\u6108\0\u6150\0\u6198\0\u61e0\0\u6228\0\u6270"+ "\0\u62b8\0\u6300\0\u6348\0\u6390\0\u63d8\0\u6420\0\u6468\0\u64b0"+ "\0\u64f8\0\u6540\0\u6588\0\u65d0\0\u6618\0\u6660\0\u66a8\0\u66f0"+ "\0\u6738\0\u6780\0\u67c8\0\u6810\0\u6858\0\u68a0\0\u68e8\0\u6930"+ "\0\u6978\0\u69c0\0\u6a08\0\u6a50\0\u6a98\0\u6ae0\0\u6b28\0\u6b70"+ "\0\u6bb8\0\u6c00\0\u6c48\0\u6c90\0\u6cd8\0\u6d20\0\u6d68\0\u6db0"+ "\0\u6df8\0\u6e40\0\u6e88\0\u6ed0\0\u6f18\0\u6f60\0\u5fe8\0\u6fa8"+ "\0\u6ff0\0\u7038\0\u7080\0\u70c8\0\u7110\0\u7158\0\u71a0\0\u71e8"+ "\0\u7230\0\u7278\0\u72c0\0\u7308\0\u7350\0\u7398\0\u73e0\0\u7428"+ "\0\u7470\0\u74b8\0\u7500\0\u7548\0\u7590\0\u75d8\0\u7620\0\u7668"+ "\0\u76b0\0\u76f8\0\u7740\0\u7788\0\u77d0\0\u7818\0\u7860\0\u78a8"+ "\0\u78f0\0\u7938\0\u7980\0\u79c8\0\u7a10\0\u7a58\0\u7aa0\0\u7ae8"+ "\0\u7b30\0\u7b78\0\u7bc0\0\u49b0\0\u7c08\0\u7c50\0\u7c98\0\u7ce0"+ "\0\u7d28\0\u7d70\0\u7db8\0\u7e00\0\u7e48\0\u7e90\0\u7ed8\0\u7f20"+ "\0\u7f68\0\u7fb0\0\u53d0\0\u7ff8\0\u8040\0\u8088\0\u80d0\0\u8118"+ "\0\u8160\0\u81a8\0\u81f0\0\u8238\0\u8280\0\u82c8\0\u8310\0\u8358"+ "\0\u83a0\0\u83e8\0\u8430\0\u8478\0\u84c0\0\u8508\0\u8550\0\u8598"+ "\0\u85e0\0\u8628\0\u8670\0\u86b8\0\u8700\0\u8748\0\u8790\0\u87d8"+ "\0\u8820\0\u8868\0\u88b0\0\u88f8\0\u8940\0\u8988\0\u89d0\0\u8a18"+ "\0\u8a60\0\u8aa8\0\u8af0\0\u8b38\0\u8b80\0\u8bc8\0\u8c10\0\u8c58"+ "\0\u8ca0\0\u8ce8\0\u8d30\0\u8d78\0\u8dc0\0\u8e08\0\u8e50\0\u8e98"+ "\0\u8ee0\0\u8f28\0\u8f70\0\u8fb8\0\u9000\0\u9048\0\u9090\0\u90d8"+ "\0\u9120\0\u9168\0\u91b0\0\u91f8\0\u9240\0\u9288\0\u92d0\0\u9318"+ "\0\u9360\0\u93a8\0\u93f0\0\u9438\0\u9480\0\u94c8\0\u9510\0\u9558"+ "\0\u95a0\0\u95e8\0\u9630\0\u9678\0\u96c0\0\u9708\0\u9750\0\u9798"+ "\0\u97e0\0\u9828\0\u9870\0\u98b8\0\u9900\0\u9948\0\u9990\0\u99d8"+ "\0\u9a20\0\u9a68\0\u9ab0\0\u9af8\0\u9b40\0\u9b88\0\u9bd0\0\u9c18"+ "\0\u9c60\0\u9ca8\0\u9cf0\0\u9d38\0\u9d80\0\u9dc8\0\u9e10\0\u9e58"+ "\0\u9ea0\0\u9ee8\0\u9f30\0\u9f78\0\u9fc0\0\ua008\0\ua050\0\ua098"+ "\0\ua0e0\0\ua128\0\ua170\0\ua1b8\0\ua200\0\ua248\0\ua290\0\ua2d8"+ "\0\ua320\0\ua368\0\ua3b0\0\ua3f8\0\ua440\0\ua488\0\ua4d0\0\ua518"+ "\0\ua560\0\ua5a8\0\ua5f0\0\ua638\0\ua680\0\ua6c8\0\ua710\0\ua758"+ "\0\ua7a0\0\ua7e8\0\ua830\0\ua878\0\u5580"; private static int [] zzUnpackRowMap() { int [] result = new int[629]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\4\1\5\1\6\1\7\1\10\1\11\1\7\1\11"+ "\1\12\1\13\1\4\1\14\1\15\1\11\1\16\1\17"+ "\1\20\1\21\1\22\1\23\1\24\1\25\1\26\1\27"+ "\1\30\1\31\1\32\1\33\1\34\1\4\1\35\1\36"+ "\4\7\1\35\1\37\2\4\1\34\1\40\1\4\1\41"+ "\1\40\2\34\2\36\1\7\1\42\1\35\1\43\1\44"+ "\1\45\1\40\1\35\1\43\2\4\1\46\1\47\1\50"+ "\1\51\1\7\1\52\1\7\1\53\1\54\1\7\1\55"+ "\1\56\11\57\1\60\4\57\1\61\1\62\70\57\14\63"+ "\1\64\1\63\1\65\12\63\1\66\42\63\1\67\13\63"+ "\113\0\1\70\2\0\1\70\1\0\1\70\2\0\2\70"+ "\4\0\13\70\2\0\1\70\1\0\5\70\16\0\1\70"+ "\2\0\1\70\1\0\2\70\2\0\14\70\3\0\6\7"+ "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\1\71\2\0\1\72\1\73\1\74\1\72\1\73\1\72"+ "\1\71\1\0\1\72\1\75\1\73\2\0\1\76\4\72"+ "\1\77\4\72\1\100\1\72\2\0\1\7\1\0\1\101"+ "\1\100\1\75\1\77\1\7\2\0\1\71\2\0\2\71"+ "\5\0\1\72\3\7\1\0\1\7\1\0\2\7\1\71"+ "\1\0\2\72\1\75\1\72\1\101\7\72\1\71\2\0"+ "\1\72\2\11\1\72\1\11\1\72\1\71\1\0\1\72"+ "\1\75\1\11\2\0\1\76\4\72\1\77\4\72\1\100"+ "\1\72\2\0\1\7\1\0\1\72\1\100\1\75\1\77"+ "\1\7\2\0\1\71\2\0\2\71\5\0\1\72\3\7"+ "\1\0\1\7\1\0\2\7\1\71\1\0\2\72\1\75"+ "\11\72\3\0\6\7\2\0\3\7\2\0\10\7\1\102"+ "\3\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\20\0\1\103\1\104"+ "\4\0\1\105\1\0\1\106\62\0\6\7\2\0\1\107"+ "\1\110\1\7\2\0\1\7\1\111\1\7\1\112\1\7"+ "\1\113\6\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\1\107\1\110\1\7\2\0\3\7\1\114\4\7"+ "\1\115\1\7\1\116\1\117\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\7"+ "\1\120\12\7\3\0\1\7\2\76\1\7\1\76\1\7"+ "\2\0\2\7\1\76\2\0\1\121\13\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\2\7"+ "\1\122\2\7\1\123\1\124\5\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\1\125\1\126\4\7\1\127\5\7\3\0\6\7\2\0"+ "\1\130\2\7\2\0\5\7\1\131\6\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\1\7\1\132\1\7\1\133\10\7\3\0\6\7"+ "\2\0\1\134\2\7\2\0\1\7\1\135\1\136\5\7"+ "\1\137\1\7\1\140\1\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\10\7"+ "\1\141\3\7\3\0\6\7\2\0\3\7\2\0\3\7"+ "\1\142\6\7\1\143\1\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\144"+ "\1\145\4\7\1\146\5\7\3\0\6\7\2\0\3\7"+ "\2\0\10\7\1\147\3\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\5\7"+ "\1\150\1\7\1\151\4\7\3\0\6\7\2\0\1\152"+ "\2\7\2\0\3\7\1\153\7\7\1\154\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\1\155\13\7\3\0\6\7\2\0\3\7\2\0"+ "\13\7\1\156\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\1\7\1\157\4\7"+ "\1\160\5\7\3\0\6\7\2\0\3\7\2\0\3\7"+ "\1\161\1\7\1\162\1\163\4\7\1\164\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\1\7\1\165\12\7\3\0\6\7\2\0\3\7"+ "\2\0\13\7\1\166\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\1\167\13\7"+ "\3\0\6\7\2\0\3\7\2\0\3\7\1\170\1\7"+ "\1\171\5\7\1\172\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\1\7\1\173"+ "\12\7\3\0\6\7\2\0\1\7\1\174\1\7\2\0"+ "\6\7\1\175\1\7\1\176\3\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\2\7\1\177\1\200\10\7\37\0\1\36\17\0\2\36"+ "\41\0\1\201\36\0\1\202\50\0\1\203\41\0\1\204"+ "\36\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ "\1\0\5\7\14\0\1\7\1\205\2\7\1\40\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\40\1\7\1\0\2\7\2\0\14\7\65\0\1\40"+ "\25\0\5\7\1\206\2\0\1\207\1\210\1\211\2\0"+ "\1\7\1\212\1\213\1\214\1\215\1\216\2\7\1\217"+ "\1\220\1\7\1\221\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\1\7\1\222"+ "\1\7\1\223\10\7\3\0\6\7\2\0\3\7\2\0"+ "\3\7\1\224\10\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\1\121\2\7\2\0\14\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\1\225\2\7\2\0"+ "\5\7\1\226\5\7\1\227\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\7"+ "\1\230\12\7\3\0\6\7\2\0\3\7\2\0\3\7"+ "\1\231\1\7\1\232\5\7\1\233\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\1\7\1\234\12\7\3\0\5\7\1\235\2\0\3\7"+ "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\3\7\1\236\1\7\1\237\6\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\5\7\1\240\6\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\5\7\1\241\6\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\5\7\1\242\5\7\1\243\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\11\57\1\0\4\57\2\0\70\57\16\244\1\0"+ "\71\244\17\0\1\245\70\0\14\63\1\0\1\63\1\0"+ "\12\63\1\0\42\63\1\0\13\63\26\0\1\246\4\0"+ "\1\247\105\0\1\250\104\0\1\251\64\0\6\70\2\0"+ "\3\70\3\0\13\70\2\0\1\70\1\0\5\70\16\0"+ "\1\70\2\0\1\70\1\0\2\70\2\0\14\70\1\71"+ "\2\0\7\71\1\0\3\71\3\0\13\71\4\0\4\71"+ "\3\0\1\71\2\0\2\71\5\0\1\71\10\0\1\71"+ "\1\0\15\71\2\0\6\72\1\71\1\0\3\72\2\0"+ "\1\7\13\72\2\0\1\7\1\0\4\72\1\7\2\0"+ "\1\71\2\0\2\71\5\0\1\72\3\7\1\0\1\7"+ "\1\0\2\7\1\71\1\0\14\72\1\71\2\0\1\72"+ "\1\73\1\74\1\72\1\73\1\72\1\71\1\0\1\72"+ "\1\75\1\73\2\0\1\76\4\72\1\77\4\72\1\252"+ "\1\72\2\0\1\7\1\0\1\72\1\252\1\75\1\77"+ "\1\7\2\0\1\71\2\0\2\71\5\0\1\72\3\7"+ "\1\0\1\7\1\0\2\7\1\71\1\0\2\72\1\75"+ "\11\72\1\71\2\0\1\72\2\74\1\72\1\74\1\72"+ "\1\71\1\0\1\72\1\75\1\74\2\0\1\76\4\72"+ "\1\77\6\72\2\0\1\7\1\0\2\72\1\75\1\77"+ "\1\7\2\0\1\71\2\0\2\71\5\0\1\72\3\7"+ "\1\0\1\7\1\0\2\7\1\71\1\0\2\72\1\75"+ "\11\72\1\71\2\0\1\72\2\76\1\72\1\76\1\72"+ "\1\71\1\0\1\72\1\75\1\76\2\0\1\7\4\72"+ "\1\77\6\72\2\0\1\7\1\0\2\72\1\75\1\77"+ "\1\7\2\0\1\71\2\0\2\71\5\0\1\72\3\7"+ "\1\0\1\7\1\0\2\7\1\71\1\0\2\72\1\75"+ "\11\72\1\71\2\0\1\72\2\253\1\72\1\253\1\72"+ "\1\71\1\0\2\72\1\253\2\0\1\7\13\72\2\0"+ "\1\7\1\0\4\72\1\254\2\0\1\71\2\0\2\71"+ "\5\0\1\72\1\7\1\254\1\7\1\0\1\7\1\0"+ "\2\7\1\71\1\0\14\72\1\71\2\0\1\72\4\255"+ "\1\72\1\71\1\0\1\72\2\255\2\0\1\7\2\72"+ "\3\255\1\72\1\255\4\72\2\0\1\7\1\0\2\72"+ "\2\255\1\7\2\0\1\71\2\0\2\71\5\0\1\72"+ "\3\7\1\0\1\7\1\0\2\7\1\71\1\0\2\72"+ "\1\255\11\72\3\0\6\7\2\0\1\256\2\7\2\0"+ "\13\7\1\257\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\22\0\1\260"+ "\110\0\1\261\111\0\1\262\65\0\6\7\2\0\3\7"+ "\2\0\5\7\1\263\6\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\13\7\1\264\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\5\7\1\265\6\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\10\7\1\266\3\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\1\7\1\267"+ "\1\7\2\0\1\7\1\270\1\271\1\272\1\273\7\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\2\7\1\274\1\275\3\7\1\276"+ "\4\7\3\0\6\7\2\0\3\7\2\0\12\7\1\277"+ "\1\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\1\7\1\111\12\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\1\7\1\300\12\7\3\0\6\7\2\0"+ "\1\263\2\7\2\0\10\7\1\301\1\7\1\140\1\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\1\302"+ "\2\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\12\7\1\303\1\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\4\7\1\304\1\7\1\305\5\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\5\7\1\121\6\7\3\0\6\7\2\0\1\306\2\7"+ "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\7"+ "\1\307\12\7\3\0\6\7\2\0\1\310\2\7\2\0"+ "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\10\7\1\311\3\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\3\7\1\121\10\7\3\0\6\7\2\0\3\7\2\0"+ "\10\7\1\121\2\7\1\312\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\5\7\1\313\6\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\1\7\1\314\1\121\11\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\3\7\1\315"+ "\10\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\1\316\2\7\2\0\14\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\1\7\1\317\3\7"+ "\1\320\6\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\2\7\1\321\11\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\14\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\2\7\1\121\3\7\1\121\5\7"+ "\3\0\6\7\2\0\3\7\2\0\6\7\1\322\5\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\5\7\1\323\6\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\1\7\1\324\12\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\3\7\1\325\1\7\1\326\6\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\3\7"+ "\1\47\10\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\5\7"+ "\1\312\2\0\3\7\2\0\10\7\1\327\3\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\3\7\1\330\10\7\3\0\6\7\2\0"+ "\3\7\2\0\4\7\1\331\7\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\1\7\1\332"+ "\12\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\12\7\1\333\1\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\3\7\1\334"+ "\1\7\1\335\6\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\5\7\1\336\2\0\3\7\2\0\14\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\6\7\1\337\5\7\3\0\6\7\2\0\3\7"+ "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\12\7\1\340\1\7"+ "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\3\7\1\341\10\7\3\0\6\7\2\0\1\342"+ "\2\7\2\0\13\7\1\343\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\10\7\1\344\3\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\1\7\1\345\12\7"+ "\3\0\6\7\2\0\3\7\2\0\6\7\1\341\5\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\3\7\1\346\10\7"+ "\3\0\6\7\2\0\3\7\2\0\11\7\1\347\2\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\10\7\1\314\3\7\3\0\6\7"+ "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\121"+ "\13\7\3\0\6\7\2\0\3\7\2\0\12\7\1\350"+ "\1\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\6\7\1\351\5\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\6\7\1\352"+ "\5\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\5\7\1\353\6\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\13\7\1\354\3\0\6\7\2\0\3\7"+ "\2\0\6\7\1\302\5\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\1\7\1\355\12\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\3\7\1\356\1\357\3\7\1\360\3\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\1\7\1\361\12\7\3\0\6\7\2\0"+ "\3\7\2\0\14\7\2\0\1\7\1\0\4\7\1\362"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\5\7\1\363\6\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\1\7\1\364\2\7\1\121\1\7\1\365\5\7"+ "\2\0\1\7\1\0\4\7\1\366\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\5\7\1\367\6\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\2\7\1\370"+ "\11\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\46\0\1\371\113\0"+ "\1\372\36\0\1\34\14\0\2\34\1\203\24\0\1\34"+ "\11\0\2\34\27\0\1\204\1\373\14\204\2\373\1\204"+ "\1\0\34\204\2\373\1\374\27\204\3\0\6\7\2\0"+ "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ "\1\7\1\35\2\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\1\7\1\375"+ "\6\7\1\376\3\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\5\7\1\377\6\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\10\7\1\u0100\1\7\1\u0101\1\u0102\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\1\7\1\u0103\12\7\3\0\6\7\2\0"+ "\1\u0104\2\7\2\0\14\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\1\7\1\u0105\10\7"+ "\1\u0106\1\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\10\7\1\u0107\3\7"+ "\3\0\5\7\1\u0108\2\0\3\7\2\0\12\7\1\u0109"+ "\1\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\1\7\1\u010a\12\7\3\0"+ "\6\7\2\0\1\u010b\2\7\2\0\14\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\1\7"+ "\1\u010c\12\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\3\7\1\u010d\10\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\10\7"+ "\1\u010c\3\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\5\7"+ "\1\u010e\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\3\7\1\u010f"+ "\10\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\1\7\1\u0110\12\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\1\7\1\u0111\12\7\3\0\6\7\2\0"+ "\1\u0112\1\u0113\1\7\2\0\4\7\1\121\5\7\1\316"+ "\1\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\1\7\1\u0114\12\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\5\7\1\u0115\2\0\3\7\2\0\1\7"+ "\1\111\4\7\1\u0116\5\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\2\7\1\306\11\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\4\7\1\121\5\7\1\u0117\1\7"+ "\3\0\6\7\2\0\1\266\2\7\2\0\6\7\1\u0118"+ "\5\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\3\7\1\u0119\10\7\3\0"+ "\6\7\2\0\3\7\2\0\10\7\1\121\3\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\10\7\1\u011a\3\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\1\7\1\u011b\12\7\3\0\6\7\2\0\1\302\2\7"+ "\2\0\12\7\1\u011c\1\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\4\7\1\u011d\7\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\6\7\1\121\1\7\1\u011e\3\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\14\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\6\7\1\u011c\5\7\3\0\6\7"+ "\2\0\1\u011f\2\7\2\0\14\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\2\7\1\u0120"+ "\11\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\22\0\1\u0121\117\0"+ "\1\u0122\106\0\1\u0123\104\0\1\u0124\61\0\1\71\2\0"+ "\1\72\2\253\1\72\1\253\1\72\1\71\1\0\1\72"+ "\1\75\1\253\2\0\1\7\13\72\2\0\1\7\1\0"+ "\2\72\1\75\1\72\1\7\2\0\1\71\2\0\2\71"+ "\5\0\1\72\3\7\1\0\1\7\1\0\2\7\1\71"+ "\1\0\2\72\1\75\11\72\3\0\1\7\2\253\1\7"+ "\1\253\1\7\2\0\2\7\1\253\2\0\14\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\1\71\2\0\1\72\4\255\1\72"+ "\1\71\1\0\1\72\2\255\2\0\1\7\2\72\3\255"+ "\1\72\1\255\2\72\1\252\1\72\2\0\1\7\1\0"+ "\1\72\1\252\2\255\1\7\2\0\1\71\2\0\2\71"+ "\5\0\1\72\3\7\1\0\1\7\1\0\2\7\1\71"+ "\1\0\2\72\1\255\11\72\3\0\6\7\2\0\3\7"+ "\2\0\5\7\1\u0125\6\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\10\7\1\u0126\3\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\3\7\1\u0127\10\7\23\0\1\u0128"+ "\113\0\1\103\111\0\1\u0129\61\0\6\7\2\0\3\7"+ "\2\0\1\7\1\270\12\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\1\263\2\7\2\0\14\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\5\7\1\121\6\7\3\0"+ "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\10\7\1\341\3\7\3\0\6\7\2\0\3\7\2\0"+ "\5\7\1\47\6\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\6\7\1\121\5\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\5\7\1\300\4\7\1\u012a\1\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\2\7\1\121\11\7\3\0\5\7\1\120"+ "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\5\7\1\u012b\2\0\3\7\2\0\14\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\1\7\1\u012c\12\7\3\0"+ "\6\7\2\0\3\7\2\0\5\7\1\u012d\6\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\1\7\1\336\12\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\3\7\1\270\10\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\2\7\1\u012e\11\7\3\0"+ "\6\7\2\0\3\7\2\0\13\7\1\u012f\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\14\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\1\7\1\u0130\12\7\3\0\6\7"+ "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\1\7\1\302\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\4\7\1\300"+ "\7\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\1\270\2\7\2\0\14\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\6\7\1\u0131\5\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\4\7\1\121\7\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\10\7\1\270\3\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\12\7\1\121\1\7"+ "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\121"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\2\7"+ "\1\121\11\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\3\7\1\u0132\10\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\14\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\1\7\1\311\12\7\3\0\6\7"+ "\2\0\3\7\2\0\6\7\1\u0133\5\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\12\7"+ "\1\u0134\1\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\6\7\1\121\1\7\1\u0135\3\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\5\7\1\302\6\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\1\7\1\343\12\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\3\7\1\u0136\10\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\1\7\1\u0137\2\7"+ "\1\300\7\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\2\7\1\u0138\6\7"+ "\1\121\2\7\3\0\6\7\2\0\3\7\2\0\2\7"+ "\1\u0139\11\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\3\7\1\u013a\10\7"+ "\3\0\6\7\2\0\3\7\2\0\12\7\1\341\1\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\5\7\1\u013b\2\0"+ "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\14\7\2\0\1\121\1\0"+ "\4\7\1\u013c\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\12\7"+ "\1\121\1\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\1\u0132\2\7\2\0\14\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\5\7\1\u013d"+ "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\14\7\2\0\1\7\1\0\4\7\1\u013e"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\5\7\1\u013f\6\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\5\7\1\121\6\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\1\7\1\u0140\12\7\3\0\6\7\2\0\3\7"+ "\2\0\1\7\1\302\12\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\2\7\1\u0141\11\7\3\0\6\7\2\0\3\7"+ "\2\0\12\7\1\u0142\1\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\5\7\1\u0143\6\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\12\7\1\u0144\1\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ "\1\0\4\7\1\u0145\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\1\u0146\13\7\3\0\6\7"+ "\2\0\3\7\2\0\10\7\1\u0147\3\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\14\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\6\7\1\u0148\5\7\3\0\6\7"+ "\2\0\3\7\2\0\6\7\1\u0149\5\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\14\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\2\7\1\u014a\11\7\3\0\6\7"+ "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\12\7"+ "\1\u0141\1\7\3\0\6\7\2\0\3\7\2\0\14\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\10\7\1\121\3\7\3\0\6\7"+ "\2\0\3\7\2\0\2\7\1\302\11\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\10\7"+ "\1\u014b\1\7\1\u014c\1\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\1\u014d\2\7\2\0\14\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\6\7\1\u014e\5\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\1\7\1\u014f\12\7\3\0\6\7\2\0\3\7\2\0"+ "\10\7\1\u0150\3\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\10\7\1\u0151\3\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\12\7\1\u0152\1\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\1\7\1\307"+ "\12\7\47\0\1\u0153\106\0\1\u0154\44\0\6\7\2\0"+ "\3\7\2\0\5\7\1\u0155\6\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\4\7\1\u0156"+ "\7\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\3\7\1\u0157\10\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ "\1\7\1\0\4\7\1\u0158\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\5\7\1\u0159\2\0"+ "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\12\7\1\u015a\1\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\5\7\1\u015b\2\0\3\7"+ "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\13\7\1\u015c\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\1\7\1\u015d"+ "\12\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\12\7\1\u015e\1\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\5\7\1\u015f"+ "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\1\u0160\2\7\2\0\14\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\1\7\1\u0161\12\7\3\0\6\7\2\0\3\7"+ "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\3\7\1\u0162\10\7"+ "\3\0\6\7\2\0\1\u010c\2\7\2\0\14\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\211\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\1\u0163\2\7\2\0\14\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\6\7\1\u010c\5\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\6\7\1\u0164\5\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\1\u0165\13\7\3\0\6\7\2\0\3\7\2\0"+ "\2\7\1\u013f\11\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\5\7\1\u0166\6\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\10\7\1\302\3\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\3\7\1\u0167"+ "\10\7\3\0\6\7\2\0\3\7\2\0\1\7\1\317"+ "\12\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\7\7\1\331\4\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\13\7\1\u0168"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\1\7\1\121\12\7\3\0\6\7"+ "\2\0\3\7\2\0\5\7\1\u0169\6\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\3\7"+ "\1\121\10\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\1\7\1\233\1\7\2\0\14\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\13\7"+ "\1\u016a\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\6\7\1\u016b\5\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\1\7\1\121"+ "\12\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\6\7\1\u016c\5\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\1\7\1\u016d"+ "\12\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\1\7\1\314"+ "\12\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\3\7\1\133\10\7\2\0\1\u016e\132\0"+ "\1\u0121\102\0\1\u016f\111\0\1\u0170\70\0\6\7\2\0"+ "\1\7\1\322\1\7\2\0\14\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\6\7\1\u0171"+ "\5\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\2\7\1\125\11\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\24\0\1\u0172\115\0\1\u0173\60\0\6\7\2\0"+ "\3\7\2\0\13\7\1\u0174\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\4\7\1\341\7\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\7\7\1\u0175\4\7"+ "\3\0\6\7\2\0\1\u0176\2\7\2\0\14\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\14\7\2\0\1\7\1\0\4\7\1\u0177\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\6\7\1\u0178\5\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\10\7"+ "\1\272\3\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\5\7\1\u0179\6\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\14\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\6\7\1\121\5\7\3\0\6\7"+ "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\4\7"+ "\1\u017a\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\6\7\1\u017b"+ "\5\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\1\u017c\2\7\2\0\14\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\6\7\1\u017d\5\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\12\7\1\u0152\1\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\5\7\1\160\2\0\3\7\2\0\14\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\1\341\2\7"+ "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\1\u017e\2\7\2\0\14\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\1\7\1\u017f\1\7\2\0"+ "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\14\7\2\0\1\7\1\0\4\7\1\u0180"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\11\7\1\302\2\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\13\7\1\u0181\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\5\7\1\u0182\6\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\1\7\1\u0183\12\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\13\7\1\u0184\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\3\7"+ "\1\u0185\1\7\1\u0186\6\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ "\1\0\4\7\1\u0187\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\14\7\2\0\1\7\1\0\4\7\1\u0188\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\4\7"+ "\1\u0189\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\121\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\14\7\2\0\1\7\1\0\4\7\1\u018a\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\7"+ "\1\171\12\7\3\0\6\7\2\0\3\7\2\0\5\7"+ "\1\171\6\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\3\7\1\160\10\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\3\7"+ "\1\u018b\10\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\4\7"+ "\1\u018c\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\3\7\1\u018d"+ "\10\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\6\7\1\u018e\5\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\5\7\1\u018f"+ "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\50\0\1\34\110\0"+ "\1\u0153\41\0\6\7\2\0\3\7\2\0\14\7\2\0"+ "\1\7\1\0\4\7\1\u0190\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\1\u0191\13\7\3\0"+ "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\2\7\1\u0192\11\7\3\0\6\7\2\0\3\7\2\0"+ "\12\7\1\u0193\1\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\1\7\1\u0194\12\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\5\7\1\u010c\6\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\1\u0195\2\7\2\0\14\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\10\7"+ "\1\u0196\3\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\5\7\1\u0197\6\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\14\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\1\7\1\u0198\12\7\3\0\6\7"+ "\2\0\3\7\2\0\10\7\1\u010e\3\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\1\u0199\2\7\2\0"+ "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\11\7\1\u019a"+ "\2\7\3\0\6\7\2\0\3\7\2\0\2\7\1\u019b"+ "\11\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\3\7\1\u019c\10\7\3\0"+ "\6\7\2\0\3\7\2\0\10\7\1\u019d\3\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\1\u019e\13\7\3\0\6\7"+ "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\4\7"+ "\1\u0120\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\1\7\1\121\1\7\2\0"+ "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\5\7\1\u019f"+ "\2\0\3\7\2\0\3\7\1\u01a0\1\7\1\u01a1\6\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\3\7\1\u01a2\10\7"+ "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ "\1\0\4\7\1\u01a3\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\6\7\1\u01a4\5\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\1\7\1\47\12\7\3\0\6\7\2\0\3\7\2\0"+ "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\6\7\1\u01a5\5\7\70\0"+ "\1\u01a6\20\0\2\u01a7\6\u016f\1\0\1\u01a7\3\u016f\2\0"+ "\1\u01a7\13\u016f\1\u01a7\1\0\1\u01a7\1\0\4\u016f\2\u01a7"+ "\2\0\4\u01a7\5\0\1\u01a7\1\0\1\u01a7\1\0\3\u01a7"+ "\1\u016f\1\u01a7\1\u016f\1\u01a7\14\u016f\2\0\1\u016e\16\0"+ "\1\u0121\71\0\6\7\2\0\3\7\2\0\5\7\1\u01a8"+ "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\25\0\1\103\115\0"+ "\1\u01a9\57\0\6\7\2\0\3\7\2\0\4\7\1\u014d"+ "\7\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\5\7\1\u01aa\6\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\1\7\1\341"+ "\12\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\7\7\1\144"+ "\4\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ "\1\7\1\0\4\7\1\u01ab\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\2\7\1\u01ac\11\7"+ "\3\0\6\7\2\0\1\7\1\u01ad\1\7\2\0\1\7"+ "\1\u01ae\5\7\1\u01af\2\7\1\u01b0\1\312\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\2\7\1\u01b1\11\7\3\0\6\7\2\0\3\7"+ "\2\0\14\7\2\0\1\7\1\0\4\7\1\u01b2\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ "\4\7\1\u01b3\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\3\7"+ "\1\u01b4\10\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\5\7\1\u01b5\6\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\13\7"+ "\1\u01b6\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\11\7\1\u01b7\2\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\10\7\1\360"+ "\3\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\3\7\1\233\10\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\2\7\1\u01b8"+ "\11\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\10\7\1\341\3\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\10\7\1\u0132"+ "\3\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\7\7\1\u01b9"+ "\4\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\3\7\1\u01ba\10\7\3\0\6\7\2\0"+ "\1\7\1\u01bb\1\7\2\0\10\7\1\u014b\1\7\1\u014c"+ "\1\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\4\7\1\u01bc\7\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\1\7\1\u01bd\1\7\2\0"+ "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\10\7\1\u01be\3\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\3\7\1\u01bf"+ "\10\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\3\7\1\u01c0"+ "\10\7\3\0\6\7\2\0\3\7\2\0\13\7\1\u01c1"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\3\7\1\u01c2\10\7"+ "\3\0\6\7\2\0\3\7\2\0\4\7\1\u01c3\7\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\5\7\1\u01c4\6\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ "\1\0\4\7\1\u01c5\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\1\7\1\u01c6\12\7\3\0"+ "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\1\u01c7\13\7\3\0\6\7\2\0\3\7\2\0\4\7"+ "\1\u01c8\7\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\6\7\1\u01c9\5\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\1\u010e\2\7\2\0"+ "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\11\7\1\u01ca\2\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\5\7\1\u01cb"+ "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\5\7\1\u01cc"+ "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\13\7\1\u01cd\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\3\7\1\u01ce\10\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ "\4\7\1\u01cf\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\14\7"+ "\2\0\1\7\1\0\4\7\1\u01d0\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\12\7\1\u01d1\1\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\4\7\1\u01d2"+ "\7\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\6\7\1\u01d3\5\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\5\7\1\u01d4"+ "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\2\7\1\u01d5\1\u01bf\10\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\14\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\1\7\1\u01d6\12\7\3\0\6\7"+ "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\3\7"+ "\1\121\10\7\70\0\1\u016f\22\0\6\7\2\0\1\233"+ "\2\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\30\0"+ "\1\u0172\62\0\6\7\2\0\3\7\2\0\14\7\2\0"+ "\1\7\1\0\4\7\1\u01d7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\3\7\1\270\5\7\1\u01d8\2\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\14\7"+ "\2\0\1\7\1\0\4\7\1\u01d9\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\12\7\1\116\1\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\1\125\13\7\3\0\6\7\2\0\3\7"+ "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\1\7\1\157\4\7"+ "\1\160\5\7\3\0\6\7\2\0\3\7\2\0\14\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\1\7\1\u0181\12\7\3\0\6\7"+ "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\7"+ "\1\u01da\12\7\3\0\6\7\2\0\3\7\2\0\5\7"+ "\1\u01db\6\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\1\7\1\u0166\12\7"+ "\3\0\6\7\2\0\3\7\2\0\3\7\1\u01dc\10\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\10\7\1\u01dd\3\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\1\7\1\314\1\7\2\0\14\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\10\7\1\u01de\3\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\1\u01bd\13\7\3\0\6\7\2\0\3\7\2\0"+ "\3\7\1\u012b\10\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\5\7\1\335\6\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\5\7\1\u01df\6\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\13\7\1\u01e0\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\14\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\1\7\1\u01e1\12\7\3\0\6\7"+ "\2\0\3\7\2\0\13\7\1\331\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\4\7\1\u01e2"+ "\7\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\1\134\2\7\2\0\14\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\5\7\1\u01e3\6\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\6\7\1\u0132\5\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\5\7\1\312\6\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\1\7\1\u01e4\12\7"+ "\3\0\6\7\2\0\3\7\2\0\4\7\1\u01e5\7\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\5\7\1\u01e6\6\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\3\7\1\u01e7\10\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\14\7\2\0\1\7\1\0\4\7\1\u01e8\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\5\7\1\u01e9\6\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\14\7\2\0\1\7\1\0\4\7\1\u01ea\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\4\7"+ "\1\u01eb\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\10\7\1\u01ec"+ "\3\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\1\u01ed\2\7\2\0\14\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\12\7\1\u01ee\1\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\10\7\1\u01ef\3\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\1\7\1\u01f0\12\7\3\0\6\7\2\0\3\7"+ "\2\0\4\7\1\u01f1\7\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\6\7\1\u01f2\5\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\1\u01f3"+ "\2\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\1\u01f4\13\7\3\0\6\7\2\0\1\u01f5\2\7\2\0"+ "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\1\u01f6\2\7\2\0\14\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\3\7\1\u01f7\10\7\3\0\6\7\2\0\3\7"+ "\2\0\13\7\1\u01f8\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\3\7\1\u01f9\10\7\3\0\5\7\1\u0115\2\0\3\7"+ "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\1\u01fa\2\7\2\0\14\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\10\7\1\u01fb\3\7\3\0\6\7\2\0"+ "\3\7\2\0\6\7\1\u01fc\5\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\3\7\1\u01fd"+ "\10\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\6\7\1\u0118\5\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\1\u01fe\2\7\2\0\14\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\10\7\1\u01d4\3\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\5\7\1\u01ff\6\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\10\7\1\u0200\3\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\12\7\1\u0201\1\7\3\0\6\7\2\0\3\7"+ "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\7\7\1\u0202\4\7"+ "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\2\7\1\u0203\11\7\3\0\6\7\2\0\3\7"+ "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\1\7\1\u0204\12\7"+ "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ "\1\0\4\7\1\u0205\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\1\u0206\2\7"+ "\2\0\12\7\1\u0207\1\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\2\7"+ "\1\u0208\1\u0209\10\7\3\0\5\7\1\u020a\2\0\3\7"+ "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\6\7\1\u020b\5\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\5\7"+ "\1\u020c\6\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\5\7\1\u020d\6\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\14\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\2\7\1\u020e\11\7\3\0\6\7"+ "\2\0\3\7\2\0\10\7\1\u020f\3\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\14\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\1\7\1\u0210\12\7\3\0\6\7"+ "\2\0\3\7\2\0\13\7\1\121\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\1\7\1\302\12\7\3\0\6\7\2\0"+ "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\1\7\1\272"+ "\12\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\1\7\1\u0211\12\7\3\0\6\7\2\0"+ "\3\7\2\0\14\7\2\0\1\7\1\0\4\7\1\u0212"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\5\7\1\u01a1\6\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\6\7\1\163\5\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\3\7\1\u0213\10\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\1\u0214"+ "\2\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\5\7\1\u0215\6\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\12\7\1\u0132\1\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\12\7\1\u0216\1\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\1\7\1\171\12\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\14\7\2\0\1\302\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\6\7\1\u0217"+ "\5\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\5\7\1\u0218\6\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\3\7\1\u0219"+ "\10\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\5\7\1\u010b\6\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\10\7\1\u021a"+ "\3\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\2\7\1\u021b\11\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\5\7\1\u021c"+ "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\5\7\1\u021d\6\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\5\7\1\u021e\2\0\3\7\2\0\14\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\5\7\1\u021f\6\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\10\7\1\u0220\3\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\14\7\2\0\1\7\1\0\4\7\1\u0221\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ "\4\7\1\u0222\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\14\7"+ "\2\0\1\7\1\0\4\7\1\u0223\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\14\7\2\0\1\7\1\0\4\7\1\u0224"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ "\1\0\4\7\1\u0225\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\10\7\1\u0226\3\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\4\7\1\u0132\7\7\3\0\6\7\2\0\3\7\2\0"+ "\5\7\1\u0227\6\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\2\7\1\u0228\11\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\1\7\1\u0229\12\7\3\0"+ "\6\7\2\0\3\7\2\0\10\7\1\u022a\3\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\12\7\1\u022b\1\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\5\7\1\u022c\6\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\2\7\1\u022d\11\7\3\0"+ "\6\7\2\0\3\7\2\0\12\7\1\u010c\1\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\14\7\2\0\1\7\1\0\4\7\1\u022e\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\3\7\1\u022f\10\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\3\7"+ "\1\u0230\10\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\10\7\1\u0231\3\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\7\7\1\u0232\4\7\3\0\6\7\2\0\3\7"+ "\2\0\2\7\1\u010c\11\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\6\7\1\u0233\5\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\1\u0234"+ "\2\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\10\7\1\u0235\3\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\7\7\1\u0236\4\7\3\0"+ "\6\7\2\0\1\7\1\u0237\1\7\2\0\2\7\1\u021b"+ "\11\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\12\7\1\u0238\1\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\1\u0239\2\7\2\0\14\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\6\7\1\u023a\5\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\10\7\1\u023b\3\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\4\7\1\u023c\7\7\3\0\6\7"+ "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\4\7"+ "\1\u023d\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\1\u01d4\2\7\2\0\14\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\6\7\1\u023e\5\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\6\7\1\302\5\7\3\0\6\7\2\0\3\7"+ "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\4\7\1\u023f\7\7"+ "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ "\1\0\4\7\1\u0240\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\10\7\1\u0241\3\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\6\7\1\u0242\5\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\2\7\1\u0243\11\7\3\0"+ "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\10\7\1\u022f\3\7\3\0\6\7\2\0\3\7\2\0"+ "\5\7\1\u0219\6\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\3\7\1\u0244\10\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\5\7\1\u0245\6\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\3\7\1\u0246\10\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\5\7\1\u0247\6\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\13\7\1\u0248\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\13\7"+ "\1\u0249\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\5\7\1\u024a\6\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\5\7\1\u024b"+ "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\6\7\1\u024c\5\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\13\7\1\171"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\7\7\1\u0132\4\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ "\1\0\4\7\1\u024d\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\6\7\1\u024e\5\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\3\7\1\u021b\10\7\3\0\6\7\2\0\3\7\2\0"+ "\5\7\1\u024f\6\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\1\u010c\13\7\3\0\6\7\2\0\3\7\2\0\3\7"+ "\1\u0250\10\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\u0251\1\0\2\7\2\0\14\7"+ "\3\0\6\7\2\0\3\7\2\0\1\7\1\u0252\12\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\3\7\1\u0253\10\7"+ "\3\0\6\7\2\0\1\u0254\2\7\2\0\14\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\12\7\1\u0255\1\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\10\7\1\u0256\3\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\1\7\1\u0257"+ "\1\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\4\7\1\u010e\7\7\3\0\6\7\2\0\3\7\2\0"+ "\5\7\1\120\6\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\5\7\1\u01db\6\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\14\7\2\0\1\7\1\0\4\7\1\u0258\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\11\7\1\u0259\2\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\7\7"+ "\1\u025a\4\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\4\7"+ "\1\u025b\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\1\7\1\u025c\12\7\3\0\6\7\2\0"+ "\3\7\2\0\5\7\1\u025d\6\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\1\7\1\u025e"+ "\12\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\5\7\1\217\6\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\5\7\1\u025f"+ "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\12\7\1\u0260\1\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\4\7\1\u0261"+ "\7\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\12\7\1\u0262\1\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\12\7\1\u0263"+ "\1\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ "\1\7\1\121\2\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\12\7\1\u0264"+ "\1\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\1\7\1\u0265\12\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\13\7\1\u0266"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ "\2\0\14\7\2\0\1\7\1\0\4\7\1\u0267\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\5\7\1\u0268\6\7\2\0"+ "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ "\12\7\1\u0269\1\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ "\6\7\2\0\3\7\2\0\13\7\1\u026a\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\14\7"+ "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ "\1\0\2\7\2\0\6\7\1\u010c\5\7\3\0\6\7"+ "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\7\7"+ "\1\u026b\4\7\3\0\6\7\2\0\3\7\2\0\2\7"+ "\1\u026c\11\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\7"+ "\1\221\12\7\3\0\6\7\2\0\3\7\2\0\3\7"+ "\1\u026d\10\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\4\7\1\u026e\7\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\3\7"+ "\1\u026f\10\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\10\7\1\u015a\3\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\5\7"+ "\1\u0270\6\7\2\0\1\7\1\0\5\7\14\0\4\7"+ "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ "\2\0\3\7\2\0\3\7\1\u0271\10\7\2\0\1\7"+ "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ "\2\0\14\7\3\0\6\7\2\0\1\u0272\2\7\2\0"+ "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\6\7\1\u025e\5\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7\3\0\6\7\2\0\3\7\2\0\1\7\1\u0273"+ "\12\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\2\7\1\u025f"+ "\11\7\3\0\6\7\2\0\3\7\2\0\4\7\1\u0274"+ "\7\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ "\4\7\1\0\1\7\1\0\2\7\2\0\10\7\1\217"+ "\3\7\3\0\6\7\2\0\3\7\2\0\1\7\1\u0158"+ "\12\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ "\3\7\2\0\5\7\1\u0275\6\7\2\0\1\7\1\0"+ "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ "\14\7"; private static int [] zzUnpackTrans() { int [] result = new int[43200]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\1\1\2\0\2\11\10\1\2\11\14\1\1\11\3\1"+ "\1\11\20\1\1\11\3\1\1\11\15\1\1\11\3\0"+ "\72\1\4\0\37\1\2\11\4\0\6\1\3\0\106\1"+ "\2\0\1\11\45\1\4\0\3\1\2\0\51\1\2\0"+ "\31\1\1\0\1\1\1\0\1\1\2\0\62\1\2\0"+ "\1\1\1\0\314\1"; private static int [] zzUnpackAttribute() { int [] result = new int[629]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public ClojureTokenMaker() { } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addHyperlinkToken(int, int, int) */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, false); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. * @param hyperlink Whether this token is a hyperlink. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset, boolean hyperlink) { super.addToken(array, start,end, tokenType, startOffset, hyperlink); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { ";", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { /*case Token.COMMENT_MULTILINE: state = MLC; start = text.offset; break; case Token.COMMENT_DOCUMENTATION: state = DOCCOMMENT; start = text.offset; break;*/ case Token.LITERAL_STRING_DOUBLE_QUOTE: state = STRING; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public ClojureTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public ClojureTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 164) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 15: { addToken(Token.PREPROCESSOR); } case 26: break; case 6: { addNullToken(); return firstToken; } case 27: break; case 19: { addToken(Token.LITERAL_CHAR); } case 28: break; case 9: { addToken(Token.WHITESPACE); } case 29: break; case 17: { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } case 30: break; case 18: { addToken(Token.LITERAL_NUMBER_FLOAT); } case 31: break; case 20: { addToken(Token.RESERVED_WORD); } case 32: break; case 22: { addToken(Token.VARIABLE); } case 33: break; case 8: { addToken(Token.SEPARATOR); } case 34: break; case 1: { addToken(Token.IDENTIFIER); } case 35: break; case 14: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } case 36: break; case 21: { addToken(Token.FUNCTION); } case 37: break; case 23: { addToken(Token.DATA_TYPE); } case 38: break; case 11: { /* Skip escaped chars. */ } case 39: break; case 2: { addToken(Token.ERROR_IDENTIFIER); } case 40: break; case 24: { addToken(Token.LITERAL_BOOLEAN); } case 41: break; case 12: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } case 42: break; case 25: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } case 43: break; case 16: { addToken(Token.ERROR_NUMBER_FORMAT); } case 44: break; case 7: { start = zzMarkedPos-1; yybegin(STRING); } case 45: break; case 3: { start = zzMarkedPos-1; yybegin(EOL_COMMENT); } case 46: break; case 5: { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } case 47: break; case 4: { addToken(Token.OPERATOR); } case 48: break; case 13: { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } case 49: break; case 10: { } case 50: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case EOL_COMMENT: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } case 630: break; case STRING: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } case 631: break; case YYINITIAL: { addNullToken(); return firstToken; } case 632: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DTokenMaker.flex000066400000000000000000000463511257417003700307650ustar00rootroot00000000000000/* * 09/08/2014 * * DTokenMaker.java - Scanner for the D programming language. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for the D programming language.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated DTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 1.0 * */ %% %public %class DTokenMaker %extends AbstractJFlexCTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Token type specific to DTokenMaker; this signals that the user is in * a nestable multi-line comment. The nested depth is embedded in the * actual end token type. */ private static final int INTERNAL_IN_NESTABLE_MLC = -(1<<11); /** * When in a (possibly) nested MLC, this is the current nested depth. */ private int nestedMlcDepth; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public DTokenMaker() { } /** * Adds the token specified to the current linked list of tokens as an * "end token;" that is, at zzMarkedPos. * * @param tokenType The token's type. */ private void addEndToken(int tokenType) { addToken(zzMarkedPos,zzMarkedPos, tokenType); } private void addNestedMlcEndToken() { addEndToken(INTERNAL_IN_NESTABLE_MLC - nestedMlcDepth); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addHyperlinkToken(int, int, int) */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, false); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. * @param hyperlink Whether this token is a hyperlink. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset, boolean hyperlink) { super.addToken(array, start,end, tokenType, startOffset, hyperlink); zzStartRead = zzMarkedPos; } @Override public int getClosestStandardTokenTypeForInternalType(int type) { switch (type) { case INTERNAL_IN_NESTABLE_MLC: return TokenTypes.COMMENT_MULTILINE; } return type; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; nestedMlcDepth = 0; // Start off in the proper state. int state = YYINITIAL; switch (initialTokenType) { case Token.LITERAL_BACKQUOTE: state = WYSIWYG_STRING_2; break; case Token.LITERAL_STRING_DOUBLE_QUOTE: state = WYSIWYG_STRING_1; break; case Token.COMMENT_MULTILINE: state = MLC; break; case Token.COMMENT_DOCUMENTATION: state = DOCCOMMENT; break; case INTERNAL_IN_NESTABLE_MLC: state = NESTABLE_MLC; break; default: if (initialTokenType<-1024) { int main = -(-initialTokenType & 0xffffff00); switch (main) { default: // Should never happen case INTERNAL_IN_NESTABLE_MLC: state = NESTABLE_MLC; break; } nestedMlcDepth = -initialTokenType&0xff; } else { state = YYINITIAL; } } start = text.offset; s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. * @exception IOException if any I/O-Error occurs. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} Letter = ([A-Za-z]) LetterOrUnderscore = ({Letter}|"_") NonzeroDigit = ([1-9]) BinaryDigit = ([0-1]) Digit = ("0"|{NonzeroDigit}) HexDigit = ({Digit}|[A-Fa-f]) OctalDigit = ([0-7]) AnyCharacterButApostropheOrBackSlash = ([^\\']) AnyCharacterButDoubleQuoteOrBackSlash = ([^\\\"\n]) EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) Escape = ("\\"(([btnfr\"'\\])|([0123]{OctalDigit}?{OctalDigit}?)|({OctalDigit}{OctalDigit}?)|{EscapedSourceCharacter})) NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\'\`]|"#"|"\\") IdentifierStart = ({LetterOrUnderscore}|"$") IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) LineTerminator = (\n) WhiteSpace = ([ \t\f]) StringPostfix = ([cwd]) CharLiteral = ([\']({AnyCharacterButApostropheOrBackSlash}|{Escape})[\']{StringPostfix}?) UnclosedCharLiteral = ([\'][^\'\n]*) ErrorCharLiteral = ({UnclosedCharLiteral}[\']{StringPostfix}?) StringLiteral = ([\"]({AnyCharacterButDoubleQuoteOrBackSlash}|{Escape})*[\"]{StringPostfix}?) UnclosedStringLiteral = ([\"]([\\].|[^\\\"])*[^\"]?) HexStringLiteral = ([x]{StringLiteral}) UnclosedHexStringLiteral = ([x]{UnclosedStringLiteral}) ErrorStringLiteral = ({UnclosedStringLiteral}[\"]{StringPostfix}?) WysiwygStringLiteralStart = ("r"[\"]) WysiwygStringLiteralStart2 = ("`") MLCBegin = "/*" MLCEnd = "*/" DocCommentBegin = "/**" NestableMLCBegin = "/+" LineCommentBegin = "//" LineDocCommentBegin = "///" DigitOrUnderscore = ({Digit}|[_]) DigitsAndUnderscoresEnd = ({DigitOrUnderscore}*{Digit}) IntegerHelper = (({NonzeroDigit}{DigitsAndUnderscoresEnd}?)|"0") IntegerLiteral = ({IntegerHelper}[lL]?) BinaryDigitOrUnderscore = ({BinaryDigit}|[_]) BinaryDigitsAndUnderscores = ({BinaryDigit}({BinaryDigitOrUnderscore}*{BinaryDigit})?) BinaryLiteral = ("0"[bB]{BinaryDigitsAndUnderscores}) HexDigitOrUnderscore = ({HexDigit}|[_]) HexDigitsAndUnderscores = ({HexDigit}({HexDigitOrUnderscore}*{HexDigit})?) OctalDigitOrUnderscore = ({OctalDigit}|[_]) OctalDigitsAndUnderscoresEnd= ({OctalDigitOrUnderscore}*{OctalDigit}) HexHelper = ("0"(([xX]{HexDigitsAndUnderscores})|({OctalDigitsAndUnderscoresEnd}))) NonFloatSuffix = (([uU][lL]?)|([lL][uU]?)) HexLiteral = ({HexHelper}{NonFloatSuffix}?) FloatHelper1 = ([fFdD]?) FloatHelper2 = ([eE][+-]?{Digit}+{FloatHelper1}) FloatLiteral1 = ({Digit}+"."({FloatHelper1}|{FloatHelper2}|{Digit}+({FloatHelper1}|{FloatHelper2}))) FloatLiteral2 = ("."{Digit}+({FloatHelper1}|{FloatHelper2})) FloatLiteral3 = ({Digit}+{FloatHelper2}) FloatLiteral = ({FloatLiteral1}|{FloatLiteral2}|{FloatLiteral3}|({Digit}+[fFdD])) ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+) BooleanLiteral = ("true"|"false") Separator = ([\(\)\{\}\[\]]) Separator2 = ([\;,.]) NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"|"|"&&"|">>>") AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") Operator = ({NonAssignmentOperator}|{AssignmentOperator}) Identifier = ({IdentifierStart}{IdentifierPart}*) ErrorIdentifier = ({NonSeparator}+) Annotation = ("@"{Identifier}?) URLGenDelim = ([:\/\?#\[\]@]) URLSubDelim = ([\!\$&'\(\)\*\+,;=]) URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) URLCharacters = ({URLCharacter}*) URLEndCharacter = ([\/\$]|{Letter}|{Digit}) URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) %state MLC %state DOCCOMMENT %state NESTABLE_MLC %state EOL_COMMENT %state EOL_DOCCOMMENT %state WYSIWYG_STRING_1 %state WYSIWYG_STRING_2 %% { /* Keywords */ "abstract" | "alias" | "align" | "asm" | "assert" | "auto" | "body" | "break" | "case" | "cast" | "catch" | "class" | "const" | "continue" | "debug" | "default" | "delegate" | "delete" | "deprecated" | "do" | "else" | "enum" | "export" | "extern" | "final" | "finally" | "for" | "foreach" | "foreach_reverse" | "function" | "goto" | "if" | "immutable" | "import" | "in" | "inout" | "interface" | "invariant" | "is" | "lazy" | "macro" | "mixin" | "module" | "new" | "nothrow" | "null" | "out" | "override" | "package" | "pragma" | "private" | "protected" | "public" | "pure" | "ref" | "scope" | "shared" | "static" | "struct" | "super" | "switch" | "synchronized" | "template" | "this" | "throw" | "try" | "typedef" | "typeid" | "typeof" | "union" | "unittest" | "version" | "void" | "volatile" | "while" | "with" | "__FILE__" | "__MODULE__" | "__LINE__" | "__FUNCTION__" | "__PRETTY_FUNCTION__" | "__gshared" | "__traits" | "__vector" | "__parameters" { addToken(Token.RESERVED_WORD); } "return" { addToken(Token.RESERVED_WORD_2); } /* Data types. */ "string" | "wstring" | "dstring" | "size_t" | "ptrdiff_t" | "bool" | "byte" | "cdouble" | "cent" | "cfloat" | "char" | "creal" | "dchar" | "double" | "float" | "idouble" | "ifloat" | "ireal" | "int" | "long" | "real" | "short" | "ubyte" | "ucent" | "uint" | "ulong" | "ushort" | "wchar" { addToken(Token.DATA_TYPE); } /* Booleans. */ {BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } /* Standard library (TODO) */ {LineTerminator} { addNullToken(); return firstToken; } {Identifier} { addToken(Token.IDENTIFIER); } {WhiteSpace}+ { addToken(Token.WHITESPACE); } /* String/Character literals. */ {CharLiteral} { addToken(Token.LITERAL_CHAR); } {UnclosedCharLiteral} { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; } {ErrorCharLiteral} { addToken(Token.ERROR_CHAR); } {StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } {UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } {ErrorStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); } {HexStringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } {UnclosedHexStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } {WysiwygStringLiteralStart} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(WYSIWYG_STRING_1); } {WysiwygStringLiteralStart2} { addToken(Token.LITERAL_BACKQUOTE); yybegin(WYSIWYG_STRING_2); } /* Comment literals. */ "/**/" { addToken(Token.COMMENT_MULTILINE); } {MLCBegin} { start = zzMarkedPos-2; yybegin(MLC); } {DocCommentBegin} { start = zzMarkedPos-3; yybegin(DOCCOMMENT); } {NestableMLCBegin} { start = zzMarkedPos-2; nestedMlcDepth = 1; yybegin(NESTABLE_MLC); } {LineCommentBegin} { start = zzMarkedPos-2; yybegin(EOL_COMMENT); } {LineDocCommentBegin} { start = zzMarkedPos-3; yybegin(EOL_DOCCOMMENT); } /* Annotations. */ {Annotation} { addToken(Token.ANNOTATION); } /* Separators. */ {Separator} { addToken(Token.SEPARATOR); } {Separator2} { addToken(Token.IDENTIFIER); } /* Operators. */ {Operator} { addToken(Token.OPERATOR); } /* Numbers */ {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {BinaryLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } {FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } {ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } /* Ended with a line not in a string or comment. */ <> { addNullToken(); return firstToken; } /* Catch any other (unhandled) characters and flag them as identifiers. */ . { addToken(Token.ERROR_IDENTIFIER); } } { [^hwf\n\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } [hwf] {} {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } \* {} \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } } { [^hwf\n\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; } [hwf] {} {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_DOCUMENTATION); } \* {} \n | <> { yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); return firstToken; } } { [^hwf\n\+\/]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } [hwf] {} {NestableMLCBegin} { nestedMlcDepth++; } "/" {} "+/" { System.out.println("... " + nestedMlcDepth); if (--nestedMlcDepth==0) { addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(YYINITIAL); } } \+ {} \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addNestedMlcEndToken(); return firstToken; } } { [^hwf\n]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } [hwf] {} \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } } { [^hwf\n]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; } [hwf] {} \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addNullToken(); return firstToken; } } { [^\"]+ { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } \" { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(YYINITIAL); } <> { if (firstToken==null) { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } return firstToken; } } { [^\`]+ { addToken(Token.LITERAL_BACKQUOTE); } \` { addToken(Token.LITERAL_BACKQUOTE); yybegin(YYINITIAL); } <> { if (firstToken==null) { addToken(Token.LITERAL_BACKQUOTE); } return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DTokenMaker.java000066400000000000000000002340141257417003700307430ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 6/21/15 7:13 PM */ /* * 09/08/2014 * * DTokenMaker.java - Scanner for the D programming language. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for the D programming language.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated DTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 1.0 * */ public class DTokenMaker extends AbstractJFlexCTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int WYSIWYG_STRING_1 = 6; public static final int EOL_COMMENT = 4; public static final int NESTABLE_MLC = 3; public static final int DOCCOMMENT = 2; public static final int YYINITIAL = 0; public static final int MLC = 1; public static final int WYSIWYG_STRING_2 = 7; public static final int EOL_DOCCOMMENT = 5; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\22\1\11\1\0\1\22\1\20\22\0\1\22\1\60\1\16"+ "\1\21\1\1\1\60\1\62\1\10\2\65\1\31\1\32\1\53\1\43"+ "\1\44\1\30\1\4\1\5\2\17\4\7\2\3\1\63\1\53\1\54"+ "\1\55\1\57\1\61\1\64\1\6\1\34\1\105\1\40\1\42\1\100"+ "\2\1\1\101\2\1\1\33\1\102\1\104\1\103\1\107\1\1\1\110"+ "\1\1\1\106\1\37\2\1\1\36\1\111\1\1\1\65\1\12\1\65"+ "\1\56\1\2\1\27\1\47\1\35\1\24\1\41\1\46\1\15\1\71"+ "\1\66\1\70\1\1\1\75\1\50\1\72\1\14\1\73\1\67\1\1"+ "\1\26\1\51\1\45\1\13\1\76\1\23\1\25\1\74\1\77\1\52"+ "\1\56\1\52\1\61\uff81\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\10\0\1\1\2\2\2\3\1\4\1\5\3\2\1\6"+ "\1\1\1\7\4\2\1\10\3\11\2\2\1\11\6\2"+ "\1\12\1\2\4\11\1\13\6\2\1\14\1\15\4\14"+ "\1\16\5\14\1\17\3\14\1\20\3\14\1\21\1\22"+ "\1\23\1\24\1\25\1\1\1\2\2\26\1\27\1\3"+ "\1\26\1\27\2\26\1\30\2\26\1\4\1\31\1\0"+ "\1\4\16\2\2\6\1\22\13\2\1\6\1\32\1\2"+ "\1\33\1\34\1\35\4\2\1\36\24\2\1\0\1\11"+ "\1\13\4\2\3\36\10\2\3\0\1\37\4\0\1\40"+ "\1\0\1\41\1\42\4\0\1\1\10\2\1\3\1\27"+ "\1\0\4\30\1\3\1\4\1\43\1\31\2\4\1\31"+ "\1\4\11\2\1\36\1\6\1\44\1\6\1\22\12\2"+ "\2\6\2\2\1\45\1\46\37\2\1\1\6\2\1\47"+ "\12\2\14\0\1\1\11\2\1\30\2\26\1\43\1\4"+ "\2\2\1\47\4\2\1\44\1\6\2\2\2\6\1\2"+ "\1\50\6\2\1\51\13\2\1\1\13\2\1\0\1\52"+ "\2\0\1\53\2\0\1\54\1\0\1\1\10\2\1\4"+ "\1\2\1\36\1\2\1\6\1\2\1\6\10\2\1\1"+ "\12\2\6\0\1\1\6\2\1\4\2\2\1\6\1\2"+ "\1\6\1\55\2\2\1\1\12\2\1\36\1\6\1\2"+ "\1\1\21\2"; private static int [] zzUnpackAction() { int [] result = new int[459]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\112\0\224\0\336\0\u0128\0\u0172\0\u01bc\0\u0206"+ "\0\u0250\0\u029a\0\u02e4\0\u032e\0\u0378\0\u03c2\0\u040c\0\u0456"+ "\0\u04a0\0\u04ea\0\u0534\0\u040c\0\u057e\0\u05c8\0\u0612\0\u065c"+ "\0\u06a6\0\u040c\0\u06f0\0\u073a\0\u0784\0\u07ce\0\u0818\0\u0862"+ "\0\u08ac\0\u08f6\0\u0940\0\u098a\0\u09d4\0\u0a1e\0\u040c\0\u040c"+ "\0\u0a68\0\u0ab2\0\u040c\0\u0afc\0\u0b46\0\u0b90\0\u0bda\0\u0c24"+ "\0\u0c6e\0\u0cb8\0\u0d02\0\u0d4c\0\u040c\0\u0d96\0\u0de0\0\u0e2a"+ "\0\u0e74\0\u040c\0\u0ebe\0\u0f08\0\u0f52\0\u0f9c\0\u0fe6\0\u040c"+ "\0\u1030\0\u107a\0\u10c4\0\u040c\0\u110e\0\u1158\0\u11a2\0\u040c"+ "\0\u11ec\0\u040c\0\u1236\0\u040c\0\u1280\0\u12ca\0\u1314\0\u135e"+ "\0\u1314\0\u1314\0\u13a8\0\u13f2\0\u143c\0\u1486\0\u14d0\0\u151a"+ "\0\u1564\0\u15ae\0\u15f8\0\u1642\0\u168c\0\u16d6\0\u1720\0\u176a"+ "\0\u17b4\0\u17fe\0\u1848\0\u1892\0\u18dc\0\u1926\0\u1970\0\u19ba"+ "\0\u1a04\0\u1a4e\0\u1a98\0\u1ae2\0\u1b2c\0\u1b76\0\u1bc0\0\u1c0a"+ "\0\u1c54\0\u1c9e\0\u1ce8\0\u1d32\0\u1d7c\0\u1dc6\0\u1e10\0\u1e5a"+ "\0\u1ea4\0\u1eee\0\u040c\0\u1f38\0\u1f82\0\u1fcc\0\u040c\0\u2016"+ "\0\u2060\0\u20aa\0\u20f4\0\u213e\0\u2188\0\u21d2\0\u221c\0\u2266"+ "\0\u22b0\0\u22fa\0\u2344\0\u238e\0\u23d8\0\u2422\0\u246c\0\u24b6"+ "\0\u2500\0\u254a\0\u2594\0\u25de\0\u2628\0\u2672\0\u26bc\0\u2706"+ "\0\u073a\0\u2750\0\u279a\0\u27e4\0\u282e\0\u2878\0\u28c2\0\u290c"+ "\0\u1ce8\0\u029a\0\u2956\0\u29a0\0\u29ea\0\u2a34\0\u2a7e\0\u2ac8"+ "\0\u2b12\0\u2b5c\0\u2ba6\0\u2bf0\0\u2c3a\0\u040c\0\u2c84\0\u2cce"+ "\0\u2d18\0\u2d62\0\u040c\0\u2dac\0\u040c\0\u040c\0\u2df6\0\u2e40"+ "\0\u2e8a\0\u2ed4\0\u2f1e\0\u2f68\0\u2fb2\0\u2ffc\0\u3046\0\u3090"+ "\0\u30da\0\u3124\0\u316e\0\u31b8\0\u3202\0\u324c\0\u3296\0\u32e0"+ "\0\u332a\0\u3374\0\u33be\0\u3408\0\u3452\0\u040c\0\u349c\0\u34e6"+ "\0\u3530\0\u357a\0\u35c4\0\u360e\0\u3658\0\u36a2\0\u36ec\0\u3736"+ "\0\u3780\0\u37ca\0\u3814\0\u385e\0\u38a8\0\u38f2\0\u393c\0\u040c"+ "\0\u3986\0\u39d0\0\u3a1a\0\u3a64\0\u213e\0\u3aae\0\u3af8\0\u3b42"+ "\0\u3b8c\0\u3bd6\0\u3c20\0\u3c6a\0\u3cb4\0\u3cfe\0\u040c\0\u3d48"+ "\0\u3d92\0\u3ddc\0\u3e26\0\u3e70\0\u3eba\0\u3f04\0\u3f4e\0\u3f98"+ "\0\u3fe2\0\u402c\0\u4076\0\u40c0\0\u410a\0\u4154\0\u419e\0\u41e8"+ "\0\u4232\0\u427c\0\u42c6\0\u4310\0\u435a\0\u43a4\0\u43ee\0\u4438"+ "\0\u4482\0\u44cc\0\u4516\0\u4560\0\u45aa\0\u45f4\0\u463e\0\u4688"+ "\0\u46d2\0\u471c\0\u4766\0\u47b0\0\u47fa\0\u4844\0\u488e\0\u48d8"+ "\0\u4922\0\u496c\0\u49b6\0\u4a00\0\u4a4a\0\u4a94\0\u4ade\0\u4b28"+ "\0\u4b72\0\u4bbc\0\u4c06\0\u4c50\0\u4c9a\0\u4ce4\0\u4d2e\0\u4d78"+ "\0\u4dc2\0\u4e0c\0\u4e56\0\u4ea0\0\u4eea\0\u4f34\0\u4f7e\0\u4fc8"+ "\0\u5012\0\u505c\0\u50a6\0\u50f0\0\u513a\0\u5184\0\u51ce\0\u1314"+ "\0\u5218\0\u33be\0\u040c\0\u5262\0\u52ac\0\u52f6\0\u029a\0\u5340"+ "\0\u538a\0\u53d4\0\u541e\0\u040c\0\u5468\0\u54b2\0\u54fc\0\u5546"+ "\0\u5590\0\u55da\0\u040c\0\u5624\0\u566e\0\u56b8\0\u5702\0\u574c"+ "\0\u5796\0\u029a\0\u57e0\0\u582a\0\u5874\0\u58be\0\u5908\0\u5952"+ "\0\u599c\0\u59e6\0\u5a30\0\u5a7a\0\u5ac4\0\u5b0e\0\u5b58\0\u5ba2"+ "\0\u5bec\0\u5c36\0\u5c80\0\u5cca\0\u5d14\0\u5d5e\0\u5da8\0\u5df2"+ "\0\u5e3c\0\u5e86\0\u5ed0\0\u5f1a\0\u5f64\0\u5fae\0\u5ff8\0\u6042"+ "\0\u608c\0\u60d6\0\u6120\0\u616a\0\u61b4\0\u61fe\0\u6248\0\u6292"+ "\0\u62dc\0\u6326\0\u6370\0\u63ba\0\u6404\0\u644e\0\u6498\0\u64e2"+ "\0\u652c\0\u6576\0\u65c0\0\u660a\0\u6654\0\u669e\0\u66e8\0\u6732"+ "\0\u677c\0\u67c6\0\u6810\0\u685a\0\u68a4\0\u68ee\0\u6938\0\u6982"+ "\0\u69cc\0\u6a16\0\u6a60\0\u6aaa\0\u6af4\0\u6b3e\0\u5ed0\0\u6b88"+ "\0\u5fae\0\u6bd2\0\u608c\0\u6c1c\0\u6c66\0\u6cb0\0\u6cfa\0\u6d44"+ "\0\u6d8e\0\u6dd8\0\u6e22\0\u6e6c\0\u6eb6\0\u6f00\0\u6f4a\0\u6f94"+ "\0\u029a\0\u6fde\0\u7028\0\u7072\0\u70bc\0\u7106\0\u7150\0\u719a"+ "\0\u71e4\0\u722e\0\u7278\0\u72c2\0\u730c\0\u7356\0\u73a0\0\u73ea"+ "\0\u7434\0\u747e\0\u74c8\0\u7512\0\u755c\0\u75a6\0\u75f0\0\u763a"+ "\0\u7684\0\u76ce\0\u7718\0\u7762\0\u77ac\0\u77f6\0\u7840\0\u788a"+ "\0\u78d4\0\u791e\0\u7968"; private static int [] zzUnpackRowMap() { int [] result = new int[459]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\11\1\12\1\13\1\14\1\15\1\14\1\12\1\14"+ "\1\16\1\17\1\11\1\20\1\21\1\22\1\23\1\14"+ "\1\24\1\11\1\25\1\26\1\27\1\30\1\31\1\32"+ "\1\33\1\34\1\35\2\12\1\36\3\12\1\37\1\12"+ "\1\40\1\41\1\42\1\43\1\44\1\45\1\46\1\47"+ "\1\50\1\51\2\34\1\52\1\34\1\53\1\54\1\53"+ "\1\55\1\47\1\12\1\56\1\57\1\60\1\61\1\62"+ "\2\12\1\63\13\12\11\64\1\65\3\64\1\66\5\64"+ "\1\67\5\64\1\70\34\64\1\71\34\64\1\72\3\64"+ "\1\73\5\64\1\74\5\64\1\75\34\64\1\76\23\64"+ "\11\77\1\100\3\77\1\66\5\77\1\67\4\77\1\101"+ "\1\77\1\102\33\77\1\71\23\77\11\103\1\104\3\103"+ "\1\105\5\103\1\106\42\103\1\107\34\103\1\110\3\103"+ "\1\73\5\103\1\74\42\103\1\76\23\103\16\111\1\112"+ "\73\111\27\113\1\114\62\113\10\11\2\0\4\11\1\0"+ "\1\11\1\0\1\11\1\0\4\11\4\0\10\11\2\0"+ "\5\11\12\0\1\11\1\0\25\11\7\12\2\0\1\115"+ "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ "\10\12\2\0\5\12\12\0\1\11\1\0\24\12\1\11"+ "\1\12\1\116\5\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ "\12\0\1\11\1\0\24\12\2\117\1\120\3\14\1\117"+ "\1\14\2\0\3\117\1\121\1\0\1\14\1\0\1\117"+ "\1\0\4\117\4\0\1\122\4\117\2\121\1\123\1\0"+ "\1\124\1\117\1\123\1\117\1\122\1\117\12\0\1\117"+ "\1\0\12\117\1\121\13\117\1\125\1\126\2\127\1\117"+ "\1\127\2\0\3\117\1\121\1\0\1\127\1\0\1\117"+ "\1\0\2\117\1\130\1\117\4\0\1\122\2\131\1\130"+ "\1\117\2\121\1\123\1\0\1\124\1\117\1\123\1\117"+ "\1\122\1\117\12\0\1\117\1\0\12\117\1\121\11\117"+ "\10\132\1\133\1\134\1\135\77\132\112\0\1\11\7\12"+ "\2\0\1\115\1\12\1\136\1\12\1\0\1\12\1\0"+ "\1\11\1\0\1\12\1\137\2\12\4\0\2\12\1\140"+ "\5\12\2\0\3\12\1\141\1\142\12\0\1\11\1\0"+ "\2\12\1\143\21\12\1\11\7\12\2\0\1\115\1\144"+ "\2\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ "\10\12\2\0\1\12\1\145\3\12\12\0\1\11\1\0"+ "\5\12\1\146\16\12\1\11\7\12\2\0\1\115\1\147"+ "\2\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ "\10\12\2\0\2\12\1\150\1\151\1\12\12\0\1\11"+ "\1\0\2\12\1\152\2\12\1\153\16\12\11\23\1\154"+ "\1\155\3\23\1\156\73\23\22\0\1\25\67\0\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\1\12\1\157\2\12\4\0\10\12\2\0\4\12"+ "\1\160\12\0\1\11\1\0\1\161\1\12\1\162\21\12"+ "\1\11\7\12\2\0\1\115\2\12\1\163\1\0\1\12"+ "\1\0\1\11\1\0\3\12\1\164\4\0\6\12\1\165"+ "\1\12\2\0\1\12\1\143\1\166\1\167\1\12\12\0"+ "\1\11\1\0\1\170\4\12\1\171\16\12\1\11\7\12"+ "\2\0\1\115\3\12\1\172\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\24\12\1\11\7\12\2\0\1\115\3\12\1\173\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\1\12"+ "\1\174\3\12\12\0\1\11\1\0\24\12\30\0\1\175"+ "\1\176\1\177\22\0\1\53\111\0\1\53\66\0\1\53"+ "\22\0\1\53\34\0\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\3\12\1\200\4\0"+ "\10\12\2\0\5\12\12\0\1\11\1\0\5\12\1\201"+ "\1\202\15\12\1\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\1\12\1\157\2\12\4\0"+ "\10\12\2\0\1\12\1\203\2\12\1\160\12\0\1\11"+ "\1\0\5\12\1\204\16\12\43\0\1\53\11\0\1\53"+ "\37\0\3\124\1\0\1\124\7\0\1\124\72\0\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\3\12\1\205\4\0\10\12\2\0\1\12\1\206"+ "\3\12\12\0\1\11\1\0\1\207\5\12\1\210\15\12"+ "\1\11\7\12\2\0\1\115\1\12\1\211\1\12\1\0"+ "\1\12\1\0\1\11\1\0\2\12\1\212\1\12\4\0"+ "\10\12\2\0\3\12\1\213\1\12\12\0\1\11\1\0"+ "\24\12\1\11\7\12\2\0\1\115\1\214\2\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\2\12\1\215"+ "\5\12\2\0\3\12\1\216\1\217\12\0\1\11\1\0"+ "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\2\12"+ "\1\220\2\12\12\0\1\11\1\0\5\12\1\221\16\12"+ "\1\11\7\12\2\0\1\115\1\222\2\12\1\0\1\12"+ "\1\0\1\11\1\0\1\223\1\224\2\12\4\0\10\12"+ "\2\0\1\225\4\12\12\0\1\11\1\0\1\226\1\12"+ "\1\227\3\12\1\230\15\12\54\0\1\231\1\53\111\0"+ "\1\53\1\0\1\232\107\0\1\53\4\0\1\53\27\0"+ "\1\11\2\233\3\11\1\233\1\11\2\0\1\11\3\233"+ "\1\0\1\11\1\0\1\11\1\0\4\233\4\0\10\233"+ "\2\0\5\233\12\0\1\11\1\0\24\233\1\11\7\12"+ "\2\0\1\115\1\234\2\12\1\0\1\12\1\0\1\11"+ "\1\0\3\12\1\235\4\0\10\12\2\0\1\236\1\12"+ "\1\237\2\12\12\0\1\11\1\0\24\12\1\11\7\12"+ "\2\0\1\115\1\12\1\240\1\241\1\0\1\12\1\0"+ "\1\11\1\0\3\12\1\164\4\0\6\12\1\165\1\12"+ "\2\0\4\12\1\242\12\0\1\11\1\0\4\12\1\243"+ "\17\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ "\12\0\1\11\1\0\5\12\1\214\16\12\1\11\7\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\2\12\1\244\2\12\12\0"+ "\1\11\1\0\2\12\1\245\2\12\1\246\16\12\1\11"+ "\7\12\2\0\1\115\1\247\2\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ "\1\11\1\0\10\12\1\250\13\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ "\4\0\10\12\2\0\1\12\1\251\3\12\12\0\1\11"+ "\1\0\5\12\1\252\16\12\11\64\1\0\3\64\1\0"+ "\5\64\1\0\5\64\1\0\34\64\1\0\23\64\45\0"+ "\1\253\22\0\1\254\44\0\1\255\116\0\1\256\126\0"+ "\1\257\111\0\1\260\22\0\1\261\44\0\1\262\116\0"+ "\1\263\126\0\1\264\44\0\11\77\1\0\3\77\1\0"+ "\5\77\1\0\4\77\1\0\1\77\1\0\33\77\1\0"+ "\23\77\32\0\1\265\107\0\1\266\61\0\11\103\1\0"+ "\3\103\1\0\5\103\1\0\42\103\1\0\23\103\45\0"+ "\1\267\22\0\1\270\44\0\1\271\133\0\1\272\44\0"+ "\16\111\1\0\73\111\27\113\1\0\62\113\10\11\2\0"+ "\1\11\1\273\2\11\1\0\1\11\1\0\1\11\1\0"+ "\4\11\4\0\10\11\2\0\5\11\12\0\1\11\1\0"+ "\25\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\1\274\7\12\2\0\1\275"+ "\4\12\12\0\1\11\1\0\1\12\1\276\1\12\1\277"+ "\4\12\1\300\1\12\1\301\1\12\1\302\4\12\1\303"+ "\2\12\10\117\2\0\4\117\1\0\1\117\1\0\1\117"+ "\1\0\4\117\4\0\10\117\2\0\5\117\12\0\1\117"+ "\1\0\26\117\1\120\3\304\1\117\1\304\2\0\4\117"+ "\1\0\1\304\1\0\1\117\1\0\4\117\4\0\10\117"+ "\2\0\5\117\12\0\1\117\1\0\27\117\3\305\1\117"+ "\1\305\2\0\4\117\1\0\1\305\1\0\1\117\1\0"+ "\4\117\3\0\1\306\10\117\1\306\1\0\5\117\12\0"+ "\1\117\1\0\27\117\3\124\1\117\1\124\2\0\3\117"+ "\1\121\1\0\1\124\1\0\1\117\1\0\4\117\4\0"+ "\5\117\2\121\1\123\2\0\1\117\1\123\3\117\12\0"+ "\1\117\1\0\12\117\1\121\13\117\1\125\1\117\2\307"+ "\1\117\1\307\2\0\4\117\1\0\1\307\1\0\1\117"+ "\1\0\4\117\4\0\10\117\2\0\5\117\12\0\1\117"+ "\1\0\27\117\3\126\1\117\1\126\2\0\3\117\1\121"+ "\1\0\1\126\1\0\1\117\1\0\4\117\4\0\5\117"+ "\2\121\1\123\1\0\1\124\1\117\1\123\3\117\12\0"+ "\1\117\1\0\12\117\1\121\13\117\1\125\1\126\2\127"+ "\1\117\1\127\2\0\1\117\1\310\1\117\1\121\1\0"+ "\1\127\1\0\1\117\1\0\4\117\4\0\1\311\3\117"+ "\1\310\2\121\1\123\1\0\1\124\1\117\1\123\1\117"+ "\1\311\1\117\12\0\1\117\1\0\12\117\1\121\14\117"+ "\5\312\2\0\3\117\1\312\1\0\1\312\1\0\1\117"+ "\1\0\1\117\1\312\2\117\4\0\1\117\2\312\2\117"+ "\3\312\2\0\1\117\2\312\2\117\12\0\1\117\1\0"+ "\12\117\1\312\4\117\1\312\10\117\2\313\2\117\2\0"+ "\4\117\1\0\1\117\1\0\1\117\1\0\4\117\4\0"+ "\10\117\2\0\5\117\12\0\1\117\1\0\24\117\10\314"+ "\1\315\1\0\100\314\23\0\2\316\14\0\1\316\60\0"+ "\1\315\101\0\4\314\2\317\1\314\1\320\1\321\1\0"+ "\1\132\1\322\3\132\1\317\6\314\1\132\6\314\1\132"+ "\7\314\1\132\44\314\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\5\12\12\0\1\11\1\0\2\12\1\323\21\12"+ "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\1\12\1\143"+ "\3\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\6\12"+ "\1\202\15\12\1\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ "\5\12\12\0\1\11\1\0\5\12\1\221\16\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ "\1\0\1\324\23\12\1\11\7\12\2\0\1\115\1\12"+ "\1\325\1\12\1\0\1\12\1\0\1\11\1\0\4\12"+ "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\24\12"+ "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\3\12\1\326"+ "\1\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\1\242"+ "\3\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\1\327"+ "\4\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ "\1\115\1\12\1\330\1\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ "\3\12\1\331\1\12\12\0\1\11\1\0\24\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ "\1\0\5\12\1\332\16\12\1\11\7\12\2\0\1\115"+ "\1\12\1\333\1\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\3\12\1\334\4\0\10\12\2\0"+ "\5\12\12\0\1\11\1\0\24\12\12\154\1\335\3\154"+ "\1\336\77\154\2\23\1\154\2\23\1\0\1\23\1\337"+ "\4\23\6\154\1\23\6\154\1\23\7\154\1\23\44\154"+ "\23\0\2\340\14\0\1\340\50\0\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\1\170"+ "\23\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\1\341"+ "\4\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\2\12"+ "\1\342\21\12\1\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ "\1\343\4\12\12\0\1\11\1\0\24\12\1\11\7\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\3\12\1\151\1\12\12\0"+ "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\1\12\1\344\3\12\12\0\1\11\1\0\24\12"+ "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ "\1\11\1\0\5\12\1\345\16\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ "\4\0\10\12\2\0\1\346\3\12\1\347\12\0\1\11"+ "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ "\2\12\1\350\2\12\12\0\1\11\1\0\24\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\10\12\2\0\2\12\1\351\2\12"+ "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ "\1\12\1\352\1\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\24\12\11\172\1\353\1\354\3\172\1\156\73\172\1\11"+ "\7\12\2\0\1\115\2\12\1\242\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\1\355\1\12"+ "\1\356\2\12\12\0\1\11\1\0\24\12\30\0\1\357"+ "\112\0\1\360\60\0\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\1\12\1\361\3\12\12\0\1\11\1\0\24\12"+ "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\6\12\1\362\1\12\2\0"+ "\5\12\12\0\1\11\1\0\5\12\1\356\16\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\10\12\2\0\1\363\4\12\12\0"+ "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\2\12"+ "\1\364\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ "\2\12\1\365\5\12\2\0\3\12\1\366\1\12\12\0"+ "\1\11\1\0\1\12\1\367\22\12\1\11\7\12\2\0"+ "\1\115\1\370\2\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\24\12\1\11\7\12\2\0\1\115\1\371\2\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ "\5\12\12\0\1\11\1\0\6\12\1\242\15\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ "\1\0\4\12\1\372\17\12\1\11\7\12\2\0\1\115"+ "\3\12\1\0\1\12\1\0\1\11\1\0\3\12\1\373"+ "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\2\12"+ "\1\374\21\12\1\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ "\5\12\12\0\1\11\1\0\1\12\1\375\22\12\1\11"+ "\7\12\2\0\1\115\1\376\2\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\1\377\4\12\12\0\1\11\1\0\1\12\1\u0100"+ "\22\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\4\12"+ "\1\u0101\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ "\4\0\10\12\2\0\1\u0102\4\12\12\0\1\11\1\0"+ "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\4\12"+ "\1\u0103\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\2\12"+ "\1\u0104\21\12\1\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ "\4\12\1\u0105\12\0\1\11\1\0\4\12\1\242\17\12"+ "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ "\1\11\1\0\11\12\1\362\12\12\1\11\7\12\2\0"+ "\1\115\1\12\1\u0106\1\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ "\5\12\12\0\1\11\1\0\1\12\1\u0107\22\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ "\1\0\2\12\1\u0108\21\12\1\11\7\12\2\0\1\115"+ "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ "\10\12\2\0\5\12\12\0\1\11\1\0\5\12\1\u0109"+ "\16\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\3\12\1\u010a\4\0\10\12\2\0"+ "\2\12\1\u010b\2\12\12\0\1\11\1\0\24\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\10\12\2\0\2\12\1\u010c\2\12"+ "\12\0\1\11\1\0\5\12\1\u010d\16\12\1\11\7\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\11\12\1\u010e\12\12\1\11\7\12\2\0\1\115\1\12"+ "\1\u010f\1\12\1\0\1\12\1\0\1\11\1\0\4\12"+ "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\24\12"+ "\55\0\1\53\1\0\1\34\32\0\1\11\7\233\2\0"+ "\1\u0110\3\233\1\0\1\233\1\0\1\11\1\0\4\233"+ "\4\0\10\233\2\0\5\233\12\0\1\11\1\0\24\233"+ "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\3\12\1\u0101\4\0\2\12\1\u0111\5\12"+ "\2\0\5\12\12\0\1\11\1\0\24\12\1\11\7\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\2\12\1\u0112\2\12\12\0"+ "\1\11\1\0\2\12\1\u0113\2\12\1\u0114\16\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\3\12\1\u0115\4\0\10\12\2\0\5\12\12\0"+ "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\1\12\1\u0116\2\12"+ "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\24\12"+ "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\1\u0117\4\12"+ "\12\0\1\11\1\0\5\12\1\u0118\2\12\1\u0119\13\12"+ "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ "\1\11\1\0\1\12\1\u0100\2\12\1\u011a\17\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\1\12\1\u011b\2\12\4\0\10\12\2\0\5\12"+ "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ "\3\12\1\0\1\12\1\0\1\11\1\0\2\12\1\u011c"+ "\1\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\6\12\1\u011d\1\12"+ "\2\0\5\12\12\0\1\11\1\0\24\12\1\11\7\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\1\242\4\12\12\0\1\11"+ "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ "\1\12\1\u011e\3\12\12\0\1\11\1\0\24\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\3\12\1\u011f\4\0\10\12\2\0\5\12\12\0"+ "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\3\12\1\u0120\1\12\12\0\1\11\1\0\2\12"+ "\1\u0121\21\12\67\0\1\u0122\72\0\1\u0123\64\0\1\u0124"+ "\133\0\1\u0125\133\0\1\u0126\72\0\1\u0127\64\0\1\u0128"+ "\133\0\1\u0129\133\0\1\u012a\72\0\1\u012b\64\0\1\u012c"+ "\133\0\1\u012d\44\0\3\11\5\u012e\2\0\3\11\1\u012e"+ "\1\0\1\u012e\1\0\1\11\1\0\1\11\1\u012e\2\11"+ "\4\0\1\11\2\u012e\2\11\3\u012e\2\0\1\11\2\u012e"+ "\2\11\12\0\1\11\1\0\12\11\1\u012e\4\11\1\u012e"+ "\5\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ "\1\11\1\0\13\12\1\u012f\10\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\3\12"+ "\1\u0130\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\2\12"+ "\1\u0131\2\12\12\0\1\11\1\0\24\12\1\11\7\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\4\12\1\u0132\12\0\1\11"+ "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ "\1\12\1\u0133\3\12\12\0\1\11\1\0\24\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\4\12\1\u0134\3\12\2\0\5\12"+ "\12\0\1\11\1\0\13\12\1\u0135\10\12\1\11\7\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\15\12\1\u0136\6\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\5\12\12\0\1\11\1\0\22\12\1\u0137\1\12"+ "\2\117\1\120\3\304\1\117\1\304\2\0\4\117\1\0"+ "\1\304\1\0\1\117\1\0\4\117\4\0\1\122\7\117"+ "\2\0\3\117\1\122\1\117\12\0\1\117\1\0\27\117"+ "\3\305\1\117\1\305\2\0\3\117\1\121\1\0\1\305"+ "\1\0\1\117\1\0\4\117\4\0\5\117\2\121\1\117"+ "\2\0\5\117\12\0\1\117\1\0\12\117\1\121\11\117"+ "\3\0\3\305\1\0\1\305\7\0\1\305\72\0\2\117"+ "\1\125\1\117\2\307\1\117\1\307\2\0\1\117\1\310"+ "\2\117\1\0\1\307\1\0\1\117\1\0\4\117\4\0"+ "\1\311\3\117\1\310\3\117\2\0\3\117\1\311\1\117"+ "\12\0\1\117\1\0\34\117\2\0\4\117\1\0\1\117"+ "\1\0\1\117\1\0\4\117\4\0\1\u0138\7\117\2\0"+ "\3\117\1\u0138\1\117\12\0\1\117\1\0\34\117\2\0"+ "\1\117\1\u0138\2\117\1\0\1\117\1\0\1\117\1\0"+ "\4\117\4\0\4\117\1\u0138\3\117\2\0\5\117\12\0"+ "\1\117\1\0\26\117\1\u0139\5\312\2\0\1\117\1\310"+ "\1\117\1\312\1\0\1\312\1\0\1\117\1\0\1\117"+ "\1\312\2\117\4\0\1\311\2\312\1\117\1\310\3\312"+ "\2\0\1\117\2\312\1\311\1\117\12\0\1\117\1\0"+ "\12\117\1\312\4\117\1\312\6\117\1\u013a\1\117\2\313"+ "\2\117\2\0\4\117\1\0\1\117\1\0\1\117\1\0"+ "\4\117\4\0\10\117\2\0\5\117\12\0\1\117\1\0"+ "\24\117\10\314\1\133\1\0\100\314\23\0\2\u013b\14\0"+ "\1\u013b\50\0\4\314\2\320\1\314\1\320\1\315\1\0"+ "\5\314\1\320\76\314\2\132\1\314\1\132\1\315\1\0"+ "\5\314\1\132\72\314\10\0\1\315\12\0\2\316\14\0"+ "\1\316\50\0\3\314\5\u013c\1\133\1\0\3\314\1\u013c"+ "\1\314\1\u013c\4\314\1\u013c\7\314\2\u013c\2\314\3\u013c"+ "\3\314\2\u013c\30\314\1\u013c\4\314\1\u013c\4\314\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\10\12\2\0\1\u013d\4\12\12\0"+ "\1\11\1\0\5\12\1\u013e\16\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\5\12"+ "\1\u010d\16\12\1\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ "\1\u013f\4\12\12\0\1\11\1\0\24\12\1\11\7\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\3\12\1\242\1\12\12\0"+ "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\5\12\12\0\1\11\1\0\1\u0140\23\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\1\12\1\u0141\2\12\4\0\10\12\2\0\5\12"+ "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ "\10\12\2\0\4\12\1\371\12\0\1\11\1\0\24\12"+ "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\2\12\1\325"+ "\2\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ "\4\0\10\12\2\0\2\12\1\u0142\2\12\12\0\1\11"+ "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ "\1\12\1\u0143\3\12\12\0\1\11\1\0\24\12\11\154"+ "\1\0\100\154\23\0\2\u0144\14\0\1\u0144\50\0\3\154"+ "\5\u0145\2\154\1\335\2\154\1\u0145\1\336\1\u0145\4\154"+ "\1\u0145\7\154\2\u0145\2\154\3\u0145\3\154\2\u0145\30\154"+ "\1\u0145\4\154\1\u0145\4\154\1\11\7\12\2\0\1\115"+ "\3\12\1\0\1\12\1\0\1\11\1\0\3\12\1\u0146"+ "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\24\12"+ "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\3\12\1\u0101"+ "\1\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\1\242"+ "\23\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\2\12"+ "\1\356\2\12\12\0\1\11\1\0\24\12\1\11\7\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\1\12\1\343\2\12\4\0\10\12\2\0\5\12\12\0"+ "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\2\242\3\12\12\0\1\11\1\0\24\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\10\12\2\0\4\12\1\374\12\0"+ "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\3\12\1\u013f\4\0"+ "\10\12\2\0\5\12\12\0\1\11\1\0\24\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\10\12\2\0\1\u0147\3\12\1\247"+ "\12\0\1\11\1\0\24\12\12\353\1\u0148\3\353\1\0"+ "\77\353\2\172\1\353\2\172\1\0\1\172\1\u0149\4\172"+ "\6\353\1\172\6\353\1\172\7\353\1\172\44\353\1\11"+ "\7\12\2\0\1\115\1\u014a\2\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\3\12\1\u013f\1\12\12\0\1\11\1\0\24\12"+ "\30\0\1\u014b\61\0\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\2\12\1\u014c\2\12\12\0\1\11\1\0\24\12"+ "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ "\1\11\1\0\6\12\1\242\15\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ "\4\0\10\12\2\0\1\12\1\u013f\3\12\12\0\1\11"+ "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ "\2\12\1\u014d\2\12\12\0\1\11\1\0\24\12\1\11"+ "\7\12\2\0\1\115\1\u014e\2\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\1\12\1\u014f\3\12\12\0\1\11\1\0\24\12"+ "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\3\12\1\u0150\4\0\10\12\2\0\5\12"+ "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ "\2\12\1\u0151\5\12\2\0\5\12\12\0\1\11\1\0"+ "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\1\12"+ "\1\u0152\3\12\12\0\1\11\1\0\24\12\1\11\7\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\1\12\1\u0153\22\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\5\12\12\0\1\11\1\0\5\12\1\145\16\12"+ "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\4\12\1\242"+ "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ "\10\12\2\0\1\12\1\u0154\3\12\12\0\1\11\1\0"+ "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ "\12\0\1\11\1\0\4\12\1\242\17\12\1\11\7\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\1\12\1\u0155\3\12\12\0"+ "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\5\12\12\0\1\11\1\0\5\12\1\u0156\16\12"+ "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\1\12\1\242"+ "\3\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\5\12"+ "\1\242\16\12\1\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ "\1\u0157\4\12\12\0\1\11\1\0\24\12\1\11\7\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\2\12\1\374\2\12\12\0"+ "\1\11\1\0\3\12\1\u013e\20\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ "\4\0\10\12\2\0\1\12\1\u0156\3\12\12\0\1\11"+ "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ "\5\12\12\0\1\11\1\0\3\12\1\u013f\20\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\10\12\2\0\1\12\1\u0158\3\12"+ "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ "\10\12\2\0\1\346\4\12\12\0\1\11\1\0\24\12"+ "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ "\1\11\1\0\1\12\1\u0101\22\12\1\11\7\12\2\0"+ "\1\115\1\u0159\2\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\2\12\1\221\21\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\1\u015a\4\12\12\0\1\11\1\0\24\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\3\12\1\u015b\4\0\10\12\2\0\5\12\12\0"+ "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\3\12\1\325\4\0"+ "\10\12\2\0\5\12\12\0\1\11\1\0\24\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\10\12\2\0\1\12\1\u015c\3\12"+ "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ "\3\12\1\0\1\12\1\0\1\11\1\0\1\12\1\u015d"+ "\2\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\24\12\10\11\2\0\1\11\1\u015e\2\11\1\0\1\11"+ "\1\0\1\11\1\0\4\11\4\0\10\11\2\0\5\11"+ "\12\0\1\11\1\0\25\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\3\12\1\u015a\1\12\12\0\1\11\1\0\24\12"+ "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ "\1\11\1\0\3\12\1\u015f\20\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\10\12"+ "\1\u0160\13\12\1\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ "\1\u0161\4\12\12\0\1\11\1\0\24\12\1\11\7\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\6\12\1\u0162\1\12\2\0\5\12\12\0"+ "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\5\12\12\0\1\11\1\0\7\12\1\u0163\14\12"+ "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\1\12\1\u0164"+ "\3\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ "\1\115\1\247\2\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\2\12"+ "\1\u0165\2\12\12\0\1\11\1\0\24\12\1\11\7\12"+ "\2\0\1\115\1\u0166\2\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\3\12\1\u0102\4\0\10\12"+ "\2\0\5\12\12\0\1\11\1\0\24\12\1\11\7\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\2\12\1\u013e\21\12\1\11\7\12\2\0\1\115\1\342"+ "\2\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ "\10\12\2\0\5\12\12\0\1\11\1\0\24\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\3\12\1\u0167\4\0\10\12\2\0\5\12\12\0"+ "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\4\12\1\u0168\12\0\1\11\1\0\24\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\10\12\2\0\2\12\1\u0169\2\12"+ "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ "\6\12\1\242\1\12\2\0\5\12\12\0\1\11\1\0"+ "\24\12\63\0\1\u016a\74\0\1\u0122\107\0\1\u016b\134\0"+ "\1\u016c\105\0\1\u016d\74\0\1\u0126\107\0\1\u016e\134\0"+ "\1\u016f\105\0\1\u0170\74\0\1\u012a\107\0\1\u0171\134\0"+ "\1\u0172\22\0\3\11\5\u0173\2\0\3\11\1\u0173\1\0"+ "\1\u0173\1\0\1\11\1\0\1\11\1\u0173\2\11\4\0"+ "\1\11\2\u0173\2\11\3\u0173\2\0\1\11\2\u0173\2\11"+ "\12\0\1\11\1\0\12\11\1\u0173\4\11\1\u0173\5\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ "\1\0\16\12\1\u0174\5\12\1\11\7\12\2\0\1\115"+ "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ "\10\12\2\0\2\12\1\u0175\2\12\12\0\1\11\1\0"+ "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\3\12\1\u0176\4\0\10\12\2\0"+ "\5\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\1\u0177"+ "\23\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\1\12\1\u0178\2\12\4\0\10\12"+ "\2\0\5\12\12\0\1\11\1\0\24\12\1\11\7\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\16\12\1\u0179\5\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\1\u0174"+ "\7\12\2\0\5\12\12\0\1\11\1\0\24\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\5\12\1\u017a\2\12\2\0\5\12"+ "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ "\7\12\1\u017b\2\0\5\12\12\0\1\11\1\0\24\12"+ "\2\117\1\u0139\5\312\2\0\3\117\1\312\1\0\1\312"+ "\1\0\1\117\1\0\1\117\1\312\2\117\4\0\1\117"+ "\2\312\2\117\3\312\2\0\1\117\2\312\2\117\12\0"+ "\1\117\1\0\12\117\1\312\4\117\1\312\4\117\3\314"+ "\5\u017c\1\133\1\0\3\314\1\u017c\1\314\1\u017c\4\314"+ "\1\u017c\7\314\2\u017c\2\314\3\u017c\3\314\2\u017c\30\314"+ "\1\u017c\4\314\1\u017c\4\314\1\11\7\12\2\0\1\115"+ "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ "\10\12\2\0\1\u017d\4\12\12\0\1\11\1\0\24\12"+ "\1\11\7\12\2\0\1\115\1\12\1\242\1\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ "\5\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\3\12"+ "\1\373\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\1\u0168"+ "\4\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ "\4\0\10\12\2\0\3\12\1\u017e\1\12\12\0\1\11"+ "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ "\2\12\1\u017f\2\12\12\0\1\11\1\0\24\12\3\154"+ "\5\u0180\2\154\1\335\2\154\1\u0180\1\336\1\u0180\4\154"+ "\1\u0180\7\154\2\u0180\2\154\3\u0180\3\154\2\u0180\30\154"+ "\1\u0180\4\154\1\u0180\4\154\1\11\7\12\2\0\1\115"+ "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ "\10\12\2\0\5\12\12\0\1\11\1\0\2\12\1\221"+ "\21\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ "\12\0\1\11\1\0\2\12\1\u0181\21\12\11\353\1\0"+ "\103\353\5\u0182\2\353\1\u0148\2\353\1\u0182\1\0\1\u0182"+ "\4\353\1\u0182\7\353\2\u0182\2\353\3\u0182\3\353\2\u0182"+ "\30\353\1\u0182\4\353\1\u0182\4\353\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\3\12"+ "\1\u0183\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ "\12\0\1\11\1\0\7\12\1\242\14\12\1\11\7\12"+ "\2\0\1\115\1\u0184\2\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ "\5\12\12\0\1\11\1\0\3\12\1\242\20\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\10\12\2\0\1\u0101\4\12\12\0"+ "\1\11\1\0\3\12\1\u0160\20\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ "\4\0\10\12\2\0\1\12\1\u0185\3\12\12\0\1\11"+ "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ "\3\12\1\363\1\12\12\0\1\11\1\0\24\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\10\12\2\0\3\12\1\u0160\1\12"+ "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ "\6\12\1\u0186\1\12\2\0\5\12\12\0\1\11\1\0"+ "\2\12\1\u0121\2\12\1\u0187\16\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\3\12"+ "\1\u013e\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\3\12\1\247\4\0\10\12\2\0"+ "\5\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\3\12"+ "\1\u0188\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\3\12\1\242\4\0\10\12\2\0"+ "\5\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\1\12"+ "\1\247\2\12\4\0\10\12\2\0\5\12\12\0\1\11"+ "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ "\5\12\12\0\1\11\1\0\2\12\1\u0189\21\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\10\12\2\0\1\12\1\u0121\3\12"+ "\12\0\1\11\1\0\24\12\1\11\1\12\1\325\5\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ "\12\0\1\11\1\0\1\u018a\23\12\3\11\5\u018b\2\0"+ "\3\11\1\u018b\1\0\1\u018b\1\0\1\11\1\0\1\11"+ "\1\u018b\2\11\4\0\1\11\2\u018b\2\11\3\u018b\2\0"+ "\1\11\2\u018b\2\11\12\0\1\11\1\0\12\11\1\u018b"+ "\4\11\1\u018b\5\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ "\5\12\12\0\1\11\1\0\4\12\1\u018c\17\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\10\12\2\0\2\12\1\u018d\2\12"+ "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ "\10\12\2\0\1\12\1\u018e\3\12\12\0\1\11\1\0"+ "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ "\12\0\1\11\1\0\2\12\1\u018f\21\12\1\11\7\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\2\12\1\u0190\2\12\12\0"+ "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\3\12\1\u0191\4\0"+ "\10\12\2\0\5\12\12\0\1\11\1\0\24\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\3\12\1\u0192\4\0\10\12\2\0\5\12\12\0"+ "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\1\u0193\4\12\12\0\1\11\1\0\24\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\3\12\1\u0194\4\0\10\12\2\0\5\12\12\0"+ "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\5\12\12\0\1\11\1\0\2\12\1\u0195\21\12"+ "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\1\161\4\12"+ "\12\0\1\11\1\0\24\12\30\0\1\u0196\62\0\1\u016b"+ "\1\u0197\5\u016b\1\u0197\2\0\3\u016b\1\0\1\u016b\1\0"+ "\1\u0197\1\0\4\u016b\1\0\1\u016b\2\u0197\10\u016b\2\u0197"+ "\5\u016b\1\0\1\u0197\1\0\1\u0197\2\0\6\u0197\24\u016b"+ "\51\0\1\u0122\11\0\1\u016a\56\0\1\u0198\62\0\1\u016e"+ "\1\u0199\5\u016e\1\u0199\2\0\3\u016e\1\0\1\u016e\1\0"+ "\1\u0199\1\0\4\u016e\1\0\1\u016e\2\u0199\10\u016e\2\u0199"+ "\5\u016e\1\0\1\u0199\1\0\1\u0199\2\0\6\u0199\24\u016e"+ "\51\0\1\u0126\11\0\1\u016d\56\0\1\u019a\62\0\1\u0171"+ "\1\u019b\5\u0171\1\u019b\2\0\3\u0171\1\0\1\u0171\1\0"+ "\1\u019b\1\0\4\u0171\1\0\1\u0171\2\u019b\10\u0171\2\u019b"+ "\5\u0171\1\0\1\u019b\1\0\1\u019b\2\0\6\u019b\24\u0171"+ "\51\0\1\u012a\11\0\1\u0170\26\0\3\11\5\u019c\2\0"+ "\3\11\1\u019c\1\0\1\u019c\1\0\1\11\1\0\1\11"+ "\1\u019c\2\11\4\0\1\11\2\u019c\2\11\3\u019c\2\0"+ "\1\11\2\u019c\2\11\12\0\1\11\1\0\12\11\1\u019c"+ "\4\11\1\u019c\5\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\7\12\1\u019d"+ "\2\0\5\12\12\0\1\11\1\0\24\12\1\11\7\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\2\12\1\u019e\21\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\2\12\1\u019f\2\12\12\0\1\11\1\0\24\12"+ "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\2\12\1\u010c"+ "\2\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ "\4\0\10\12\2\0\1\u01a0\4\12\12\0\1\11\1\0"+ "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ "\12\0\1\11\1\0\17\12\1\u01a1\4\12\1\11\7\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\4\12\1\u0135\3\12\2\0\5\12\12\0"+ "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\5\12\12\0\1\11\1\0\20\12\1\u01a2\3\12"+ "\3\314\5\u01a3\1\133\1\0\3\314\1\u01a3\1\314\1\u01a3"+ "\4\314\1\u01a3\7\314\2\u01a3\2\314\3\u01a3\3\314\2\u01a3"+ "\30\314\1\u01a3\4\314\1\u01a3\4\314\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ "\4\0\10\12\2\0\1\12\1\u01a4\3\12\12\0\1\11"+ "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ "\3\12\1\362\1\12\12\0\1\11\1\0\24\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\1\12\1\u01a5\2\12\4\0\10\12\2\0\5\12"+ "\12\0\1\11\1\0\24\12\3\154\5\u01a6\2\154\1\335"+ "\2\154\1\u01a6\1\336\1\u01a6\4\154\1\u01a6\7\154\2\u01a6"+ "\2\154\3\u01a6\3\154\2\u01a6\30\154\1\u01a6\4\154\1\u01a6"+ "\4\154\1\11\7\12\2\0\1\115\1\12\1\u01a7\1\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\5\12\12\0\1\11\1\0\24\12\3\353\5\u01a8"+ "\2\353\1\u0148\2\353\1\u01a8\1\0\1\u01a8\4\353\1\u01a8"+ "\7\353\2\u01a8\2\353\3\u01a8\3\353\2\u01a8\30\353\1\u01a8"+ "\4\353\1\u01a8\4\353\1\11\7\12\2\0\1\115\1\12"+ "\1\u01a9\1\12\1\0\1\12\1\0\1\11\1\0\4\12"+ "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\24\12"+ "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\3\12\1\247"+ "\1\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\1\12"+ "\1\u01aa\2\12\4\0\10\12\2\0\5\12\12\0\1\11"+ "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ "\1\12\1\u0187\3\12\12\0\1\11\1\0\24\12\1\11"+ "\7\12\2\0\1\115\2\12\1\242\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\2\12\1\u0159\2\12\12\0\1\11\1\0\24\12"+ "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\1\12\1\242\2\12\4\0\10\12\2\0"+ "\5\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\3\12"+ "\1\u01ab\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\24\12\3\11\5\u01ac\2\0\3\11\1\u01ac\1\0\1\u01ac"+ "\1\0\1\11\1\0\1\11\1\u01ac\2\11\4\0\1\11"+ "\2\u01ac\2\11\3\u01ac\2\0\1\11\2\u01ac\2\11\12\0"+ "\1\11\1\0\12\11\1\u01ac\4\11\1\u01ac\5\11\7\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\2\12\1\242\2\12\12\0"+ "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\1\u0101\4\12\12\0\1\11\1\0\24\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\1\12\1\u01ad\2\12\4\0\10\12\2\0\5\12"+ "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ "\2\12\1\u01ae\1\0\1\12\1\0\1\11\1\0\4\12"+ "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\24\12"+ "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ "\1\11\1\0\3\12\1\u0101\20\12\1\11\7\12\2\0"+ "\1\115\2\12\1\u01af\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ "\12\0\1\11\1\0\2\12\1\u01b0\21\12\1\11\7\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\2\12\1\u01b1\2\12\12\0"+ "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\5\12\12\0\1\11\1\0\2\12\1\u01b2\21\12"+ "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ "\1\11\1\0\5\12\1\u013e\16\12\30\0\1\u016b\111\0"+ "\1\u016e\111\0\1\u0171\61\0\3\11\5\12\2\0\3\11"+ "\1\12\1\0\1\12\1\0\1\11\1\0\1\11\1\12"+ "\2\11\4\0\1\11\2\12\2\11\3\12\2\0\1\11"+ "\2\12\2\11\12\0\1\11\1\0\12\11\1\12\4\11"+ "\1\12\5\11\1\12\1\u01b3\5\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\5\12\12\0\1\11\1\0\24\12\1\11\7\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\1\374\4\12\12\0\1\11"+ "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ "\5\12\12\0\1\11\1\0\4\12\1\u01b4\17\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ "\1\0\5\12\1\u0158\16\12\1\11\7\12\2\0\1\115"+ "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ "\10\12\2\0\5\12\12\0\1\11\1\0\20\12\1\u01b5"+ "\3\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ "\12\0\1\11\1\0\20\12\1\u01b6\3\12\3\314\5\132"+ "\1\133\1\0\3\314\1\132\1\314\1\132\4\314\1\132"+ "\7\314\2\132\2\314\3\132\3\314\2\132\30\314\1\132"+ "\4\314\1\132\4\314\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\4\12\1\247\12\0\1\11\1\0\24\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ "\1\0\1\u01b7\23\12\3\154\5\23\2\154\1\335\2\154"+ "\1\23\1\336\1\23\4\154\1\23\7\154\2\23\2\154"+ "\3\23\3\154\2\23\30\154\1\23\4\154\1\23\4\154"+ "\1\11\7\12\2\0\1\115\1\u0101\2\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ "\12\0\1\11\1\0\24\12\3\353\5\u01b8\2\353\1\u0148"+ "\2\353\1\u01b8\1\0\1\u01b8\4\353\1\u01b8\7\353\2\u01b8"+ "\2\353\3\u01b8\3\353\2\u01b8\30\353\1\u01b8\4\353\1\u01b8"+ "\4\353\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\2\12"+ "\1\u01ad\2\12\12\0\1\11\1\0\24\12\1\11\7\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\5\12\1\u01b9\16\12\3\11\5\u01ba\2\0\3\11\1\u01ba"+ "\1\0\1\u01ba\1\0\1\11\1\0\1\11\1\u01ba\2\11"+ "\4\0\1\11\2\u01ba\2\11\3\u01ba\2\0\1\11\2\u01ba"+ "\2\11\12\0\1\11\1\0\12\11\1\u01ba\4\11\1\u01ba"+ "\5\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\1\u015b\4\12"+ "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ "\2\12\1\u015c\1\0\1\12\1\0\1\11\1\0\4\12"+ "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\24\12"+ "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\2\12\1\u01bb"+ "\2\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ "\4\0\10\12\2\0\2\12\1\u01bc\2\12\12\0\1\11"+ "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\2\12\1\342"+ "\5\12\2\0\5\12\12\0\1\11\1\0\24\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\6\12\1\u0101\1\12\2\0\5\12"+ "\12\0\1\11\1\0\24\12\1\11\1\12\1\242\5\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\1\12"+ "\1\u01bd\3\12\12\0\1\11\1\0\24\12\1\11\7\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\13\12\1\u01be\10\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\5\12\12\0\1\11\1\0\23\12\1\u01bf\1\11"+ "\1\12\1\u01c0\5\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ "\12\0\1\11\1\0\24\12\3\353\5\172\2\353\1\u0148"+ "\2\353\1\172\1\0\1\172\4\353\1\172\7\353\2\172"+ "\2\353\3\172\3\353\2\172\30\353\1\172\4\353\1\172"+ "\4\353\1\11\7\12\2\0\1\115\1\12\1\u01c1\1\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\5\12\12\0\1\11\1\0\24\12\3\11\5\233"+ "\2\0\3\11\1\233\1\0\1\233\1\0\1\11\1\0"+ "\1\11\1\233\2\11\4\0\1\11\2\233\2\11\3\233"+ "\2\0\1\11\2\233\2\11\12\0\1\11\1\0\12\11"+ "\1\233\4\11\1\233\5\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\1\12\1\u0101\2\12"+ "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\24\12"+ "\1\11\7\12\2\0\1\115\1\12\1\247\1\12\1\0"+ "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ "\5\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ "\4\0\10\12\2\0\1\u01c2\4\12\12\0\1\11\1\0"+ "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ "\12\0\1\11\1\0\15\12\1\u01c3\6\12\1\11\1\12"+ "\1\u01c4\5\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\3\12\1\u01c5\4\0"+ "\10\12\2\0\5\12\12\0\1\11\1\0\24\12\1\11"+ "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ "\1\0\2\12\1\u01c6\21\12\1\11\7\12\2\0\1\115"+ "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ "\10\12\2\0\1\12\1\u01c7\3\12\12\0\1\11\1\0"+ "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ "\12\0\1\11\1\0\16\12\1\u019d\5\12\1\11\7\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\12\12\1\u01c8\11\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\1\12\1\u01c9\3\12\12\0\1\11\1\0\24\12"+ "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ "\1\11\1\0\11\12\1\u015b\12\12\1\11\7\12\2\0"+ "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\3\12"+ "\1\374\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ "\1\0\1\11\1\0\4\12\4\0\4\12\1\u0134\3\12"+ "\2\0\5\12\12\0\1\11\1\0\24\12\1\11\7\12"+ "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ "\10\12\1\u01ca\13\12\1\11\7\12\2\0\1\115\3\12"+ "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ "\2\0\1\12\1\u01cb\3\12\12\0\1\11\1\0\24\12"+ "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ "\1\11\1\0\3\12\1\213\4\0\10\12\2\0\5\12"+ "\12\0\1\11\1\0\24\12"; private static int [] zzUnpackTrans() { int [] result = new int[31154]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\10\0\6\1\1\11\4\1\1\11\5\1\1\11\14\1"+ "\2\11\2\1\1\11\11\1\1\11\4\1\1\11\5\1"+ "\1\11\3\1\1\11\3\1\1\11\1\1\1\11\1\1"+ "\1\11\17\1\1\0\36\1\1\11\3\1\1\11\31\1"+ "\1\0\21\1\3\0\1\11\4\0\1\11\1\0\2\11"+ "\4\0\13\1\1\0\7\1\1\11\21\1\1\11\16\1"+ "\1\11\62\1\14\0\15\1\1\11\10\1\1\11\6\1"+ "\1\11\36\1\1\0\1\1\2\0\1\1\2\0\1\1"+ "\1\0\43\1\6\0\60\1"; private static int [] zzUnpackAttribute() { int [] result = new int[459]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Token type specific to DTokenMaker; this signals that the user is in * a nestable multi-line comment. The nested depth is embedded in the * actual end token type. */ private static final int INTERNAL_IN_NESTABLE_MLC = -(1<<11); /** * When in a (possibly) nested MLC, this is the current nested depth. */ private int nestedMlcDepth; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public DTokenMaker() { } /** * Adds the token specified to the current linked list of tokens as an * "end token;" that is, at zzMarkedPos. * * @param tokenType The token's type. */ private void addEndToken(int tokenType) { addToken(zzMarkedPos,zzMarkedPos, tokenType); } private void addNestedMlcEndToken() { addEndToken(INTERNAL_IN_NESTABLE_MLC - nestedMlcDepth); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addHyperlinkToken(int, int, int) */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, false); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. * @param hyperlink Whether this token is a hyperlink. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset, boolean hyperlink) { super.addToken(array, start,end, tokenType, startOffset, hyperlink); zzStartRead = zzMarkedPos; } @Override public int getClosestStandardTokenTypeForInternalType(int type) { switch (type) { case INTERNAL_IN_NESTABLE_MLC: return TokenTypes.COMMENT_MULTILINE; } return type; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; nestedMlcDepth = 0; // Start off in the proper state. int state = YYINITIAL; switch (initialTokenType) { case Token.LITERAL_BACKQUOTE: state = WYSIWYG_STRING_2; break; case Token.LITERAL_STRING_DOUBLE_QUOTE: state = WYSIWYG_STRING_1; break; case Token.COMMENT_MULTILINE: state = MLC; break; case Token.COMMENT_DOCUMENTATION: state = DOCCOMMENT; break; case INTERNAL_IN_NESTABLE_MLC: state = NESTABLE_MLC; break; default: if (initialTokenType<-1024) { int main = -(-initialTokenType & 0xffffff00); switch (main) { default: // Should never happen case INTERNAL_IN_NESTABLE_MLC: state = NESTABLE_MLC; break; } nestedMlcDepth = -initialTokenType&0xff; } else { state = YYINITIAL; } } start = text.offset; s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. * @exception IOException if any I/O-Error occurs. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public DTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public DTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 188) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 14: { yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); return firstToken; } case 46: break; case 2: { addToken(Token.IDENTIFIER); } case 47: break; case 41: { addToken(Token.LITERAL_BOOLEAN); } case 48: break; case 25: { addToken(Token.ERROR_CHAR); } case 49: break; case 22: { addToken(Token.ERROR_NUMBER_FORMAT); } case 50: break; case 4: { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; } case 51: break; case 18: { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } case 52: break; case 11: { addToken(Token.ANNOTATION); } case 53: break; case 6: { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } case 54: break; case 1: { addToken(Token.ERROR_IDENTIFIER); } case 55: break; case 20: { addToken(Token.LITERAL_BACKQUOTE); } case 56: break; case 33: { nestedMlcDepth++; } case 57: break; case 37: { start = zzMarkedPos-3; yybegin(EOL_DOCCOMMENT); } case 58: break; case 43: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; } case 59: break; case 35: { addToken(Token.LITERAL_CHAR); } case 60: break; case 24: { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } case 61: break; case 28: { start = zzMarkedPos-2; yybegin(MLC); } case 62: break; case 17: { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addNullToken(); return firstToken; } case 63: break; case 7: { addToken(Token.WHITESPACE); } case 64: break; case 32: { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_DOCUMENTATION); } case 65: break; case 39: { addToken(Token.DATA_TYPE); } case 66: break; case 34: { System.out.println("... " + nestedMlcDepth); if (--nestedMlcDepth==0) { addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(YYINITIAL); } } case 67: break; case 31: { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } case 68: break; case 21: { addToken(Token.LITERAL_BACKQUOTE); yybegin(YYINITIAL); } case 69: break; case 3: { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } case 70: break; case 19: { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(YYINITIAL); } case 71: break; case 38: { start = zzMarkedPos-3; yybegin(DOCCOMMENT); } case 72: break; case 15: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addNestedMlcEndToken(); return firstToken; } case 73: break; case 30: { addToken(Token.RESERVED_WORD); } case 74: break; case 42: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } case 75: break; case 29: { start = zzMarkedPos-2; nestedMlcDepth = 1; yybegin(NESTABLE_MLC); } case 76: break; case 45: { addToken(Token.RESERVED_WORD_2); } case 77: break; case 16: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } case 78: break; case 10: { addToken(Token.SEPARATOR); } case 79: break; case 5: { addNullToken(); return firstToken; } case 80: break; case 13: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } case 81: break; case 8: { addToken(Token.LITERAL_BACKQUOTE); yybegin(WYSIWYG_STRING_2); } case 82: break; case 9: { addToken(Token.OPERATOR); } case 83: break; case 23: { addToken(Token.LITERAL_NUMBER_FLOAT); } case 84: break; case 26: { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(WYSIWYG_STRING_1); } case 85: break; case 44: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } case 86: break; case 40: { addToken(Token.COMMENT_MULTILINE); } case 87: break; case 27: { start = zzMarkedPos-2; yybegin(EOL_COMMENT); } case 88: break; case 36: { addToken(Token.ERROR_STRING_DOUBLE); } case 89: break; case 12: { } case 90: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case WYSIWYG_STRING_1: { if (firstToken==null) { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } return firstToken; } case 460: break; case EOL_COMMENT: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } case 461: break; case NESTABLE_MLC: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addNestedMlcEndToken(); return firstToken; } case 462: break; case DOCCOMMENT: { yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); return firstToken; } case 463: break; case YYINITIAL: { addNullToken(); return firstToken; } case 464: break; case MLC: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } case 465: break; case WYSIWYG_STRING_2: { if (firstToken==null) { addToken(Token.LITERAL_BACKQUOTE); } return firstToken; } case 466: break; case EOL_DOCCOMMENT: { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addNullToken(); return firstToken; } case 467: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DartTokenMaker.flex000066400000000000000000000471111257417003700314670ustar00rootroot00000000000000/* * 09/01/2014 * * DartTokenMaker.java - Token parser for Dart. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for Dart files. Its states could be simplified, but are * kept the way they are to keep a degree of similarity (i.e. copy/paste) * between it and HTML/JSP/PHPTokenMaker. This should cause no difference in * performance.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated DartTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 1.0 */ %% %public %class DartTokenMaker %extends AbstractJFlexCTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Token type specifying we're in a JavaScript multi-line comment. */ private static final int INTERNAL_IN_JS_MLC = -8; /** * Token type specifying we're in an invalid multi-line JS string. */ private static final int INTERNAL_IN_JS_STRING_INVALID = -10; /** * Token type specifying we're in a valid multi-line JS string. */ private static final int INTERNAL_IN_JS_STRING_VALID = -11; /** * Token type specifying we're in an invalid multi-line JS single-quoted string. */ private static final int INTERNAL_IN_JS_CHAR_INVALID = -12; /** * Token type specifying we're in a valid multi-line JS single-quoted string. */ private static final int INTERNAL_IN_JS_CHAR_VALID = -13; /** * When in the JS_STRING state, whether the current string is valid. */ private boolean validJSString; /** * The version of JavaScript being highlighted. */ private static String jsVersion; /** * Language state set on JS tokens. Must be 0. */ private static final int LANG_INDEX_DEFAULT = 0; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public DartTokenMaker() { super(); } static { jsVersion = "1.0"; } /** * Adds the token specified to the current linked list of tokens as an * "end token;" that is, at zzMarkedPos. * * @param tokenType The token's type. */ private void addEndToken(int tokenType) { addToken(zzMarkedPos,zzMarkedPos, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * Returns the closest {@link TokenTypes "standard" token type} for a given * "internal" token type (e.g. one whose value is < 0). */ @Override public int getClosestStandardTokenTypeForInternalType(int type) { switch (type) { case INTERNAL_IN_JS_MLC: return TokenTypes.COMMENT_MULTILINE; case INTERNAL_IN_JS_STRING_INVALID: case INTERNAL_IN_JS_STRING_VALID: case INTERNAL_IN_JS_CHAR_INVALID: case INTERNAL_IN_JS_CHAR_VALID: return TokenTypes.LITERAL_STRING_DOUBLE_QUOTE; } return type; } /** * Returns the JavaScript version being highlighted. * * @return Supported JavaScript version. * @see #isJavaScriptCompatible(String) */ public static String getJavaScriptVersion() { return jsVersion; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; validJSString = true; int languageIndex = LANG_INDEX_DEFAULT; // Start off in the proper state. int state = YYINITIAL; switch (initialTokenType) { case Token.LITERAL_STRING_DOUBLE_QUOTE: state = DART_MULTILINE_STRING_DOUBLE; break; case Token.LITERAL_CHAR: state = DART_MULTILINE_STRING_SINGLE; break; case INTERNAL_IN_JS_MLC: state = JS_MLC; break; case INTERNAL_IN_JS_STRING_INVALID: state = JS_STRING; validJSString = false; break; case INTERNAL_IN_JS_STRING_VALID: state = JS_STRING; break; case INTERNAL_IN_JS_CHAR_INVALID: state = JS_CHAR; validJSString = false; break; case INTERNAL_IN_JS_CHAR_VALID: state = JS_CHAR; break; default: state = YYINITIAL; // ??? break; } setLanguageIndex(languageIndex); start = text.offset; s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Returns whether features for a specific JS version should be honored * while highlighting. * * @param version JavaScript version required * @return Whether the JavaScript version is the same or greater than * version required. */ public static boolean isJavaScriptCompatible(String version) { return jsVersion.compareTo(version) >= 0; } /** * Set the supported JavaScript version because some keywords were * introduced on or after this version. * * @param javaScriptVersion The version of JavaScript to support, such as * "1.5" or "1.6". * @see #isJavaScriptCompatible(String) * @see #getJavaScriptVersion() */ public static void setJavaScriptVersion(String javaScriptVersion) { jsVersion = javaScriptVersion; } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} Whitespace = ([ \t\f]+) LineTerminator = ([\n]) Letter = [A-Za-z] NonzeroDigit = [1-9] Digit = ("0"|{NonzeroDigit}) HexDigit = ({Digit}|[A-Fa-f]) OctalDigit = ([0-7]) LetterOrDigit = ({Letter}|{Digit}) EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\") IdentifierStart = ({Letter}|"_"|"$") IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) JS_MLCBegin = "/*" JS_MLCEnd = "*/" JS_LineCommentBegin = "//" JS_IntegerHelper1 = (({NonzeroDigit}{Digit}*)|"0") JS_IntegerHelper2 = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) JS_IntegerLiteral = ({JS_IntegerHelper1}[lL]?) JS_HexLiteral = ({JS_IntegerHelper2}[lL]?) JS_FloatHelper1 = ([fFdD]?) JS_FloatHelper2 = ([eE][+-]?{Digit}+{JS_FloatHelper1}) JS_FloatLiteral1 = ({Digit}+"."({JS_FloatHelper1}|{JS_FloatHelper2}|{Digit}+({JS_FloatHelper1}|{JS_FloatHelper2}))) JS_FloatLiteral2 = ("."{Digit}+({JS_FloatHelper1}|{JS_FloatHelper2})) JS_FloatLiteral3 = ({Digit}+{JS_FloatHelper2}) JS_FloatLiteral = ({JS_FloatLiteral1}|{JS_FloatLiteral2}|{JS_FloatLiteral3}|({Digit}+[fFdD])) JS_ErrorNumberFormat = (({JS_IntegerLiteral}|{JS_HexLiteral}|{JS_FloatLiteral}){NonSeparator}+) JS_Separator = ([\(\)\{\}\[\]\]]) JS_Separator2 = ([\;,.]) JS_NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"||"|"&&"|">>>") JS_AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") JS_Operator = ({JS_NonAssignmentOperator}|{JS_AssignmentOperator}) JS_Identifier = ({IdentifierStart}{IdentifierPart}*) JS_ErrorIdentifier = ({NonSeparator}+) DART_Annotation = ("@"{Letter}{LetterOrDigit}*) URLGenDelim = ([:\/\?#\[\]@]) URLSubDelim = ([\!\$&'\(\)\*\+,;=]) URLUnreserved = ({LetterOrDigit}|"_"|[\-\.\~]) URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) URLCharacters = ({URLCharacter}*) URLEndCharacter = ([\/\$]|{LetterOrDigit}) URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) %state JS_STRING %state JS_CHAR %state JS_MLC %state JS_EOL_COMMENT %state DART_MULTILINE_STRING_DOUBLE %state DART_MULTILINE_STRING_SINGLE %% { // Keywords "abstract" | "assert" | "class" | "const" | "extends" | "factory" | "get" | "implements" | "import" | "interface" | "library" | "negate" | "new" | "null" | "operator" | "set" | "source" | "static" | "super" | "this" | "typedef" | "var" | "final" | "if" | "else" | "for" | "in" | "is" | "while" | "do" | "switch" | "case" | "default" | "in" | "try" | "catch" | "finally" | "break" | "continue" | "throw" | "assert" { addToken(Token.RESERVED_WORD); } "return" { addToken(Token.RESERVED_WORD_2); } // Literals. "false" | "true" { addToken(Token.LITERAL_BOOLEAN); } "NaN" { addToken(Token.RESERVED_WORD); } "Infinity" { addToken(Token.RESERVED_WORD); } // Data types "bool" | "int" | "double" | "num" | "void" { addToken(Token.DATA_TYPE); } // stdlib types "AssertionError" | "Clock" | "Collection" | "Comparable" | "Date" | "Dispatcher" | "Duration" | "Expect" | "FallThroughError" | "Function" | "HashMap" | "HashSet" | "Hashable" | "Isolate" | "Iterable" | "Iterator" | "LinkedHashMap" | "List" | "Map" | "Match" | "Math" | "Object" | "Pattern" | "Promise" | "Proxy" | "Queue" | "ReceivePort" | "RegExp" | "SendPort" | "Set" | "StopWatch" | "String" | "StringBuffer" | "Strings" | "TimeZone" | "TypeError" | // stdlib exceptions "BadNumberFormatException" | "ClosureArgumentMismatchException" | "EmptyQueueException" | "Exception" | "ExpectException" | "IllegalAccessException" | "IllegalArgumentException" | "IllegalJSRegExpException" | "IndexOutOfRangeException" | "IntegerDivisionByZeroException" | "NoMoreElementsException" | "NoSuchMethodException" | "NotImplementedException" | "NullPointerException" | "ObjectNotClosureException" | "OutOfMemoryException" | "StackOverflowException" | "UnsupportedOperationException" | "WrongArgumentCountException" { addToken(Token.FUNCTION); } {LineTerminator} { addNullToken(); return firstToken; } {JS_Identifier} { addToken(Token.IDENTIFIER); } {Whitespace} { addToken(Token.WHITESPACE); } /* Multi-line string literals. */ \"\"\" { start = zzMarkedPos-3; yybegin(DART_MULTILINE_STRING_DOUBLE); } \'\'\' { start = zzMarkedPos-3; yybegin(DART_MULTILINE_STRING_SINGLE); } /* String/Character literals. */ [\'] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); } [\"] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); } {DART_Annotation} { addToken(Token.ANNOTATION); } /* Comment literals. */ "/**/" { addToken(Token.COMMENT_MULTILINE); } {JS_MLCBegin} { start = zzMarkedPos-2; yybegin(JS_MLC); } {JS_LineCommentBegin} { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); } /* Deprecated stuff */ "#library" | "#import" | "#source" | "#resource" { addToken(Token.RESERVED_WORD); } /* Separators. */ {JS_Separator} { addToken(Token.SEPARATOR); } {JS_Separator2} { addToken(Token.IDENTIFIER); } /* Operators. */ {JS_Operator} { addToken(Token.OPERATOR); } /* Numbers */ {JS_IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {JS_HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } {JS_FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } {JS_ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } {JS_ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } /* Ended with a line not in a string or comment. */ <> { addNullToken(); return firstToken; } /* Catch any other (unhandled) characters and flag them as bad. */ . { addToken(Token.ERROR_IDENTIFIER); } } { [^\"\\\n]* {} \\.? { /* Skip escaped chars, handles case: '\"""'. */ } \"\"\" { addToken(start,zzStartRead+2, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(YYINITIAL); } \" {} \n | <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } } { [^\'\\\n]* {} \\.? { /* Skip escaped chars, handles case: "\'''". */ } \'\'\' { addToken(start,zzStartRead+2, Token.LITERAL_CHAR); yybegin(YYINITIAL); } \' {} \n | <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } } { [^\n\\\"]+ {} \\x{HexDigit}{2} {} \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } \\u{HexDigit}{4} {} \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } \\. { /* Skip all escaped chars. */ } \\ { /* Line ending in '\' => continue to next line. */ if (validJSString) { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_IN_JS_STRING_VALID); } else { addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS_STRING_INVALID); } return firstToken; } \" { int type = validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(YYINITIAL); } \n | <> { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } } { [^\n\\\']+ {} \\x{HexDigit}{2} {} \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } \\u{HexDigit}{4} {} \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } \\. { /* Skip all escaped chars. */ } \\ { /* Line ending in '\' => continue to next line. */ if (validJSString) { addToken(start,zzStartRead, Token.LITERAL_CHAR); addEndToken(INTERNAL_IN_JS_CHAR_VALID); } else { addToken(start,zzStartRead, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS_CHAR_INVALID); } return firstToken; } \' { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(YYINITIAL); } \n | <> { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addNullToken(); return firstToken; } } { // JavaScript MLC's. This state is essentially Java's MLC state. [^hwf\n\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } [hwf] {} {JS_MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } \* {} \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } } { [^hwf\n]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } [hwf] {} \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DartTokenMaker.java000066400000000000000000002602341257417003700314550ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 6/21/15 7:25 PM */ /* * 09/01/2014 * * DartTokenMaker.java - Token parser for Dart. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for Dart files. Its states could be simplified, but are * kept the way they are to keep a degree of similarity (i.e. copy/paste) * between it and HTML/JSP/PHPTokenMaker. This should cause no difference in * performance.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated DartTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 1.0 */ public class DartTokenMaker extends AbstractJFlexCTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int JS_STRING = 1; public static final int JS_CHAR = 2; public static final int DART_MULTILINE_STRING_DOUBLE = 5; public static final int JS_EOL_COMMENT = 4; public static final int YYINITIAL = 0; public static final int JS_MLC = 3; public static final int DART_MULTILINE_STRING_SINGLE = 6; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\1\1\2\1\0\1\1\1\11\22\0\1\1\1\35\1\115"+ "\1\12\1\15\1\35\1\37\1\44\2\43\1\17\1\30\1\27\1\24"+ "\1\25\1\16\1\5\7\7\2\4\1\40\1\27\1\31\1\32\1\34"+ "\1\36\1\42\1\75\1\6\1\76\1\77\1\23\1\22\1\3\1\101"+ "\1\74\1\113\1\3\1\21\1\102\1\73\1\104\1\106\1\107\1\110"+ "\1\103\1\100\1\114\1\3\1\111\1\20\1\3\1\112\1\43\1\13"+ "\1\43\1\33\1\14\1\0\1\56\1\57\1\61\1\65\1\54\1\51"+ "\1\67\1\45\1\52\1\105\1\72\1\53\1\70\1\63\1\62\1\47"+ "\1\3\1\60\1\50\1\46\1\10\1\71\1\55\1\64\1\66\1\3"+ "\1\26\1\41\1\26\1\36\uff81\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\5\0\2\1\1\2\1\3\1\4\1\5\2\6\1\5"+ "\2\2\2\7\3\5\1\7\1\5\1\10\1\5\5\7"+ "\2\2\1\11\37\5\1\12\1\1\1\13\1\14\1\15"+ "\1\1\1\16\1\17\1\20\1\1\1\21\5\1\1\22"+ "\3\1\1\23\1\24\1\1\1\25\1\26\1\1\1\2"+ "\1\27\1\6\1\30\1\27\1\30\1\27\1\31\1\27"+ "\1\5\4\2\1\32\1\33\5\5\1\0\1\7\1\34"+ "\1\0\13\5\2\35\21\5\1\35\34\5\1\0\1\36"+ "\1\37\1\40\1\41\10\0\1\24\1\0\1\26\1\0"+ "\1\2\1\30\1\0\2\31\1\5\4\2\1\0\7\5"+ "\1\42\13\5\1\43\17\5\1\43\31\5\1\44\15\5"+ "\1\45\12\0\1\46\1\47\1\2\1\5\3\2\1\50"+ "\7\5\1\51\64\5\1\0\1\1\2\0\1\52\2\0"+ "\1\53\1\2\1\5\3\2\7\5\1\35\50\5\4\0"+ "\1\2\1\5\3\2\3\5\1\44\6\5\1\54\23\5"+ "\1\44\3\5\1\44\5\5\1\35\1\2\224\5"; private static int [] zzUnpackAction() { int [] result = new int[616]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\116\0\234\0\352\0\u0138\0\u0186\0\u01d4\0\u0222"+ "\0\u0270\0\u02be\0\u030c\0\u035a\0\u03a8\0\u03f6\0\u02be\0\u0444"+ "\0\u0492\0\u04e0\0\u052e\0\u057c\0\u05ca\0\u0618\0\u0666\0\u02be"+ "\0\u02be\0\u06b4\0\u0702\0\u0750\0\u02be\0\u079e\0\u07ec\0\u083a"+ "\0\u0888\0\u08d6\0\u0924\0\u0972\0\u09c0\0\u0a0e\0\u0a5c\0\u0aaa"+ "\0\u0af8\0\u0b46\0\u0b94\0\u0be2\0\u0c30\0\u0c7e\0\u0ccc\0\u0d1a"+ "\0\u0d68\0\u0db6\0\u0e04\0\u0e52\0\u0ea0\0\u0eee\0\u0f3c\0\u0f8a"+ "\0\u0fd8\0\u1026\0\u1074\0\u10c2\0\u1110\0\u115e\0\u11ac\0\u11fa"+ "\0\u1248\0\u1296\0\u02be\0\u12e4\0\u02be\0\u1332\0\u02be\0\u12e4"+ "\0\u02be\0\u1380\0\u02be\0\u13ce\0\u141c\0\u146a\0\u14b8\0\u1506"+ "\0\u02be\0\u1554\0\u15a2\0\u15f0\0\u02be\0\u163e\0\u168c\0\u02be"+ "\0\u16da\0\u1728\0\u1776\0\u17c4\0\u17c4\0\u17c4\0\u1812\0\u1860"+ "\0\u18ae\0\u18fc\0\u194a\0\u1998\0\u19e6\0\u1a34\0\u1a82\0\u1ad0"+ "\0\u02be\0\u1b1e\0\u1b6c\0\u1bba\0\u1c08\0\u1c56\0\u1ca4\0\u04e0"+ "\0\u1cf2\0\u1d40\0\u1d8e\0\u1ddc\0\u1e2a\0\u1e78\0\u1ec6\0\u1f14"+ "\0\u1f62\0\u1fb0\0\u1ffe\0\u204c\0\u209a\0\u20e8\0\u030c\0\u2136"+ "\0\u2184\0\u21d2\0\u2220\0\u226e\0\u22bc\0\u230a\0\u2358\0\u23a6"+ "\0\u23f4\0\u2442\0\u2490\0\u24de\0\u252c\0\u257a\0\u25c8\0\u2616"+ "\0\u2664\0\u26b2\0\u2700\0\u274e\0\u279c\0\u27ea\0\u2838\0\u2886"+ "\0\u28d4\0\u2922\0\u2970\0\u29be\0\u2a0c\0\u2a5a\0\u2aa8\0\u2af6"+ "\0\u2b44\0\u2b92\0\u2be0\0\u2c2e\0\u2c7c\0\u2cca\0\u2d18\0\u2d66"+ "\0\u2db4\0\u2e02\0\u2e50\0\u2e9e\0\u2eec\0\u2f3a\0\u2f88\0\u02be"+ "\0\u2fd6\0\u3024\0\u02be\0\u3072\0\u30c0\0\u310e\0\u315c\0\u31aa"+ "\0\u31f8\0\u3246\0\u3294\0\u02be\0\u32e2\0\u02be\0\u3330\0\u337e"+ "\0\u33cc\0\u341a\0\u17c4\0\u3468\0\u34b6\0\u3504\0\u3552\0\u35a0"+ "\0\u35ee\0\u363c\0\u368a\0\u36d8\0\u3726\0\u3774\0\u37c2\0\u3810"+ "\0\u385e\0\u02be\0\u38ac\0\u38fa\0\u3948\0\u3996\0\u39e4\0\u3a32"+ "\0\u3a80\0\u3ace\0\u3b1c\0\u3b6a\0\u3bb8\0\u3c06\0\u3c54\0\u3ca2"+ "\0\u3cf0\0\u3d3e\0\u3d8c\0\u3dda\0\u3e28\0\u3e76\0\u3ec4\0\u3f12"+ "\0\u3f60\0\u3fae\0\u3ffc\0\u404a\0\u4098\0\u030c\0\u40e6\0\u4134"+ "\0\u4182\0\u41d0\0\u421e\0\u426c\0\u42ba\0\u4308\0\u4356\0\u43a4"+ "\0\u43f2\0\u4440\0\u448e\0\u44dc\0\u452a\0\u4578\0\u45c6\0\u4614"+ "\0\u4662\0\u46b0\0\u46fe\0\u474c\0\u479a\0\u47e8\0\u4836\0\u030c"+ "\0\u4884\0\u48d2\0\u4920\0\u496e\0\u49bc\0\u4a0a\0\u4a58\0\u4aa6"+ "\0\u4af4\0\u4b42\0\u4b90\0\u4bde\0\u4c2c\0\u02be\0\u4c7a\0\u4cc8"+ "\0\u4d16\0\u4d64\0\u4db2\0\u4e00\0\u4e4e\0\u4e9c\0\u4eea\0\u4f38"+ "\0\u02be\0\u02be\0\u4f86\0\u4fd4\0\u5022\0\u5070\0\u50be\0\u02be"+ "\0\u510c\0\u515a\0\u51a8\0\u51f6\0\u5244\0\u5292\0\u52e0\0\u030c"+ "\0\u532e\0\u537c\0\u53ca\0\u5418\0\u5466\0\u54b4\0\u5502\0\u5550"+ "\0\u559e\0\u55ec\0\u563a\0\u5688\0\u56d6\0\u5724\0\u5772\0\u57c0"+ "\0\u580e\0\u585c\0\u58aa\0\u58f8\0\u5946\0\u5994\0\u59e2\0\u5a30"+ "\0\u5a7e\0\u5acc\0\u5b1a\0\u5b68\0\u5bb6\0\u5c04\0\u5c52\0\u5ca0"+ "\0\u5cee\0\u5d3c\0\u5d8a\0\u5dd8\0\u5e26\0\u5e74\0\u5ec2\0\u5f10"+ "\0\u5f5e\0\u5fac\0\u5ffa\0\u6048\0\u6096\0\u60e4\0\u6132\0\u6180"+ "\0\u61ce\0\u621c\0\u626a\0\u62b8\0\u3024\0\u02be\0\u6306\0\u6354"+ "\0\u63a2\0\u63f0\0\u643e\0\u648c\0\u64da\0\u6528\0\u6576\0\u65c4"+ "\0\u6612\0\u6660\0\u66ae\0\u66fc\0\u674a\0\u6798\0\u67e6\0\u6834"+ "\0\u6882\0\u68d0\0\u691e\0\u696c\0\u69ba\0\u6a08\0\u6a56\0\u6aa4"+ "\0\u6af2\0\u6b40\0\u6b8e\0\u6bdc\0\u6c2a\0\u6c78\0\u6cc6\0\u6d14"+ "\0\u6d62\0\u6db0\0\u6dfe\0\u6e4c\0\u6e9a\0\u6ee8\0\u6f36\0\u6f84"+ "\0\u6fd2\0\u7020\0\u706e\0\u70bc\0\u710a\0\u7158\0\u71a6\0\u71f4"+ "\0\u7242\0\u7290\0\u72de\0\u732c\0\u737a\0\u73c8\0\u7416\0\u7464"+ "\0\u74b2\0\u7500\0\u63a2\0\u754e\0\u648c\0\u759c\0\u75ea\0\u7638"+ "\0\u7686\0\u76d4\0\u7722\0\u7770\0\u77be\0\u780c\0\u785a\0\u78a8"+ "\0\u78f6\0\u7944\0\u7992\0\u79e0\0\u030c\0\u7a2e\0\u7a7c\0\u7aca"+ "\0\u7b18\0\u7b66\0\u7bb4\0\u7c02\0\u7c50\0\u7c9e\0\u7cec\0\u7d3a"+ "\0\u7d88\0\u7dd6\0\u7e24\0\u7e72\0\u7ec0\0\u7f0e\0\u7f5c\0\u7faa"+ "\0\u7ff8\0\u8046\0\u8094\0\u80e2\0\u8130\0\u817e\0\u81cc\0\u821a"+ "\0\u8268\0\u82b6\0\u0222\0\u8304\0\u8352\0\u83a0\0\u83ee\0\u843c"+ "\0\u848a\0\u84d8\0\u8526\0\u8574\0\u85c2\0\u8610\0\u865e\0\u86ac"+ "\0\u86fa\0\u8748\0\u8796\0\u87e4\0\u8832\0\u8880\0\u88ce\0\u891c"+ "\0\u896a\0\u89b8\0\u8a06\0\u8a54\0\u8aa2\0\u8af0\0\u8b3e\0\u8b8c"+ "\0\u8bda\0\u8c28\0\u8c76\0\u8cc4\0\u8d12\0\u8d60\0\u8dae\0\u8dfc"+ "\0\u8e4a\0\u8e98\0\u8ee6\0\u8f34\0\u8f82\0\u8fd0\0\u901e\0\u906c"+ "\0\u90ba\0\u9108\0\u9156\0\u91a4\0\u91f2\0\u9240\0\u928e\0\u92dc"+ "\0\u932a\0\u9378\0\u93c6\0\u9414\0\u9462\0\u94b0\0\u94fe\0\u954c"+ "\0\u959a\0\u95e8\0\u9636\0\u9684\0\u96d2\0\u9720\0\u976e\0\u97bc"+ "\0\u980a\0\u780c\0\u9858\0\u98a6\0\u98f4\0\u9942\0\u9990\0\u99de"+ "\0\u9a2c\0\u9a7a\0\u9ac8\0\u9b16\0\u9b64\0\u9bb2\0\u9c00\0\u9c4e"+ "\0\u9c9c\0\u9cea\0\u9d38\0\u9d86\0\u9dd4\0\u9e22\0\u9e70\0\u9ebe"+ "\0\u9f0c\0\u9f5a\0\u9fa8\0\u9ff6\0\ua044\0\ua092\0\ua0e0\0\ua12e"+ "\0\ua17c\0\ua1ca\0\ua218\0\ua266\0\ua2b4\0\ua302\0\ua350\0\ua39e"+ "\0\ua3ec\0\ua43a\0\ua488\0\ua4d6\0\ua524\0\ua572\0\ua5c0\0\ua60e"+ "\0\ua65c\0\ua6aa\0\ua6f8\0\ua746\0\ua794\0\ua7e2\0\ua830\0\ua87e"+ "\0\ua8cc\0\ua91a\0\ua968\0\ua9b6\0\uaa04\0\uaa52\0\uaaa0\0\uaaee"+ "\0\uab3c\0\uab8a\0\uabd8\0\uac26\0\uac74\0\uacc2\0\uad10\0\uad5e"+ "\0\uadac\0\uadfa\0\uae48\0\uae96\0\uaee4\0\uaf32\0\uaf80\0\uafce"; private static int [] zzUnpackRowMap() { int [] result = new int[616]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\14"+ "\1\13\1\17\1\20\1\10\2\13\1\21\1\22\1\13"+ "\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1\32"+ "\1\33\2\22\1\34\1\22\1\35\1\36\1\35\1\37"+ "\1\40\1\30\1\41\1\13\1\42\1\13\1\43\1\44"+ "\1\45\1\46\1\47\1\50\1\51\1\52\1\53\1\54"+ "\1\55\1\56\1\13\1\57\1\13\1\60\1\13\1\61"+ "\1\13\1\62\1\63\1\64\1\65\1\66\1\67\1\70"+ "\1\71\1\72\1\73\1\13\1\74\1\75\1\76\1\77"+ "\2\13\1\100\1\101\2\102\1\103\10\102\1\104\101\102"+ "\1\105\2\106\1\107\10\106\1\110\30\106\1\111\51\106"+ "\2\112\1\113\14\112\1\114\25\112\1\115\3\112\1\116"+ "\3\112\1\117\40\112\2\120\1\121\42\120\1\122\3\120"+ "\1\123\3\120\1\124\40\120\2\102\1\125\10\102\1\126"+ "\101\102\1\127\2\106\1\130\10\106\1\131\30\106\1\132"+ "\51\106\1\10\2\0\6\10\1\0\4\10\2\0\4\10"+ "\16\0\1\10\2\0\50\10\2\0\1\11\232\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\50\13\1\0\1\134\2\0\1\134"+ "\2\14\1\134\1\14\1\134\1\0\4\134\2\0\1\134"+ "\1\135\1\136\1\137\1\0\1\140\14\0\1\134\2\0"+ "\4\134\1\136\1\134\1\135\1\137\10\134\1\136\11\134"+ "\1\136\15\134\1\0\1\134\2\0\1\134\1\141\1\142"+ "\1\134\1\142\1\134\1\0\4\134\2\0\1\143\1\135"+ "\1\136\1\137\1\0\1\140\14\0\1\134\2\0\4\134"+ "\1\136\1\134\1\135\1\137\7\134\1\143\1\136\11\134"+ "\1\136\15\134\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\11\13"+ "\1\144\36\13\1\0\1\10\2\0\6\10\1\0\4\10"+ "\2\0\4\10\16\0\1\10\2\0\3\10\1\145\1\10"+ "\1\146\1\147\4\10\1\150\34\10\17\0\1\151\1\152"+ "\12\0\1\35\115\0\1\35\63\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\5\13\1\153\42\13\1\0\1\10\2\0\5\13"+ "\1\154\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\11\13\1\155\36\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\17\13\1\156\3\13\1\157\24\13\25\0"+ "\1\35\5\0\1\35\67\0\2\140\1\0\1\140\136\0"+ "\1\35\1\0\1\35\114\0\1\160\1\35\115\0\1\35"+ "\1\0\1\161\113\0\1\35\4\0\1\35\110\0\1\35"+ "\6\0\1\35\54\0\1\10\2\0\1\162\2\10\1\162"+ "\1\10\1\162\1\0\4\10\2\0\4\162\16\0\1\10"+ "\2\0\50\162\45\0\1\163\51\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\1\164\12\13\1\165\5\13\1\166\26\13\1\0"+ "\1\10\2\0\5\13\1\167\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\1\13\1\170\5\13"+ "\1\171\1\172\4\13\1\173\32\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\5\13\1\174\3\13\1\175\3\13\1\176"+ "\32\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\3\13\2\177"+ "\11\13\1\200\4\13\1\201\24\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\5\13\1\202\42\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\6\13\1\203\10\13\1\204\30\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\1\205\47\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\3\13\1\206\6\13\1\207\35\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\13\13\1\210\1\13"+ "\1\211\32\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\7\13"+ "\1\212\40\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\6\13"+ "\1\213\2\13\1\214\3\13\1\215\32\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\2\13\1\216\45\13\1\0\1\10"+ "\2\0\5\13\1\217\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\7\13\1\220\40\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\7\13\1\221\5\13\1\222"+ "\32\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\171"+ "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\11\13\1\176"+ "\3\13\1\223\32\13\1\0\1\10\2\0\5\13\1\224"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\11\13\1\225\3\13\1\226\32\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\1\13\1\227\1\13\1\230\2\13"+ "\1\231\7\13\1\232\31\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\3\13\1\233\44\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\6\13\1\234\6\13\1\235\32\13\1\0\1\10"+ "\2\0\5\13\1\236\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\5\13\1\237\3\13\1\240"+ "\36\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\5\13\1\241"+ "\13\13\1\242\26\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\11\13\1\243\36\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\11\13\1\244\36\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\1\13\1\245\5\13\1\246\40\13\1\0\1\10\2\0"+ "\5\13\1\247\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\12\13\1\250\35\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\11\13\1\251\1\13\1\252\34\13"+ "\1\0\1\10\2\0\5\13\1\253\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\50\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\7\13\1\254\40\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\13\13\1\255\34\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\16\13\1\256\31\13\116\0"+ "\1\257\2\102\1\0\10\102\1\0\101\102\1\0\2\260"+ "\1\0\5\260\1\261\53\260\1\262\31\260\2\106\1\0"+ "\10\106\1\0\30\106\1\0\51\106\2\112\1\0\14\112"+ "\1\0\25\112\1\0\3\112\1\0\3\112\1\0\40\112"+ "\16\0\1\263\145\0\1\264\115\0\1\265\3\0\1\266"+ "\120\0\1\267\40\0\2\120\1\0\42\120\1\0\3\120"+ "\1\0\3\120\1\0\40\120\46\0\1\270\115\0\1\271"+ "\3\0\1\272\120\0\1\273\40\0\2\274\1\0\113\274"+ "\115\0\1\275\2\276\1\0\113\276\44\0\1\277\51\0"+ "\1\10\2\0\5\10\1\300\1\0\4\10\2\0\4\10"+ "\16\0\1\10\2\0\50\10\1\0\1\134\2\0\6\134"+ "\1\0\4\134\2\0\4\134\16\0\1\134\2\0\50\134"+ "\1\0\1\134\2\0\1\134\2\301\1\134\1\301\1\134"+ "\1\0\4\134\2\0\4\134\1\302\3\0\1\302\11\0"+ "\1\134\2\0\50\134\1\0\1\134\2\0\1\134\2\140"+ "\1\134\1\140\1\134\1\0\4\134\2\0\2\134\1\136"+ "\1\137\16\0\1\134\2\0\4\134\1\136\2\134\1\137"+ "\10\134\1\136\11\134\1\136\15\134\1\0\1\134\2\0"+ "\1\134\2\141\1\134\1\141\1\134\1\0\4\134\2\0"+ "\2\134\1\136\1\137\1\0\1\140\14\0\1\134\2\0"+ "\4\134\1\136\2\134\1\137\10\134\1\136\11\134\1\136"+ "\15\134\1\0\1\134\2\0\1\134\1\141\1\142\1\134"+ "\1\142\1\134\1\0\4\134\2\0\1\134\1\303\1\136"+ "\1\137\1\0\1\140\14\0\1\134\2\0\4\134\1\136"+ "\1\134\1\303\1\137\10\134\1\136\11\134\1\136\15\134"+ "\1\0\1\134\2\0\1\134\4\304\1\134\1\0\4\134"+ "\2\0\2\134\2\304\16\0\1\134\2\0\4\134\1\304"+ "\2\134\1\304\1\134\2\304\1\134\1\304\3\134\1\304"+ "\7\134\3\304\15\134\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\20\13\1\305\27\13\1\0\1\10\2\0\6\10\1\0"+ "\4\10\2\0\4\10\16\0\1\10\2\0\15\10\1\306"+ "\32\10\1\0\1\10\2\0\6\10\1\0\4\10\2\0"+ "\4\10\16\0\1\10\2\0\23\10\1\307\24\10\1\0"+ "\1\10\2\0\6\10\1\0\4\10\2\0\4\10\16\0"+ "\1\10\2\0\5\10\1\310\42\10\1\0\1\10\2\0"+ "\6\10\1\0\4\10\2\0\4\10\16\0\1\10\2\0"+ "\7\10\1\311\40\10\20\0\1\312\76\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\3\13\1\313\12\13\1\314\31\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\16\13\1\315\31\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\6\13\1\316\41\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\2\13\1\317\11\13\1\320"+ "\33\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\2\13\1\321"+ "\45\13\33\0\1\35\1\0\1\22\61\0\1\10\2\0"+ "\6\162\1\0\4\10\2\0\4\162\16\0\1\10\2\0"+ "\50\162\45\0\1\322\51\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\5\13\1\323\5\13\1\324\34\13\1\0\1\10\2\0"+ "\5\13\1\325\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\21\13\1\177\26\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\2\13\1\326\45\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\2\13\1\327\45\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\11\13\1\330\36\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\1\13\1\177\46\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\5\13\1\331\42\13\1\0\1\10"+ "\2\0\5\13\1\332\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\50\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\16\13\1\333\31\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\6\13\1\334\5\13\1\335\33\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\13\13\1\177\34\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\1\13\1\336\46\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\2\13\1\337\45\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\12\13\1\340\35\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\3\13\1\341\44\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\1\13\1\342\46\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\5\13\1\343\42\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\3\13\1\344\44\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\3\13\1\345\44\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\7\13\1\346\40\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\15\13\1\347\32\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\1\13\1\350\46\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\11\13\1\351\36\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\1\13\1\352\1\13\1\341"+ "\44\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\16\13\1\353"+ "\31\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\354"+ "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\6\13\1\355"+ "\14\13\1\356\24\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\10\13\1\177\11\13\1\357\25\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\4\13\1\360\43\13\1\0\1\10\2\0"+ "\5\13\1\361\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\50\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\5\13\1\362\42\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\6\13\1\363\41\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\26\13\1\177\21\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\1\13\1\364\33\13\1\365\1\366\11\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\7\13\1\367\40\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\15\13\1\370\32\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\6\13\1\371\41\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\1\13\1\372\2\13\1\373"+ "\13\13\1\374\27\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\3\13\1\375\44\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\15\13\1\376\32\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\6\13\1\377\14\13\1\u0100\24\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\13\13\1\u0101\34\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\3\13\1\u0102\44\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\1\13\1\u0103\46\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\23\13\1\u0104\24\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\2\13\1\u0105\45\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\3\13\1\u0106\44\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\1\13\1\u0107\1\u0108\45\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\11\13\1\u0109\1\13\1\u010a\1\13"+ "\1\u010b\32\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\1\13"+ "\1\u0108\14\13\1\u010c\31\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\1\13\1\u010d\46\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\40\13\1\u010e\7\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\1\13\1\u010f\46\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\15\13\1\u0110\32\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\7\13\1\u0111\40\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\14\13\1\u0112\5\13\1\u0113\25\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\15\13\1\u0114\32\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\3\13\1\u0115\44\13\116\0\1\u0116"+ "\4\0\4\u0117\12\0\2\u0117\25\0\1\u0117\2\0\1\u0117"+ "\1\0\2\u0117\1\0\1\u0117\3\0\1\u0117\7\0\3\u0117"+ "\22\0\4\u0118\12\0\2\u0118\25\0\1\u0118\2\0\1\u0118"+ "\1\0\2\u0118\1\0\1\u0118\3\0\1\u0118\7\0\3\u0118"+ "\64\0\1\u0119\116\0\1\u011a\121\0\1\u011b\117\0\1\u011c"+ "\106\0\1\u011d\116\0\1\u011e\121\0\1\u011f\117\0\1\u0120"+ "\155\0\1\u0121\44\0\1\u0122\51\0\1\10\2\0\1\10"+ "\4\u0123\1\10\1\0\4\10\2\0\2\10\2\u0123\16\0"+ "\1\10\2\0\4\10\1\u0123\2\10\1\u0123\1\10\2\u0123"+ "\1\10\1\u0123\3\10\1\u0123\7\10\3\u0123\15\10\1\0"+ "\1\134\2\0\1\134\2\301\1\134\1\301\1\134\1\0"+ "\4\134\2\0\2\134\1\136\1\134\16\0\1\134\2\0"+ "\4\134\1\136\13\134\1\136\11\134\1\136\15\134\5\0"+ "\2\301\1\0\1\301\106\0\1\134\2\0\1\134\4\304"+ "\1\134\1\0\4\134\2\0\1\134\1\303\2\304\16\0"+ "\1\134\2\0\4\134\1\304\1\134\1\303\1\304\1\134"+ "\2\304\1\134\1\304\3\134\1\304\7\134\3\304\15\134"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\26\13\1\u0124\21\13"+ "\1\0\1\10\2\0\5\10\1\u0125\1\0\4\10\2\0"+ "\4\10\16\0\1\10\2\0\50\10\1\0\1\10\2\0"+ "\6\10\1\0\4\10\2\0\4\10\16\0\1\10\2\0"+ "\2\10\1\u0126\45\10\1\0\1\10\2\0\6\10\1\0"+ "\4\10\2\0\4\10\16\0\1\10\2\0\12\10\1\u0127"+ "\35\10\1\0\1\10\2\0\6\10\1\0\4\10\2\0"+ "\4\10\16\0\1\10\2\0\3\10\1\145\44\10\17\0"+ "\1\u0128\77\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\1\13\1\u0108"+ "\46\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\25\13\1\u0129"+ "\22\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\14\13\1\u012a"+ "\33\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\6\13\1\u012b"+ "\41\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u012c"+ "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u012d"+ "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\1\13\1\u012e"+ "\46\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\3\13\1\177"+ "\44\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\15\13\1\u012f"+ "\32\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u0130"+ "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u0131"+ "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\176"+ "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\1\13\1\u0132"+ "\46\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\1\13\1\352"+ "\46\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\13\13\1\u0133"+ "\34\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\11\13\1\u0134"+ "\36\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\3\13\1\325"+ "\44\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\1\13\1\u0135"+ "\46\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u0136"+ "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\6\13\1\u0137"+ "\6\13\1\u0138\32\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\13\13\1\u0139\34\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\7\13\1\177\40\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\7\13\1\u013a\40\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\6\13\1\341\41\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\7\13\1\u0138\40\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\1\13\1\u013b\46\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\11\13\1\u013c\36\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\6\13\1\356\41\13\1\0\1\10\2\0\5\13\1\u013d"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\50\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\3\13"+ "\1\323\44\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\14\13"+ "\1\u013e\33\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\1\13"+ "\1\u013f\1\13\1\171\44\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\13\13\1\u0140\34\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\6\13\1\177\41\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\11\13\1\u0141\36\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\11\13\1\u0142\36\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\12\13\1\u0143\35\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\20\13\1\356\27\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\6\13\1\u0144\41\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\27\13\1\u0145\20\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\15\13\1\u0146\32\13\1\0\1\10\2\0\5\13"+ "\1\u0147\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\50\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\13\13\1\u0148\34\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\6\13\1\u0149\41\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\7\13\1\u014a\40\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\7\13\1\u014b\40\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\5\13\1\u014c\42\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\7\13\1\u014d\40\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\7\13\1\u014e\40\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\3\13\1\u014f\10\13\1\u0150\33\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\6\13\1\u0151\41\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\2\13\1\u0152\45\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\11\13\1\u012a\36\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\2\13\1\u0153\45\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\7\13\1\u0108\40\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\7\13\1\u0154\40\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\7\13\1\u0155\40\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\1\u0156\47\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\1\u0108\13\13\1\u0157\33\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\14\13\1\u0158\33\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\5\13\1\u0159\42\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\2\13\1\u015a\45\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\20\13\1\u015b\27\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\37\13\1\u015c\10\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\7\13\1\u015d\40\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\1\13\1\u015e\46\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\17\13\1\u015f\3\13\1\u0160\24\13\1\0"+ "\1\10\2\0\5\13\1\u0103\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\50\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\7\13\1\u0161\40\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\3\13"+ "\1\u0162\16\0\1\10\2\0\50\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\16\13\1\u0163\31\13\1\0\1\10\2\0"+ "\5\13\1\u0164\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\50\13\5\0\4\u0165\12\0\2\u0165"+ "\25\0\1\u0165\2\0\1\u0165\1\0\2\u0165\1\0\1\u0165"+ "\3\0\1\u0165\7\0\3\u0165\22\0\4\u0166\12\0\2\u0166"+ "\25\0\1\u0166\2\0\1\u0166\1\0\2\u0166\1\0\1\u0166"+ "\3\0\1\u0166\7\0\3\u0166\65\0\1\u0167\106\0\1\u0168"+ "\131\0\1\u011a\66\0\1\u0169\137\0\1\u016a\106\0\1\u016b"+ "\131\0\1\u011e\66\0\1\u016c\70\0\1\10\2\0\1\10"+ "\4\u016d\1\10\1\0\4\10\2\0\2\10\2\u016d\16\0"+ "\1\10\2\0\4\10\1\u016d\2\10\1\u016d\1\10\2\u016d"+ "\1\10\1\u016d\3\10\1\u016d\7\10\3\u016d\15\10\1\0"+ "\1\10\2\0\5\13\1\u016e\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\50\13\1\0\1\10"+ "\2\0\6\10\1\0\4\10\2\0\4\10\16\0\1\10"+ "\2\0\13\10\1\u016f\34\10\1\0\1\10\2\0\6\10"+ "\1\0\4\10\2\0\4\10\16\0\1\10\2\0\15\10"+ "\1\u0170\32\10\1\0\1\10\2\0\6\10\1\0\4\10"+ "\2\0\4\10\16\0\1\10\2\0\13\10\1\u0171\34\10"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\7\13\1\u0172\40\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\1\13\1\u0173\46\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\33\13\1\u0174\14\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\14\13\1\u0175\33\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\2\13\1\u012a\45\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\21\13\1\u0176\26\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\10\13\1\177\37\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\20\13\1\u0177\27\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\5\13\1\u0178\42\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\14\13\1\341\33\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\6\13\1\u0179\41\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\15\13\1\u017a\32\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\13\13\1\u017b\34\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\7\13\1\u017c\40\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\13\13\1\171\34\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\11\13\1\u017a\36\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\16\13\1\u017d\31\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\13\13\1\u017e\34\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\25\13\1\177\22\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\13\13\1\u017f\34\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\1\177\47\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\5\13\1\u0180\42\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\11\13\1\u0181\36\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\1\13\1\341\46\13\1\0"+ "\1\10\2\0\5\13\1\u0182\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\50\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\6\13\1\u0183\41\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\41\13\1\u0184\6\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\23\13\1\u0185\24\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\13\13\1\u0186\34\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\14\13\1\u0187\33\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\11\13\1\u0188\36\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\11\13\1\240\36\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\22\13\1\u0189\25\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\22\13\1\u018a\25\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\16\13\1\u018b\31\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\17\13\1\u018c\30\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\13\13\1\u018d\34\13\1\0\1\10"+ "\2\0\5\13\1\u018e\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\50\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\25\13\1\u0108\22\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\7\13\1\315\40\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\11\13\1\u018f\36\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\11\13\1\u0190\36\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\45\13\1\u0191\2\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\3\13\1\u0192"+ "\16\0\1\10\2\0\50\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\11\13\1\u0193\23\13\1\u0194\1\u0195\11\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\1\u0108\47\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\25\13\1\u0196\22\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\16\13\1\u0197\31\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\44\13\1\u0198\3\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\41\13\1\u0199\6\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\4\13\1\u019a\43\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\14\13\1\u019b\33\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\7\13\1\u019c\40\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\21\13\1\u0108\26\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\5\13\1\u019d\42\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\5\13\1\u019e\42\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\17\13\1\u019f\30\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\22\13\1\u01a0\25\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\2\13\1\u01a1\45\13\41\0\1\u0168"+ "\7\0\1\u011a\63\0\1\u01a2\102\0\6\u0169\1\0\1\u01a3"+ "\1\0\1\u01a3\2\u0169\1\u01a3\4\u0169\2\u01a3\1\0\2\u01a3"+ "\1\0\1\u01a3\2\0\4\u01a3\1\0\3\u01a3\50\u0169\41\0"+ "\1\u016b\7\0\1\u011e\63\0\1\u01a4\102\0\6\u016c\1\0"+ "\1\u01a5\1\0\1\u01a5\2\u016c\1\u01a5\4\u016c\2\u01a5\1\0"+ "\2\u01a5\1\0\1\u01a5\2\0\4\u01a5\1\0\3\u01a5\50\u016c"+ "\1\0\1\10\2\0\1\10\4\u01a6\1\10\1\0\4\10"+ "\2\0\2\10\2\u01a6\16\0\1\10\2\0\4\10\1\u01a6"+ "\2\10\1\u01a6\1\10\2\u01a6\1\10\1\u01a6\3\10\1\u01a6"+ "\7\10\3\u01a6\15\10\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\23\13\1\u01a7\24\13\1\0\1\10\2\0\6\10\1\0"+ "\4\10\2\0\4\10\16\0\1\10\2\0\14\10\1\u01a8"+ "\33\10\1\0\1\10\2\0\6\10\1\0\4\10\2\0"+ "\4\10\16\0\1\10\2\0\13\10\1\u01a9\34\10\1\0"+ "\1\10\2\0\6\10\1\0\4\10\2\0\4\10\16\0"+ "\1\10\2\0\11\10\1\u01aa\36\10\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\20\13\1\u01ab\27\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\5\13\1\u01ac\42\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\1\u01ad\47\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\1\13\1\u01ae\46\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\42\13\1\u01af\5\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\7\13\1\u01b0\40\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\14\13\1\177\33\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\6\13\1\u01b1\41\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\13\13\1\u01b1\34\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\4\13\1\u01b2\43\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\23\13\1\u01b3\24\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\20\13\1\323\27\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\11\13\1\u01b4\36\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\16\13\1\u01b5\31\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\16\13\1\u01b6\31\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\1\13\1\u01b7\46\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\6\13\1\171\41\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\7\13\1\356\40\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\15\13\1\u01b8\32\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\2\13\1\u01b9\45\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\7\13\1\u01ba\40\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\1\u01bb\47\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\1\13\1\u01bc\10\13\1\u01bd\35\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\11\13\1\u01be\36\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\7\13\1\u01bf\40\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\5\13\1\u01c0\42\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\37\13\1\u01c1\10\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\1\13\1\u01c2\46\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\13\13\1\u01c3\34\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\13\13\1\u01c4\34\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\1\13\1\u01c5\46\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\15\13\1\u01c6\32\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\13\13\1\u01c7\34\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\12\13\1\u01bd\35\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\11\13\1\u019f\36\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\7\13\1\313\40\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\37\13\1\u01c8\10\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\22\13\1\u01c9\25\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\11\13\1\u01ca\36\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\15\13\1\u01cb\32\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\35\13\1\u01cc\12\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\1\13\1\u01cd\46\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\13\13\1\u01ce\34\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\3\13\1\u0103\44\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\24\13\1\u01cf\23\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\2\13\1\u0108\45\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\30\13\1\u01d0\17\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\2\13\1\u01d1\45\13\17\0\1\u0169\115\0"+ "\1\u016c\77\0\1\10\2\0\1\10\4\13\1\10\1\0"+ "\4\10\2\0\2\10\2\13\16\0\1\10\2\0\4\10"+ "\1\13\2\10\1\13\1\10\2\13\1\10\1\13\3\10"+ "\1\13\7\10\3\13\15\10\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\12\13\1\u01d2\35\13\1\0\1\10\2\0\6\10"+ "\1\0\4\10\2\0\4\10\16\0\1\10\2\0\7\10"+ "\1\u01d3\40\10\1\0\1\10\2\0\6\10\1\0\4\10"+ "\2\0\4\10\16\0\1\10\2\0\1\10\1\u01d3\46\10"+ "\1\0\1\10\2\0\6\10\1\0\4\10\2\0\4\10"+ "\16\0\1\10\2\0\13\10\1\u01d4\34\10\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\34\13\1\u01d5\13\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\15\13\1\u01ce\32\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\13\13\1\u01d6\34\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\3\13"+ "\1\u01d7\16\0\1\10\2\0\50\13\1\0\1\10\2\0"+ "\5\13\1\u01d8\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\50\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\4\13\1\177\43\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\21\13\1\177\26\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\11\13\1\u0133\36\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\7\13\1\u01d9\40\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\14\13\1\171\33\13\1\0\1\10\2\0\5\13"+ "\1\341\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\50\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\15\13\1\176\32\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\5\13\1\u01da\42\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\6\13\1\u01db\41\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\3\13\1\u01dc\16\0\1\10"+ "\2\0\50\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\35\13"+ "\1\u01dd\12\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\15\13"+ "\1\u01de\32\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\6\13"+ "\1\u0103\41\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\6\13"+ "\1\u01df\41\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\13\13"+ "\1\u01e0\34\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\1\13"+ "\1\u01b1\46\13\1\0\1\10\2\0\5\13\1\u01e1\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\50\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\5\13\1\u01e2"+ "\42\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u01e3"+ "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\11\13\1\u0193"+ "\36\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\14\13\1\u01e4"+ "\33\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\16\13\1\u0103"+ "\31\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\13\13\1\u01bc"+ "\34\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\24\13\1\u01e5"+ "\23\13\1\0\1\10\2\0\3\13\1\u01e6\2\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\3\13\1\u0108\44\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\1\13\1\u01e7\46\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\13\13\1\313\34\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\7\13\1\u01e8\40\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\26\13\1\u01e9\21\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\16\13\1\u0108\31\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\7\13\1\u015b\40\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\13\13\1\u01ea\34\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\15\13\1\u01eb\32\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\7\13\1\u01ec\40\13\1\0\1\10\2\0\6\10\1\0"+ "\4\10\2\0\4\10\16\0\1\10\2\0\21\10\1\u01d3"+ "\26\10\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\11\13\1\u01ed"+ "\36\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\15\13\1\u01ee"+ "\32\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\17\13\1\u01ef"+ "\30\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u01f0"+ "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\16\13\1\u01f1"+ "\31\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\16\13\1\u01f2"+ "\31\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u01f3"+ "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\6\13\1\u01f4"+ "\41\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u01f5"+ "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\13\13\1\u0108"+ "\34\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\30\13\1\u01f6"+ "\15\13\1\u01f7\1\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\32\13\1\u01f8\15\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\1\13\1\u01f9\46\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\15\13\1\u01fa\32\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\30\13\1\u01fb\17\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\1\u01fc\47\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\7\13"+ "\1\u01fd\40\13\1\0\1\10\2\0\5\13\1\u01fe\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\50\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\14\13\1\u0157"+ "\33\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\23\13\1\u01ff"+ "\24\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\15\13\1\u0200"+ "\32\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\22\13\1\u0201"+ "\25\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\13\13\1\u0202"+ "\34\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\13\13\1\u0203"+ "\34\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\3\13\1\u0204"+ "\44\13\1\0\1\10\2\0\5\13\1\u0205\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\50\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\14\13\1\320\33\13"+ "\1\0\1\10\2\0\5\13\1\u0206\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\50\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\1\13\1\323\46\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\1\13\1\u0207\46\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\23\13\1\u0208\24\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\7\13\1\u0209\40\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\1\13\1\u020a\46\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\13\13\1\u020b\1\u020c\33\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\36\13\1\u020d\11\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\5\13\1\u020e\42\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\37\13\1\u020f\10\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\16\13\1\u0155\31\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\13\13\1\u0210\34\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\7\13\1\u01de\40\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\13\13\1\u0211\34\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\4\13\1\u0212\43\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\15\13\1\u0213\32\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\1\13\1\u0214\46\13"+ "\1\0\1\10\2\0\5\13\1\u0215\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\50\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\1\13\1\u0216\46\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\2\13\1\u0217\1\13\16\0\1\10\2\0\50\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\1\u0218\47\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\22\13\1\u0219\25\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\7\13\1\u021a\40\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\7\13\1\u021b\40\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\7\13\1\u021c\40\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\23\13\1\u021d\24\13\1\0\1\10"+ "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ "\16\0\1\10\2\0\1\u021e\47\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\22\13\1\u021f\25\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\14\13\1\u0220\33\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\43\13\1\u0221\4\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\24\13\1\u0222\23\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\4\13\1\u0223\43\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\22\13\1\u0224\25\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\4\13\1\u0225\43\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\4\13\1\u01fc\43\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\13\13\1\u0226\34\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\31\13\1\u0227\16\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\23\13\1\u0228\24\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\7\13\1\u0229\40\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\15\13\1\u022a\32\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\35\13\1\u0194\12\13\1\0\1\10\2\0"+ "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\1\u0155\47\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\13\13\1\u021a\34\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\16\13\1\u022b\31\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\7\13\1\u022c\40\13\1\0\1\10\2\0\6\13"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\15\13\1\u022d\32\13\1\0\1\10\2\0\5\13"+ "\1\u022e\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ "\1\10\2\0\50\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\7\13\1\u022f\40\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\7\13\1\u0230\40\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\5\13\1\u0231\42\13\1\0\1\10\2\0\6\13\1\0"+ "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ "\43\13\1\u0232\4\13\1\0\1\10\2\0\5\13\1\u0233"+ "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ "\2\0\50\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\6\13"+ "\1\u0234\41\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\21\13"+ "\1\u021a\26\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\6\13"+ "\1\u0235\41\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\7\13"+ "\1\u0236\40\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\20\13"+ "\1\u0237\27\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\13\13"+ "\1\u0238\34\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\1\13"+ "\1\u0239\46\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\16\13"+ "\1\u023a\31\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\20\13"+ "\1\u021a\27\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\23\13"+ "\1\u023b\24\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\3\13"+ "\1\u023c\44\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\22\13"+ "\1\u023d\25\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\3\13"+ "\1\u023e\44\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\11\13"+ "\1\u023f\36\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\23\13"+ "\1\u0240\24\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\15\13"+ "\1\u0241\32\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\15\13"+ "\1\u0242\32\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\16\13"+ "\1\u0243\31\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\37\13"+ "\1\u0244\10\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\23\13"+ "\1\u0245\24\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\7\13"+ "\1\u022d\40\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\1\13"+ "\1\u023c\46\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\7\13"+ "\1\u0246\40\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\3\13"+ "\1\u021a\44\13\1\0\1\10\2\0\6\13\1\0\1\10"+ "\1\133\2\13\2\0\3\13\1\u0247\16\0\1\10\2\0"+ "\50\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\5\13\1\u0248"+ "\42\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\16\13\1\u0249"+ "\31\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u024a"+ "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\10\13\1\u021a"+ "\37\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\3\13\1\u024b"+ "\44\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\1\13\1\u024c"+ "\46\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\2\13\1\u024d"+ "\45\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\11\13\1\u024e"+ "\36\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\16\13\1\u024e"+ "\31\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\17\13\1\u024f"+ "\30\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\15\13\1\u0250"+ "\32\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\22\13\1\u0206"+ "\25\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\16\13\1\u0251"+ "\31\13\1\0\1\10\2\0\5\13\1\u0252\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\50\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\31\13\1\u0253\16\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\7\13\1\u0254\40\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\1\13\1\u021a\46\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\2\13\1\u021a\45\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\16\13\1\u0255\31\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\1\13\1\u0256\46\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\13\13\1\u0206\34\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\15\13\1\u0257\32\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\13\13\1\u0258\34\13"+ "\1\0\1\10\2\0\3\13\1\u0259\2\13\1\0\1\10"+ "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\50\13"+ "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ "\2\0\4\13\16\0\1\10\2\0\35\13\1\u025a\12\13"+ "\1\0\1\10\2\0\5\13\1\u0246\1\0\1\10\1\133"+ "\2\13\2\0\4\13\16\0\1\10\2\0\50\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\11\13\1\u025b\36\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\21\13\1\u025c\26\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\5\13\1\u025d\42\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\1\13\1\u025e\46\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\45\13\1\u025f\2\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\3\13\1\u0260\44\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\5\13\1\u0261\42\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\7\13\1\u0262\40\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\23\13\1\u0263\24\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\15\13\1\u0264\32\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\13\13\1\u0265\34\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\11\13\1\u0266\36\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\16\13\1\u021a\31\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\15\13\1\u021a\32\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\1\13\1\u0267\46\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\14\13\1\u0268\33\13\1\0"+ "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ "\4\13\16\0\1\10\2\0\1\u021a\47\13\1\0"; private static int [] zzUnpackTrans() { int [] result = new int[45084]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\5\0\4\1\1\11\4\1\1\11\10\1\2\11\3\1"+ "\1\11\45\1\1\11\1\1\1\11\1\1\1\11\1\1"+ "\1\11\1\1\1\11\5\1\1\11\3\1\1\11\2\1"+ "\1\11\20\1\1\11\6\1\1\0\2\1\1\0\73\1"+ "\1\0\1\11\2\1\1\11\10\0\1\11\1\0\1\11"+ "\1\0\2\1\1\0\7\1\1\0\7\1\1\11\103\1"+ "\1\11\12\0\2\11\5\1\1\11\74\1\1\0\1\11"+ "\2\0\1\1\2\0\66\1\4\0\303\1"; private static int [] zzUnpackAttribute() { int [] result = new int[616]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Token type specifying we're in a JavaScript multi-line comment. */ private static final int INTERNAL_IN_JS_MLC = -8; /** * Token type specifying we're in an invalid multi-line JS string. */ private static final int INTERNAL_IN_JS_STRING_INVALID = -10; /** * Token type specifying we're in a valid multi-line JS string. */ private static final int INTERNAL_IN_JS_STRING_VALID = -11; /** * Token type specifying we're in an invalid multi-line JS single-quoted string. */ private static final int INTERNAL_IN_JS_CHAR_INVALID = -12; /** * Token type specifying we're in a valid multi-line JS single-quoted string. */ private static final int INTERNAL_IN_JS_CHAR_VALID = -13; /** * When in the JS_STRING state, whether the current string is valid. */ private boolean validJSString; /** * The version of JavaScript being highlighted. */ private static String jsVersion; /** * Language state set on JS tokens. Must be 0. */ private static final int LANG_INDEX_DEFAULT = 0; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public DartTokenMaker() { super(); } static { jsVersion = "1.0"; } /** * Adds the token specified to the current linked list of tokens as an * "end token;" that is, at zzMarkedPos. * * @param tokenType The token's type. */ private void addEndToken(int tokenType) { addToken(zzMarkedPos,zzMarkedPos, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * Returns the closest {@link TokenTypes "standard" token type} for a given * "internal" token type (e.g. one whose value is < 0). */ @Override public int getClosestStandardTokenTypeForInternalType(int type) { switch (type) { case INTERNAL_IN_JS_MLC: return TokenTypes.COMMENT_MULTILINE; case INTERNAL_IN_JS_STRING_INVALID: case INTERNAL_IN_JS_STRING_VALID: case INTERNAL_IN_JS_CHAR_INVALID: case INTERNAL_IN_JS_CHAR_VALID: return TokenTypes.LITERAL_STRING_DOUBLE_QUOTE; } return type; } /** * Returns the JavaScript version being highlighted. * * @return Supported JavaScript version. * @see #isJavaScriptCompatible(String) */ public static String getJavaScriptVersion() { return jsVersion; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; validJSString = true; int languageIndex = LANG_INDEX_DEFAULT; // Start off in the proper state. int state = YYINITIAL; switch (initialTokenType) { case Token.LITERAL_STRING_DOUBLE_QUOTE: state = DART_MULTILINE_STRING_DOUBLE; break; case Token.LITERAL_CHAR: state = DART_MULTILINE_STRING_SINGLE; break; case INTERNAL_IN_JS_MLC: state = JS_MLC; break; case INTERNAL_IN_JS_STRING_INVALID: state = JS_STRING; validJSString = false; break; case INTERNAL_IN_JS_STRING_VALID: state = JS_STRING; break; case INTERNAL_IN_JS_CHAR_INVALID: state = JS_CHAR; validJSString = false; break; case INTERNAL_IN_JS_CHAR_VALID: state = JS_CHAR; break; default: state = YYINITIAL; // ??? break; } setLanguageIndex(languageIndex); start = text.offset; s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Returns whether features for a specific JS version should be honored * while highlighting. * * @param version JavaScript version required * @return Whether the JavaScript version is the same or greater than * version required. */ public static boolean isJavaScriptCompatible(String version) { return jsVersion.compareTo(version) >= 0; } /** * Set the supported JavaScript version because some keywords were * introduced on or after this version. * * @param javaScriptVersion The version of JavaScript to support, such as * "1.5" or "1.6". * @see #isJavaScriptCompatible(String) * @see #getJavaScriptVersion() */ public static void setJavaScriptVersion(String javaScriptVersion) { jsVersion = javaScriptVersion; } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public DartTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public DartTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 190) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 11: { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } case 45: break; case 5: { addToken(Token.IDENTIFIER); } case 46: break; case 41: { addToken(Token.LITERAL_BOOLEAN); } case 47: break; case 39: { addToken(start,zzStartRead+2, Token.LITERAL_CHAR); yybegin(YYINITIAL); } case 48: break; case 30: { /* Skip all escaped chars. */ } case 49: break; case 32: { /* Invalid latin-1 character \xXX */ validJSString = false; } case 50: break; case 38: { addToken(start,zzStartRead+2, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(YYINITIAL); } case 51: break; case 23: { addToken(Token.ERROR_NUMBER_FORMAT); } case 52: break; case 17: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } case 53: break; case 36: { addToken(Token.FUNCTION); } case 54: break; case 28: { addToken(Token.ANNOTATION); } case 55: break; case 2: { addToken(Token.ERROR_IDENTIFIER); } case 56: break; case 27: { start = zzMarkedPos-2; yybegin(JS_MLC); } case 57: break; case 13: { int type = validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(YYINITIAL); } case 58: break; case 37: { start = zzMarkedPos-3; yybegin(DART_MULTILINE_STRING_DOUBLE); } case 59: break; case 16: { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(YYINITIAL); } case 60: break; case 14: { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addNullToken(); return firstToken; } case 61: break; case 26: { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); } case 62: break; case 20: { /* Skip escaped chars, handles case: '\"""'. */ } case 63: break; case 34: { start = zzMarkedPos-3; yybegin(DART_MULTILINE_STRING_SINGLE); } case 64: break; case 25: { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } case 65: break; case 12: { /* Line ending in '\' => continue to next line. */ if (validJSString) { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_IN_JS_STRING_VALID); } else { addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS_STRING_INVALID); } return firstToken; } case 66: break; case 3: { addToken(Token.WHITESPACE); } case 67: break; case 35: { addToken(Token.DATA_TYPE); } case 68: break; case 33: { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } case 69: break; case 15: { /* Line ending in '\' => continue to next line. */ if (validJSString) { addToken(start,zzStartRead, Token.LITERAL_CHAR); addEndToken(INTERNAL_IN_JS_CHAR_VALID); } else { addToken(start,zzStartRead, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS_CHAR_INVALID); } return firstToken; } case 70: break; case 6: { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } case 71: break; case 10: { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); } case 72: break; case 31: { /* Invalid Unicode character \\uXXXX */ validJSString = false; } case 73: break; case 22: { /* Skip escaped chars, handles case: "\'''". */ } case 74: break; case 9: { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); } case 75: break; case 29: { addToken(Token.RESERVED_WORD); } case 76: break; case 42: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } case 77: break; case 44: { addToken(Token.RESERVED_WORD_2); } case 78: break; case 18: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } case 79: break; case 8: { addToken(Token.SEPARATOR); } case 80: break; case 4: { addNullToken(); return firstToken; } case 81: break; case 7: { addToken(Token.OPERATOR); } case 82: break; case 21: { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } case 83: break; case 24: { addToken(Token.LITERAL_NUMBER_FLOAT); } case 84: break; case 43: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } case 85: break; case 40: { addToken(Token.COMMENT_MULTILINE); } case 86: break; case 1: { } case 87: break; case 19: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } case 88: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case JS_STRING: { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } case 617: break; case JS_CHAR: { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addNullToken(); return firstToken; } case 618: break; case DART_MULTILINE_STRING_DOUBLE: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } case 619: break; case JS_EOL_COMMENT: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } case 620: break; case YYINITIAL: { addNullToken(); return firstToken; } case 621: break; case JS_MLC: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } case 622: break; case DART_MULTILINE_STRING_SINGLE: { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } case 623: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DelphiTokenMaker.flex000066400000000000000000000367031257417003700320070ustar00rootroot00000000000000/* * 7/28/2009 * * DelphiTokenMaker.java - Scanner for the Delphi programming language. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for the Delphi programming language.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated DelphiTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.5 * */ %% %public %class DelphiTokenMaker %extends AbstractJFlexTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Token type specific to DelphiTokenMaker; denotes a line ending * with an unterminated "(*" comment. */ public static final int INTERNAL_MLC2 = -1; /** * Token type specific to DelphiTokenMaker; denotes a line ending * with an unterminated "{$" compiler directive. */ public static final int INTERNAL_COMPILER_DIRECTIVE = -2; /** * Token type specific to DelphiTokenMaker; denotes a line ending * with an unterminated "(*$" compiler directive. */ public static final int INTERNAL_COMPILER_DIRECTIVE2 = -3; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public DelphiTokenMaker() { } /** * Adds the token specified to the current linked list of tokens as an * "end token;" that is, at zzMarkedPos. * * @param tokenType The token's type. */ private void addEndToken(int tokenType) { addToken(zzMarkedPos,zzMarkedPos, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addHyperlinkToken(int, int, int) */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, false); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. * @param hyperlink Whether this token is a hyperlink. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset, boolean hyperlink) { super.addToken(array, start,end, tokenType, startOffset, hyperlink); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.COMMENT_MULTILINE: state = MLC; start = text.offset; break; case INTERNAL_MLC2: state = MLC2; start = text.offset; break; case INTERNAL_COMPILER_DIRECTIVE: state = COMPILER_DIRECTIVE; start = text.offset; break; case INTERNAL_COMPILER_DIRECTIVE2: state = COMPILER_DIRECTIVE2; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} Letter = [A-Za-z] LetterOrUnderscore = ({Letter}|"_") NonzeroDigit = [1-9] Digit = ("0"|{NonzeroDigit}) HexDigit = ({Digit}|[A-Fa-f]) OctalDigit = ([0-7]) NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\") IdentifierStart = ({LetterOrUnderscore}|"$") IdentifierPart = ({IdentifierStart}|{Digit}) LineTerminator = (\n) WhiteSpace = ([ \t\f]) UnclosedStringLiteral = ([\'][^\']*) StringLiteral = ({UnclosedStringLiteral}[\']) EscapeSequence = ("#"{Digit}*) MLCBegin = "{" MLCEnd = "}" MLC2Begin = "(*" MLC2End = "*)" CompilerDirective1Begin = ({MLCBegin}"$") CompilerDirective2Begin = ({MLC2Begin}"$") LineCommentBegin = "//" IntegerHelper1 = (({NonzeroDigit}{Digit}*)|"0") IntegerHelper2 = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) IntegerLiteral = ({IntegerHelper1}[lL]?) HexLiteral = ({IntegerHelper2}[lL]?) FloatHelper1 = ([fFdD]?) FloatHelper2 = ([eE][+-]?{Digit}+{FloatHelper1}) FloatLiteral1 = ({Digit}+"."({FloatHelper1}|{FloatHelper2}|{Digit}+({FloatHelper1}|{FloatHelper2}))) FloatLiteral2 = ("."{Digit}+({FloatHelper1}|{FloatHelper2})) FloatLiteral3 = ({Digit}+{FloatHelper2}) FloatLiteral = ({FloatLiteral1}|{FloatLiteral2}|{FloatLiteral3}|({Digit}+[fFdD])) ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+) BooleanLiteral = ("true"|"false") Separator = ([\(\)\[\]]) Separator2 = ([\;,.]) Operator = ([\^\@\:\=\<\>\+\-\/\*]) Identifier = ({IdentifierStart}{IdentifierPart}*) ErrorIdentifier = ({NonSeparator}+) URLGenDelim = ([:\/\?#\[\]@]) URLSubDelim = ([\!\$&'\(\)\*\+,;=]) URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) URLCharacters = ({URLCharacter}*) URLEndCharacter = ([\/\$]|{Letter}|{Digit}) URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) %state MLC %state MLC2 %state COMPILER_DIRECTIVE %state COMPILER_DIRECTIVE2 %state EOL_COMMENT %% { /* Keywords */ "array" | "as" | "at" | "asm" | "begin" | "case" | "class" | "const" | "constructor" | "destructor" | "dispinterface" | "div" | "do" | "downto" | "else" | "end" | "except" | "exports" | "file" | "final" | "finalization" | "finally" | "for" | "function" | "goto" | "if" | "implementation" | "in" | "inherited" | "initialization" | "inline" | "interface" | "is" | "label" | "mod" | "not" | "object" | "of" | "on" | "or" | "out" | "packed" | "procedure" | "program" | "property" | "raise" | "record" | "repeat" | "resourcestring" | "set" | "sealed" | "shl" | "shr" | "static" | "string" | "then" | "threadvar" | "to" | "try" | "type" | "unit" | "unsafe" | "until" | "uses" | "var" | "while" | "with" | "xor" { addToken(Token.RESERVED_WORD); } /* Directives. */ "absolute" | "abstract" | "assembler" | "automated" | "cdecl" | "contains" | "default" | "deprecated" | "dispid" | "dynamic" | "export" | "external" | "far" | "forward" | "implements" | "index" | "library" | "local" | "message" | "name" | "namespaces" | "near" | "nil" | "nodefault" | "overload" | "override" | "package" | "pascal" | "platform" | "private" | "protected" | "public" | "published" | "read" | "readonly" | "register" | "reintroduce" | "requires" | "resident" | "safecall" | "self" | "stdcall" | "stored" | "varargs" | "virtual" | "write" | "writeonly" { addToken(Token.FUNCTION); } /* Data types. */ "shortint" | "byte" | "char" | "smallint" | "integer" | "word" | "longint" | "cardinal" | "boolean" | "bytebool" | "wordbool" | "longbool" | "real" | "single" | "double" | "extended" | "comp" | "currency" | "pointer" { addToken(Token.DATA_TYPE); } {BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } {LineTerminator} { addNullToken(); return firstToken; } {Identifier} { addToken(Token.IDENTIFIER); } {WhiteSpace}+ { addToken(Token.WHITESPACE); } /* String/Character literals. */ {StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } {UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } {EscapeSequence} { addToken(Token.PREPROCESSOR); } /* Comment literals. */ {CompilerDirective1Begin} {start = zzMarkedPos-2; yybegin(COMPILER_DIRECTIVE); } {CompilerDirective2Begin} {start = zzMarkedPos-3; yybegin(COMPILER_DIRECTIVE2); } {MLCBegin} { start = zzMarkedPos-1; yybegin(MLC); } {MLC2Begin} { start = zzMarkedPos-2; yybegin(MLC2); } {LineCommentBegin} { start = zzMarkedPos-2; yybegin(EOL_COMMENT); } {Separator} { addToken(Token.SEPARATOR); } {Separator2} { addToken(Token.IDENTIFIER); } {Operator} { addToken(Token.OPERATOR); } {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } {FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } {ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } /* Ended with a line not in a string or comment. */ <> { addNullToken(); return firstToken; } /* Catch any other (unhandled) characters. */ . { addToken(Token.IDENTIFIER); } } { [^hwf\n\}]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } [hwf] {} \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.COMMENT_MULTILINE); } <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } } { [^hwf\n\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } [hwf] {} \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_MLC2); return firstToken; } {MLC2End} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } \* {} <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_MLC2); return firstToken; } } { [^\n\}]+ {} \n { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_COMPILER_DIRECTIVE); return firstToken; } {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.PREPROCESSOR); } <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_COMPILER_DIRECTIVE); return firstToken; } } { [^\n\*]+ {} \n { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_COMPILER_DIRECTIVE2); return firstToken; } {MLC2End} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.PREPROCESSOR); } \* {} <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_COMPILER_DIRECTIVE2); return firstToken; } } { [^hwf\n]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } [hwf] {} \n { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DelphiTokenMaker.java000066400000000000000000001754771257417003700320060ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 8/19/09 10:23 AM */ /* * 7/28/2009 * * DelphiTokenMaker.java - Scanner for the Delphi programming language. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for the Delphi programming language.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated DelphiTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.5 * */ public class DelphiTokenMaker extends AbstractJFlexTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int COMPILER_DIRECTIVE = 3; public static final int EOL_COMMENT = 5; public static final int YYINITIAL = 0; public static final int COMPILER_DIRECTIVE2 = 4; public static final int MLC = 1; public static final int MLC2 = 2; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\13\1\12\1\0\1\13\1\7\22\0\1\13\1\42\1\7"+ "\1\10\1\11\1\42\1\42\1\14\1\17\1\21\1\20\1\27\1\42"+ "\1\27\1\30\1\22\1\4\7\6\2\3\1\45\1\42\1\44\1\46"+ "\1\44\1\42\1\43\3\5\1\25\1\26\1\25\5\1\1\24\13\1"+ "\1\23\2\1\1\41\1\0\1\41\1\44\1\2\1\0\1\36\1\55"+ "\1\60\1\62\1\34\1\35\1\56\1\47\1\51\1\66\1\67\1\37"+ "\1\54\1\57\1\61\1\50\1\70\1\32\1\40\1\31\1\33\1\63"+ "\1\52\1\64\1\53\1\65\1\15\1\7\1\16\1\42\uff81\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\6\0\1\1\1\2\2\3\1\2\1\4\1\5\1\6"+ "\1\7\1\10\1\11\1\12\1\11\1\12\11\2\1\12"+ "\14\2\1\13\1\14\1\15\4\13\1\16\2\13\1\17"+ "\1\20\1\13\1\21\2\13\1\22\3\13\1\23\1\3"+ "\1\24\1\23\1\24\1\23\1\25\1\23\1\26\1\27"+ "\1\30\1\31\3\2\1\32\15\2\1\32\20\2\1\32"+ "\31\2\1\32\3\2\4\0\1\33\1\34\4\0\1\24"+ "\1\0\2\25\1\35\22\2\1\36\2\2\1\32\73\2"+ "\1\32\1\2\10\0\1\37\1\2\1\40\1\36\56\2"+ "\1\40\2\2\1\36\16\2\2\0\1\41\2\0\1\42"+ "\13\2\1\32\40\2\1\32\10\2\4\0\10\2\1\36"+ "\65\2"; private static int [] zzUnpackAction() { int [] result = new int[437]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\71\0\162\0\253\0\344\0\u011d\0\u0156\0\u018f"+ "\0\u01c8\0\u0201\0\u023a\0\u0273\0\u023a\0\u02ac\0\u02e5\0\u031e"+ "\0\u0357\0\u023a\0\u023a\0\u0390\0\u03c9\0\u0402\0\u043b\0\u0474"+ "\0\u04ad\0\u04e6\0\u051f\0\u0558\0\u0591\0\u0156\0\u05ca\0\u0603"+ "\0\u063c\0\u0675\0\u06ae\0\u06e7\0\u0720\0\u0759\0\u0792\0\u07cb"+ "\0\u0804\0\u083d\0\u0876\0\u023a\0\u023a\0\u08af\0\u08e8\0\u0921"+ "\0\u095a\0\u023a\0\u0993\0\u09cc\0\u023a\0\u023a\0\u0a05\0\u023a"+ "\0\u0a3e\0\u0a77\0\u023a\0\u0ab0\0\u0ae9\0\u0b22\0\u0b5b\0\u0b5b"+ "\0\u0b5b\0\u0b94\0\u0bcd\0\u0c06\0\u0c3f\0\u0c78\0\u023a\0\u023a"+ "\0\u0cb1\0\u023a\0\u0cea\0\u0d23\0\u0d5c\0\u018f\0\u0d95\0\u0dce"+ "\0\u0e07\0\u0e40\0\u0e79\0\u0eb2\0\u0eeb\0\u0f24\0\u0f5d\0\u0f96"+ "\0\u0fcf\0\u1008\0\u1041\0\u107a\0\u10b3\0\u10ec\0\u1125\0\u115e"+ "\0\u1197\0\u11d0\0\u1209\0\u1242\0\u127b\0\u12b4\0\u12ed\0\u1326"+ "\0\u135f\0\u1398\0\u13d1\0\u140a\0\u1443\0\u147c\0\u14b5\0\u14ee"+ "\0\u1527\0\u1560\0\u1599\0\u15d2\0\u160b\0\u1644\0\u167d\0\u16b6"+ "\0\u16ef\0\u1728\0\u1761\0\u179a\0\u17d3\0\u180c\0\u1845\0\u187e"+ "\0\u18b7\0\u18f0\0\u1929\0\u1962\0\u199b\0\u19d4\0\u1a0d\0\u1a46"+ "\0\u1a7f\0\u1ab8\0\u1af1\0\u1b2a\0\u1b63\0\u1b9c\0\u023a\0\u023a"+ "\0\u1bd5\0\u1c0e\0\u1c47\0\u1c80\0\u1cb9\0\u1cf2\0\u0b5b\0\u1d2b"+ "\0\u023a\0\u1d64\0\u1d9d\0\u1dd6\0\u1e0f\0\u1e48\0\u1e81\0\u1eba"+ "\0\u1ef3\0\u1f2c\0\u1f65\0\u1f9e\0\u1fd7\0\u2010\0\u2049\0\u2082"+ "\0\u20bb\0\u20f4\0\u212d\0\u018f\0\u2166\0\u219f\0\u21d8\0\u2211"+ "\0\u224a\0\u2283\0\u22bc\0\u22f5\0\u232e\0\u2367\0\u23a0\0\u23d9"+ "\0\u2412\0\u244b\0\u2484\0\u24bd\0\u24f6\0\u252f\0\u2568\0\u25a1"+ "\0\u25da\0\u2613\0\u264c\0\u2685\0\u26be\0\u26f7\0\u2730\0\u2769"+ "\0\u27a2\0\u27db\0\u2814\0\u284d\0\u2886\0\u28bf\0\u28f8\0\u2931"+ "\0\u296a\0\u29a3\0\u29dc\0\u2a15\0\u2a4e\0\u2a87\0\u2ac0\0\u2af9"+ "\0\u2b32\0\u2b6b\0\u2ba4\0\u2bdd\0\u2c16\0\u2c4f\0\u2c88\0\u2cc1"+ "\0\u2cfa\0\u2d33\0\u2d6c\0\u2da5\0\u2dde\0\u2e17\0\u2e50\0\u2e89"+ "\0\u2ec2\0\u2efb\0\u2f34\0\u2f6d\0\u2fa6\0\u2fdf\0\u3018\0\u3051"+ "\0\u308a\0\u30c3\0\u30fc\0\u3135\0\u018f\0\u316e\0\u018f\0\u31a7"+ "\0\u31e0\0\u3219\0\u3252\0\u328b\0\u32c4\0\u32fd\0\u3336\0\u336f"+ "\0\u33a8\0\u33e1\0\u341a\0\u3453\0\u348c\0\u34c5\0\u34fe\0\u3537"+ "\0\u3570\0\u35a9\0\u35e2\0\u361b\0\u3654\0\u368d\0\u36c6\0\u36ff"+ "\0\u3738\0\u3771\0\u37aa\0\u37e3\0\u381c\0\u3855\0\u388e\0\u38c7"+ "\0\u3900\0\u3939\0\u3972\0\u39ab\0\u39e4\0\u3a1d\0\u3a56\0\u3a8f"+ "\0\u3ac8\0\u3b01\0\u3b3a\0\u3b73\0\u3bac\0\u3be5\0\u3c1e\0\u3c57"+ "\0\u3c90\0\u3cc9\0\u3d02\0\u3d3b\0\u3d74\0\u3dad\0\u3de6\0\u3e1f"+ "\0\u3e58\0\u3e91\0\u3eca\0\u3f03\0\u3f3c\0\u3f75\0\u3fae\0\u3fe7"+ "\0\u4020\0\u4059\0\u4092\0\u40cb\0\u4104\0\u413d\0\u4176\0\u41af"+ "\0\u41e8\0\u4221\0\u425a\0\u4293\0\u42cc\0\u4305\0\u433e\0\u4377"+ "\0\u43b0\0\u43e9\0\u4422\0\u445b\0\u4494\0\u44cd\0\u4506\0\u453f"+ "\0\u4578\0\u45b1\0\u45ea\0\u4623\0\u465c\0\u4695\0\u46ce\0\u4707"+ "\0\u4740\0\u4779\0\u47b2\0\u47eb\0\u4824\0\u485d\0\u4896\0\u48cf"+ "\0\u4908\0\u4941\0\u497a\0\u49b3\0\u49ec\0\u4a25\0\u4a5e\0\u4a97"+ "\0\u4ad0\0\u4b09\0\u3eca\0\u4b42\0\u4b7b\0\u4bb4\0\u4bed\0\u4c26"+ "\0\u4c5f\0\u4c98\0\u4cd1\0\u4d0a\0\u4092\0\u4d43\0\u413d\0\u4d7c"+ "\0\u4db5\0\u4dee\0\u4e27\0\u4e60\0\u4e99\0\u4ed2\0\u4f0b\0\u1fd7"+ "\0\u4f44\0\u4f7d\0\u4fb6\0\u4fef\0\u5028\0\u5061\0\u509a\0\u50d3"+ "\0\u510c\0\u5145\0\u517e\0\u51b7\0\u51f0\0\u5229\0\u5262\0\u529b"+ "\0\u52d4\0\u530d\0\u5346\0\u537f\0\u53b8\0\u53f1\0\u542a\0\u5463"+ "\0\u549c\0\u54d5\0\u550e\0\u5547\0\u5580\0\u55b9\0\u55f2\0\u562b"+ "\0\u5664\0\u569d\0\u56d6\0\u570f\0\u5748\0\u5781\0\u57ba\0\u57f3"+ "\0\u582c\0\u5865\0\u589e\0\u58d7\0\u5910\0\u5949\0\u5982\0\u59bb"+ "\0\u59f4\0\u5a2d\0\u5a66\0\u5a9f\0\u5ad8"; private static int [] zzUnpackRowMap() { int [] result = new int[437]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\7\2\10\1\11\1\12\1\10\1\11\1\13\1\14"+ "\1\10\1\15\1\16\1\17\1\20\1\13\1\21\1\22"+ "\1\23\1\24\4\10\1\22\1\25\1\26\1\27\1\30"+ "\1\31\1\32\1\33\1\34\1\35\1\23\1\13\1\36"+ "\3\22\1\10\1\37\1\40\1\41\1\10\1\42\1\43"+ "\1\44\1\45\1\46\1\47\1\50\1\51\1\52\4\10"+ "\12\53\1\54\3\53\1\55\16\53\1\56\11\53\1\57"+ "\2\53\1\60\16\53\12\61\1\62\5\61\1\63\14\61"+ "\1\56\11\61\1\57\2\61\1\60\16\61\12\64\1\65"+ "\3\64\1\66\52\64\12\67\1\70\5\67\1\71\50\67"+ "\12\72\1\73\22\72\1\74\11\72\1\75\2\72\1\76"+ "\16\72\7\7\1\0\2\7\11\0\4\7\2\0\10\7"+ "\2\0\1\7\3\0\23\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\22\10"+ "\3\77\2\11\1\77\1\11\1\0\2\77\11\0\1\77"+ "\1\100\1\101\1\102\1\0\1\103\3\77\1\102\1\101"+ "\1\77\1\100\1\77\2\0\1\77\3\0\13\77\1\101"+ "\11\77\1\104\1\105\1\77\1\105\1\0\2\77\11\0"+ "\1\106\1\100\1\101\1\102\1\0\1\103\3\77\1\102"+ "\1\101\1\77\1\100\1\77\2\0\1\77\3\0\13\77"+ "\1\101\1\77\1\106\4\77\71\0\3\7\2\14\1\7"+ "\1\14\1\0\2\7\11\0\4\7\2\0\10\7\2\0"+ "\1\7\3\0\22\7\13\0\1\16\55\0\14\17\1\107"+ "\54\17\11\0\1\110\77\0\1\111\72\0\1\112\51\0"+ "\2\103\1\0\1\103\62\0\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\1\10\1\113\6\10\2\0"+ "\1\7\3\0\1\114\3\10\1\115\5\10\1\116\7\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\3\10\1\117\1\10\1\120\2\10\2\0\1\7\3\0"+ "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\7\10\1\121\2\0\1\7\3\0\10\10\1\122"+ "\11\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\6\10\1\123\1\10\2\0\1\7\3\0\10\10"+ "\1\124\4\10\1\125\4\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\2\10\1\126\2\10\1\127"+ "\2\10\2\0\1\7\3\0\2\10\1\130\7\10\1\131"+ "\7\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\1\116\1\132\1\133\4\10\1\134\2\0\1\7"+ "\3\0\6\10\1\135\13\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\5\10\1\136\2\10\2\0"+ "\1\7\3\0\2\10\1\137\7\10\1\140\7\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\141"+ "\2\10\1\142\1\10\1\143\2\10\2\0\1\7\3\0"+ "\1\144\1\10\1\145\2\10\1\146\14\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\147"+ "\1\150\2\10\1\151\1\152\1\10\2\0\1\7\3\0"+ "\12\10\1\153\7\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\4\10\1\116\2\10\1\116\2\0"+ "\1\7\3\0\5\10\1\154\2\10\1\155\11\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10"+ "\1\156\6\10\2\0\1\7\3\0\1\157\1\10\1\160"+ "\7\10\1\161\7\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\3\10\1\162\4\10\2\0\1\7"+ "\3\0\12\10\1\124\7\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\3\10\1\163\4\10\2\0"+ "\1\7\3\0\4\10\1\164\5\10\1\165\7\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ "\2\0\1\7\3\0\12\10\1\166\7\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\167"+ "\1\10\1\170\2\10\2\0\1\7\3\0\2\10\1\171"+ "\7\10\1\172\7\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\2\10\1\173\2\10\1\174\1\175"+ "\1\10\2\0\1\7\3\0\1\176\11\10\1\177\1\200"+ "\6\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\1\10\1\116\1\201\1\10\1\116\3\10\2\0"+ "\1\7\3\0\6\10\1\202\1\10\1\116\3\10\1\203"+ "\5\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\3\10\1\204\4\10\2\0\1\7\3\0\2\10"+ "\1\205\1\10\1\206\5\10\1\207\7\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\5\10\1\210"+ "\2\10\2\0\1\7\3\0\2\10\1\211\17\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ "\2\0\1\7\3\0\12\10\1\212\7\10\12\53\1\0"+ "\3\53\1\0\16\53\1\0\11\53\1\0\2\53\1\0"+ "\16\53\31\0\1\213\17\0\1\214\50\0\1\215\111\0"+ "\1\216\16\0\12\61\1\0\5\61\1\0\14\61\1\0"+ "\11\61\1\0\2\61\1\0\16\61\21\0\1\217\47\0"+ "\12\64\1\0\3\64\1\0\52\64\12\67\1\0\5\67"+ "\1\0\50\67\21\0\1\220\47\0\12\72\1\0\22\72"+ "\1\0\11\72\1\0\2\72\1\0\16\72\31\0\1\221"+ "\17\0\1\222\50\0\1\223\111\0\1\224\16\0\7\77"+ "\1\0\2\77\11\0\4\77\2\0\10\77\2\0\1\77"+ "\3\0\25\77\2\225\1\77\1\225\1\0\2\77\11\0"+ "\4\77\1\226\1\0\10\77\2\0\1\77\3\0\25\77"+ "\2\103\1\77\1\103\1\0\2\77\11\0\2\77\1\101"+ "\1\102\2\0\3\77\1\102\1\101\3\77\2\0\1\77"+ "\3\0\13\77\1\101\11\77\2\104\1\77\1\104\1\0"+ "\2\77\11\0\2\77\1\101\1\102\1\0\1\103\3\77"+ "\1\102\1\101\3\77\2\0\1\77\3\0\13\77\1\101"+ "\11\77\1\104\1\105\1\77\1\105\1\0\2\77\11\0"+ "\1\77\1\227\1\101\1\102\1\0\1\103\3\77\1\102"+ "\1\101\1\77\1\227\1\77\2\0\1\77\3\0\13\77"+ "\1\101\11\77\4\230\1\0\2\77\11\0\2\77\2\230"+ "\2\0\3\77\3\230\2\77\2\0\1\77\3\0\6\77"+ "\1\230\2\77\1\230\1\77\1\230\6\77\11\0\1\231"+ "\57\0\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\2\10\1\232\5\10\2\0\1\7\3\0\4\10"+ "\1\116\15\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\1\10\1\233\1\10\1\234\4\10\2\0"+ "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\1\10"+ "\1\235\20\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\5\10\1\236\1\10\1\237\2\0\1\7"+ "\3\0\1\10\1\240\1\241\4\10\1\242\1\10\1\243"+ "\7\10\1\244\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\10\10\2\0\1\7\3\0\2\10\1\123"+ "\17\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\3\10\1\245\4\10\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\1\246\6\10\1\247\2\0\1\7\3\0\2\10\1\201"+ "\17\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\7\10\1\235\2\0\1\7\3\0\22\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ "\2\0\1\7\3\0\13\10\1\116\6\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\1\250\7\10"+ "\2\0\1\7\3\0\1\10\1\251\7\10\1\252\10\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\10\10\2\0\1\7\3\0\10\10\1\253\11\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10"+ "\1\254\4\10\1\255\1\10\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\6\10\1\235\1\10\2\0\1\7\3\0\10\10\1\256"+ "\11\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\1\10\1\257\6\10\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\1\10\1\260\6\10\2\0\1\7\3\0\22\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\261"+ "\7\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\7\10\1\262\2\0"+ "\1\7\3\0\5\10\1\116\14\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\7\10\1\263\2\0"+ "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\6\10"+ "\1\264\13\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\10\10\2\0\1\7\3\0\6\10\1\265"+ "\13\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\10\10\2\0\1\7\3\0\10\10\1\266\1\267"+ "\10\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\1\10\1\270\3\10\1\271\2\10\2\0\1\7"+ "\3\0\12\10\1\272\1\273\6\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\1\116\4\10\1\274"+ "\1\275\1\10\2\0\1\7\3\0\22\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\4\10\1\276"+ "\3\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\1\10\1\116\4\10"+ "\1\116\1\10\2\0\1\7\3\0\12\10\1\277\7\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\10\10\2\0\1\7\3\0\10\10\1\300\11\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\5\10"+ "\1\301\2\10\2\0\1\7\3\0\22\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ "\1\7\3\0\2\10\1\302\7\10\1\303\7\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ "\2\0\1\7\3\0\6\10\1\304\13\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\7\10\1\305"+ "\2\0\1\7\3\0\11\10\1\306\10\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\5\10\1\307"+ "\2\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ "\3\0\2\10\1\310\17\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ "\1\10\1\311\20\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\1\312\5\10\1\313\1\10\2\0"+ "\1\7\3\0\1\314\1\10\1\315\10\10\1\316\6\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\10\10\2\0\1\7\3\0\2\10\1\317\17\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ "\2\0\1\7\3\0\2\10\1\320\17\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\1\321\7\10"+ "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\1\10\1\322\6\10\2\0"+ "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\7\10\1\323\2\0\1\7\3\0"+ "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\10\10\2\0\1\7\3\0\7\10\1\324\12\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\1\325\7\10\2\0\1\7\3\0\22\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ "\1\7\3\0\12\10\1\326\7\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\1\327\7\10\2\0"+ "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\5\10\1\330\2\10\2\0\1\7"+ "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\10\10\2\0\1\7\3\0\5\10\1\331"+ "\14\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\6\10\1\254\1\10\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\1\116\7\10\2\0\1\7\3\0\13\10\1\332\6\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\1\10\1\333\6\10\2\0\1\7\3\0\22\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10"+ "\1\334\5\10\1\235\2\0\1\7\3\0\22\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\5\10"+ "\1\335\2\10\2\0\1\7\3\0\22\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\5\10\1\336"+ "\2\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ "\3\0\5\10\1\337\2\10\1\340\11\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\341"+ "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\1\116\7\10\2\0"+ "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\17\10"+ "\1\342\2\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\3\10\1\343\4\10\2\0\1\7\3\0"+ "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\4\10\1\344\2\10\1\345\2\0\1\7\3\0"+ "\1\10\1\346\20\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\7\10\1\347\2\0\1\7\3\0"+ "\14\10\1\116\5\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\10\10"+ "\1\350\11\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\2\10\1\351\5\10\2\0\1\7\3\0"+ "\3\10\1\352\16\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\1\10\1\353\6\10\2\0\1\7"+ "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\1\10\1\354\6\10\2\0\1\7\3\0"+ "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\1\10\1\116\6\10\2\0\1\7\3\0\22\10"+ "\50\0\1\355\57\0\1\356\62\0\1\357\111\0\1\360"+ "\66\0\1\361\57\0\1\362\62\0\1\363\111\0\1\364"+ "\16\0\3\77\2\225\1\77\1\225\1\0\2\77\11\0"+ "\2\77\1\101\1\77\2\0\4\77\1\101\3\77\2\0"+ "\1\77\3\0\13\77\1\101\6\77\3\0\2\225\1\0"+ "\1\225\62\0\3\77\4\230\1\0\2\77\11\0\1\77"+ "\1\227\2\230\2\0\3\77\3\230\1\227\1\77\2\0"+ "\1\77\3\0\6\77\1\230\2\77\1\230\1\77\1\230"+ "\6\77\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\3\10\1\365\4\10\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\3\10\1\366\4\10\2\0\1\7\3\0\22\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ "\2\0\1\7\3\0\10\10\1\116\11\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\116"+ "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\6\10\1\367\1\10"+ "\2\0\1\7\3\0\13\10\1\370\6\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ "\1\7\3\0\2\10\1\371\7\10\1\372\7\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\3\10"+ "\1\373\4\10\2\0\1\7\3\0\22\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ "\1\7\3\0\10\10\1\374\11\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ "\3\0\2\10\1\375\17\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ "\12\10\1\376\7\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\2\10\1\377\5\10\2\0\1\7"+ "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\7\10\1\116\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\10\10\2\0\1\7\3\0\2\10\1\u0100\17\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\5\10"+ "\1\u0101\2\10\2\0\1\7\3\0\22\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\u0102"+ "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ "\3\0\12\10\1\u0103\7\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\3\10\1\u0104\4\10\2\0"+ "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\11\10"+ "\1\u0105\10\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\7\10\1\232\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\5\10\1\u0106\2\10\2\0\1\7\3\0\22\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ "\2\0\1\7\3\0\3\10\1\u0107\16\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\5\10\1\u0108"+ "\2\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ "\3\0\12\10\1\u0109\7\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\3\10\1\u010a\4\10\2\0"+ "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\1\u010b\7\10\2\0\1\7\3\0"+ "\12\10\1\u010c\7\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\3\10\1\u0100\4\10\2\0\1\7"+ "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\1\10\1\u010d\6\10\2\0\1\7\3\0"+ "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\10\10\2\0\1\7\3\0\7\10\1\u010e\12\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\5\10\1\171\2\10\2\0\1\7\3\0\22\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ "\2\0\1\7\3\0\2\10\1\u010f\17\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\1\u0110\7\10"+ "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\1\10\1\u0111\6\10\2\0"+ "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\11\10"+ "\1\u0112\10\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\6\10\1\u0113\1\10\2\0\1\7\3\0"+ "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\4\10\1\254\3\10\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\3\10\1\273\4\10\2\0\1\7\3\0\22\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10"+ "\1\u0114\6\10\2\0\1\7\3\0\22\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ "\1\7\3\0\7\10\1\u0115\12\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\6\10\1\u0116\1\10"+ "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ "\14\10\1\u0117\5\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\1\u0118\7\10\2\0\1\7\3\0"+ "\1\10\1\u0119\5\10\1\u011a\1\10\1\u011b\10\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\6\10"+ "\1\u011c\1\10\2\0\1\7\3\0\22\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ "\1\7\3\0\11\10\1\267\10\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ "\3\0\20\10\1\u011d\1\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\1\u011e\7\10\2\0\1\7"+ "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\10\10\2\0\1\7\3\0\10\10\1\u011f"+ "\11\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\6\10\1\u0120\1\10\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\3\10\1\u0121\4\10\2\0\1\7\3\0\22\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ "\2\0\1\7\3\0\2\10\1\u0122\17\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\u0123"+ "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\1\u0124\7\10\2\0"+ "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\3\10\1\u0125\4\10\2\0\1\7"+ "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\1\u0126\7\10\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\6\10\1\235\1\10\2\0\1\7\3\0\22\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ "\2\0\1\7\3\0\1\116\21\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ "\3\0\13\10\1\u0127\6\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\7\10\1\u0128\2\0\1\7"+ "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\10\10\2\0\1\7\3\0\2\10\1\234"+ "\17\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\3\10\1\u0127\4\10\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\6\10\1\u0129\1\10\2\0\1\7\3\0\22\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ "\2\0\1\7\3\0\12\10\1\116\7\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\254"+ "\6\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\3\10\1\u012a\4\10"+ "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\3\10\1\u012b\4\10\2\0"+ "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\1\10\1\u012c\6\10\2\0\1\7"+ "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\10\10\2\0\1\7\3\0\13\10\1\u012d"+ "\6\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\7\10\1\245\2\0\1\7\3\0\22\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10"+ "\1\367\6\10\2\0\1\7\3\0\22\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ "\1\7\3\0\1\10\1\367\20\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\1\u012e\6\10\1\u012f"+ "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ "\11\10\1\171\10\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\3\10\1\u0130\4\10\2\0\1\7"+ "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\1\10\1\u0131\6\10\2\0\1\7\3\0"+ "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\5\10\1\u0132\2\10\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\1\u0133\7\10\2\0\1\7\3\0\22\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\u0134"+ "\6\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ "\3\0\1\10\1\u0135\20\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\5\10\1\u0136\2\10\2\0"+ "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\6\10"+ "\1\u0115\13\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\10\10\2\0\1\7\3\0\10\10\1\166"+ "\11\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\5\10\1\u0137\2\10\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\1\u0138\7\10\2\0\1\7\3\0\22\10\45\0\1\u0139"+ "\57\0\1\355\104\0\1\u013a\50\0\1\u013b\105\0\1\u013c"+ "\57\0\1\361\104\0\1\u013d\50\0\1\u013e\40\0\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\5\10"+ "\1\u013f\2\10\2\0\1\7\3\0\22\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ "\1\7\3\0\12\10\1\u0140\7\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ "\3\0\13\10\1\u0141\6\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\2\10\1\u0142\5\10\2\0"+ "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\5\10\1\201\2\10\2\0\1\7"+ "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\1\u0143\7\10\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\7\10\1\u0144\2\0\1\7\3\0\22\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\124"+ "\6\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ "\3\0\2\10\1\u0145\17\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\6\10\1\116\1\10\2\0"+ "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\4\10\1\235\3\10\2\0\1\7"+ "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\1\10\1\u0146\6\10\2\0\1\7\3\0"+ "\10\10\1\u0147\11\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\1\10\1\u0148\6\10\2\0\1\7"+ "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\10\10\2\0\1\7\3\0\1\10\1\201"+ "\20\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\1\u0149\7\10\2\0\1\7\3\0\22\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\6\10"+ "\1\u014a\1\10\2\0\1\7\3\0\22\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\5\10\1\u014b"+ "\2\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ "\3\0\4\10\1\116\15\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ "\5\10\1\u014c\14\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\5\10"+ "\1\u014d\14\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\1\10\1\u014e\6\10\2\0\1\7\3\0"+ "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\6\10\1\u014f\1\10\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\5\10\1\u0150\2\10\2\0\1\7\3\0\22\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ "\2\0\1\7\3\0\2\10\1\u0151\3\10\1\u0152\13\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\10\10\2\0\1\7\3\0\10\10\1\u0153\11\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ "\2\0\1\7\3\0\2\10\1\u0154\17\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\u0155"+ "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\5\10\1\u0156\2\10"+ "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\3\10\1\124\4\10\2\0"+ "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\1\u0157\7\10\2\0\1\7\3\0"+ "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\6\10\1\u0158\1\10\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\6\10\1\u0157\1\10\2\0\1\7\3\0\22\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\5\10"+ "\1\u0159\2\10\2\0\1\7\3\0\22\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\u015a"+ "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\3\10\1\u015b\4\10"+ "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\1\10\1\u015c\6\10\2\0"+ "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\3\10\1\u015d\4\10\2\0\1\7"+ "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\10\10\2\0\1\7\3\0\2\10\1\u015e"+ "\17\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\3\10\1\124\1\10\1\u015f\2\10\2\0\1\7"+ "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\4\10\1\u0160\3\10\2\0\1\7\3\0"+ "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\1\u0161\7\10\2\0\1\7\3\0\22\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\3\10"+ "\1\u0162\4\10\2\0\1\7\3\0\22\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\u0163"+ "\6\10\2\0\1\7\3\0\7\10\1\u0161\12\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ "\2\0\1\7\3\0\10\10\1\235\11\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\u0164"+ "\6\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ "\3\0\2\10\1\u0165\17\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ "\15\10\1\254\4\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\3\10\1\370\4\10\2\0\1\7"+ "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\10\10\2\0\1\7\3\0\6\10\1\u0152"+ "\13\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\5\10\1\u015f\2\10\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\3\10\1\u0166\4\10\2\0\1\7\3\0\22\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\7\10"+ "\1\u0167\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\4\10\1\344\3\10"+ "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\3\10\1\u0168\4\10\2\0"+ "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\2\10"+ "\1\u0169\17\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\5\10\1\u016a\2\10\2\0\1\7\3\0"+ "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\1\u016b\7\10\2\0\1\7\3\0\22\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ "\2\0\1\7\3\0\11\10\1\201\10\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\u016c"+ "\4\10\1\u016d\1\10\2\0\1\7\3\0\22\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\2\10"+ "\1\u016e\5\10\2\0\1\7\3\0\22\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\u016f"+ "\6\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\3\10\1\u0170\4\10"+ "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ "\2\10\1\u0171\17\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\5\10"+ "\1\u0172\14\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\1\10\1\u0173\6\10\2\0\1\7\3\0"+ "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\2\10\1\267\5\10\2\0\1\7\3\0\22\10"+ "\22\0\1\u0174\106\0\1\355\4\0\1\u0139\24\0\1\u013b"+ "\1\u0175\4\u013b\1\0\1\u0175\1\u013b\2\0\1\u0175\2\0"+ "\3\u0175\5\u013b\2\u0175\10\u013b\3\u0175\1\0\2\u0175\22\u013b"+ "\22\0\1\u0176\106\0\1\361\4\0\1\u013c\24\0\1\u013e"+ "\1\u0177\4\u013e\1\0\1\u0177\1\u013e\2\0\1\u0177\2\0"+ "\3\u0177\5\u013e\2\u0177\10\u013e\3\u0177\1\0\2\u0177\22\u013e"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\10\10\2\0\1\7\3\0\13\10\1\u0178\6\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ "\2\0\1\7\3\0\10\10\1\u0179\11\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\u017a"+ "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\1\10\1\u017b\6\10"+ "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\1\10\1\u017c\6\10\2\0"+ "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\1\u017d\7\10\2\0\1\7\3\0"+ "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\1\10\1\u017e\6\10\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\10\10\2\0\1\7\3\0\10\10\1\267\11\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ "\2\0\1\7\3\0\13\10\1\u017f\6\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\1\u0180\7\10"+ "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ "\2\10\1\u0181\17\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\6\10\1\u0108\1\10\2\0\1\7"+ "\3\0\2\10\1\u0182\17\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\1\10\1\u0155\6\10\2\0"+ "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\5\10\1\u0183\2\10\2\0\1\7"+ "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\10\10\2\0\1\7\3\0\6\10\1\u0184"+ "\13\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\5\10\1\u0185\2\10\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\2\10\1\u0159\5\10\2\0\1\7\3\0\22\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10"+ "\1\u0186\6\10\2\0\1\7\3\0\22\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ "\1\7\3\0\10\10\1\u0187\11\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ "\3\0\12\10\1\u0188\7\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ "\7\10\1\116\12\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\11\10"+ "\1\116\10\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\10\10\2\0\1\7\3\0\13\10\1\254"+ "\6\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\6\10\1\171\1\10\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\10\10\2\0\1\7\3\0\2\10\1\u0151\17\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\3\10"+ "\1\367\4\10\2\0\1\7\3\0\22\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\1\u0189\7\10"+ "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ "\11\10\1\u0183\10\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\1\10\1\u018a\6\10\2\0\1\7"+ "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\5\10\1\u018b\2\10\2\0\1\7\3\0"+ "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\10\10\2\0\1\7\3\0\13\10\1\u018c\6\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\7\10\1\u018d\2\0\1\7\3\0\11\10\1\254\10\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\10\10\2\0\1\7\3\0\7\10\1\u0189\12\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ "\2\0\1\7\3\0\12\10\1\u018e\7\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\336"+ "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ "\3\0\5\10\1\u018f\14\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\4\10\1\u0190\3\10\2\0"+ "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\2\10"+ "\1\u0191\17\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\5\10\1\u0192\2\10\2\0\1\7\3\0"+ "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\5\10\1\u0193\2\10\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\10\10\2\0\1\7\3\0\1\10\1\u0194\20\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ "\2\0\1\7\3\0\10\10\1\u0195\11\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ "\1\7\3\0\10\10\1\u0196\11\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ "\3\0\2\10\1\u0197\17\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ "\2\10\1\u0198\17\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\12\10"+ "\1\u0199\7\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\6\10\1\u019a\1\10\2\0\1\7\3\0"+ "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\2\10\1\u019b\5\10\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\10\10\2\0\1\7\3\0\11\10\1\u014c\10\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ "\2\0\1\7\3\0\10\10\1\u019c\2\10\1\254\6\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\10\10\2\0\1\7\3\0\2\10\1\u019d\17\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ "\2\0\1\7\3\0\7\10\1\u019e\12\10\22\0\1\u013b"+ "\70\0\1\u013e\46\0\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\14\10"+ "\1\u019f\5\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\6\10\1\u0186\1\10\2\0\1\7\3\0"+ "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\10\10\2\0\1\7\3\0\10\10\1\u019a\11\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\10\10\2\0\1\7\3\0\11\10\1\u01a0\10\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ "\2\0\1\7\3\0\12\10\1\u01a1\7\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\330"+ "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\3\10\1\u019e\4\10"+ "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\3\10\1\u01a2\4\10\2\0"+ "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\12\10"+ "\1\234\7\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\10\10\2\0\1\7\3\0\16\10\1\u01a3"+ "\3\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\1\u0111\7\10\2\0\1\7\3\0\22\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\6\10"+ "\1\u017d\1\10\2\0\1\7\3\0\22\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ "\1\7\3\0\11\10\1\u019a\10\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ "\3\0\4\10\1\254\15\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\1\367\7\10\2\0\1\7"+ "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\10\10\2\0\1\7\3\0\12\10\1\u01a4"+ "\7\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\3\10\1\254\4\10\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\1\u0108\7\10\2\0\1\7\3\0\22\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ "\1\7\3\0\5\10\1\116\14\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\2\10\1\u01a5\5\10"+ "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ "\1\u0111\21\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\1\10\1\u01a6\6\10\2\0\1\7\3\0"+ "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\3\10\1\u01a7\4\10\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\5\10\1\u01a8\2\10\2\0\1\7\3\0\22\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\u0113"+ "\7\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\6\10\1\u01a9\1\10"+ "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ "\10\10\1\367\11\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\5\10\1\u01aa\2\10\2\0\1\7"+ "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\10\10\2\0\1\7\3\0\11\10\1\u01ab"+ "\10\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\5\10\1\u01a4\2\10\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\10\10\2\0\1\7\3\0\10\10\1\u019e\11\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ "\2\0\1\7\3\0\13\10\1\u0189\6\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\5\10\1\u0155"+ "\2\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\1\254\7\10\2\0"+ "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\11\10"+ "\1\u01ac\10\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\1\u01ad\7\10\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\10\10\2\0\1\7\3\0\11\10\1\254\10\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\7\10"+ "\1\254\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\5\10\1\212\2\10"+ "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\3\10\1\u01ae\4\10\2\0"+ "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\13\10"+ "\1\u01af\6\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\10\10\2\0\1\7\3\0\13\10\1\367"+ "\6\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\5\10\1\u0105\2\10\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\6\10\1\367\1\10\2\0\1\7\3\0\22\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10"+ "\1\235\6\10\2\0\1\7\3\0\22\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ "\1\7\3\0\5\10\1\254\14\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ "\3\0\10\10\1\u01b0\11\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ "\11\10\1\235\10\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\2\10"+ "\1\u0182\17\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\10\10\2\0\1\7\3\0\11\10\1\u017e"+ "\10\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ "\2\0\10\10\2\0\1\7\3\0\4\10\1\367\15\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\1\52\7\10\2\0\1\7\3\0\22\10\1\7\6\10"+ "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\u01b1"+ "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\7\10\1\u01b2\2\0"+ "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ "\11\0\4\10\2\0\2\10\1\u01b3\5\10\2\0\1\7"+ "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ "\4\10\2\0\1\u01b4\7\10\2\0\1\7\3\0\22\10"+ "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ "\1\10\1\u0163\6\10\2\0\1\7\3\0\22\10\1\7"+ "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\u01b5"+ "\7\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ "\3\0\11\10\1\u0189\10\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\5\10\1\u0105\1\10\1\254"+ "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ "\1\10\11\0\4\10\2\0\1\10\1\270\6\10\2\0"+ "\1\7\3\0\22\10"; private static int [] zzUnpackTrans() { int [] result = new int[23313]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\6\0\4\1\1\11\1\1\1\11\4\1\2\11\30\1"+ "\2\11\4\1\1\11\2\1\2\11\1\1\1\11\2\1"+ "\1\11\13\1\2\11\1\1\1\11\100\1\4\0\2\11"+ "\4\0\1\1\1\0\2\1\1\11\123\1\10\0\104\1"+ "\2\0\1\1\2\0\66\1\4\0\76\1"; private static int [] zzUnpackAttribute() { int [] result = new int[437]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Token type specific to DelphiTokenMaker; denotes a line ending * with an unterminated "(*" comment. */ public static final int INTERNAL_MLC2 = -1; /** * Token type specific to DelphiTokenMaker; denotes a line ending * with an unterminated "{$" compiler directive. */ public static final int INTERNAL_COMPILER_DIRECTIVE = -2; /** * Token type specific to DelphiTokenMaker; denotes a line ending * with an unterminated "(*$" compiler directive. */ public static final int INTERNAL_COMPILER_DIRECTIVE2 = -3; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public DelphiTokenMaker() { } /** * Adds the token specified to the current linked list of tokens as an * "end token;" that is, at zzMarkedPos. * * @param tokenType The token's type. */ private void addEndToken(int tokenType) { addToken(zzMarkedPos,zzMarkedPos, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addHyperlinkToken(int, int, int) */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, false); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. * @param hyperlink Whether this token is a hyperlink. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset, boolean hyperlink) { super.addToken(array, start,end, tokenType, startOffset, hyperlink); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.COMMENT_MULTILINE: state = MLC; start = text.offset; break; case INTERNAL_MLC2: state = MLC2; start = text.offset; break; case INTERNAL_COMPILER_DIRECTIVE: state = COMPILER_DIRECTIVE; start = text.offset; break; case INTERNAL_COMPILER_DIRECTIVE2: state = COMPILER_DIRECTIVE2; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public DelphiTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public DelphiTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 158) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 15: { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_COMPILER_DIRECTIVE); return firstToken; } case 35: break; case 4: { addToken(Token.PREPROCESSOR); } case 36: break; case 5: { addNullToken(); return firstToken; } case 37: break; case 27: { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } case 38: break; case 6: { addToken(Token.WHITESPACE); } case 39: break; case 21: { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } case 40: break; case 20: { addToken(Token.LITERAL_NUMBER_FLOAT); } case 41: break; case 26: { addToken(Token.RESERVED_WORD); } case 42: break; case 16: { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.PREPROCESSOR); } case 43: break; case 9: { addToken(Token.SEPARATOR); } case 44: break; case 17: { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_COMPILER_DIRECTIVE2); return firstToken; } case 45: break; case 2: { addToken(Token.IDENTIFIER); } case 46: break; case 18: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } case 47: break; case 25: { start = zzMarkedPos-2; yybegin(EOL_COMMENT); } case 48: break; case 30: { addToken(Token.FUNCTION); } case 49: break; case 7: { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } case 50: break; case 14: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_MLC2); return firstToken; } case 51: break; case 32: { addToken(Token.DATA_TYPE); } case 52: break; case 1: { addToken(Token.ERROR_IDENTIFIER); } case 53: break; case 31: { addToken(Token.LITERAL_BOOLEAN); } case 54: break; case 22: { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } case 55: break; case 34: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } case 56: break; case 29: { start = zzMarkedPos-3; yybegin(COMPILER_DIRECTIVE2); } case 57: break; case 24: { start = zzMarkedPos-2; yybegin(MLC2); } case 58: break; case 33: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } case 59: break; case 19: { addToken(Token.ERROR_NUMBER_FORMAT); } case 60: break; case 28: { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.PREPROCESSOR); } case 61: break; case 13: { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.COMMENT_MULTILINE); } case 62: break; case 3: { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } case 63: break; case 10: { addToken(Token.OPERATOR); } case 64: break; case 8: { start = zzMarkedPos-1; yybegin(MLC); } case 65: break; case 23: { start = zzMarkedPos-2; yybegin(COMPILER_DIRECTIVE); } case 66: break; case 11: { } case 67: break; case 12: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } case 68: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case COMPILER_DIRECTIVE: { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_COMPILER_DIRECTIVE); return firstToken; } case 438: break; case EOL_COMMENT: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } case 439: break; case YYINITIAL: { addNullToken(); return firstToken; } case 440: break; case COMPILER_DIRECTIVE2: { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_COMPILER_DIRECTIVE2); return firstToken; } case 441: break; case MLC: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } case 442: break; case MLC2: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_MLC2); return firstToken; } case 443: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DtdTokenMaker.flex000066400000000000000000000257471257417003700313230ustar00rootroot00000000000000/* * 04/12/2012 * * DtdTokenMaker.java - Generates tokens for DTD syntax highlighting. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for DTD files. * * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated XMLTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 1.0 */ %% %public %class DtdTokenMaker %extends AbstractJFlexTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Token type specific to XMLTokenMaker denoting a line ending with an * unclosed XML tag; thus a new line is beginning still inside of the tag. */ public static final int INTERNAL_INTAG_START = -1; /** * Token type specific to XMLTokenMaker denoting a line ending with an * unclosed DOCTYPE element. */ public static final int INTERNAL_INTAG_ELEMENT = -2; /** * Token type specific to XMLTokenMaker denoting a line ending with an * unclosed, locally-defined DTD in a DOCTYPE element. */ public static final int INTERNAL_INTAG_ATTLIST = -3; /** * Token type specific to XMLTokenMaker denoting a line ending with an * unclosed comment. The state to return to when this comment ends is * embedded in the token type as well. */ public static final int INTERNAL_IN_COMMENT = -(1<<11); /** * The state we were in prior to the current one. This is used to know * what state to resume after an MLC ends. */ private int prevState; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public DtdTokenMaker() { } /** * Adds the token specified to the current linked list of tokens as an * "end token;" that is, at zzMarkedPos. * * @param tokenType The token's type. */ private void addEndToken(int tokenType) { addToken(zzMarkedPos,zzMarkedPos, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * Always returns false, as you never want "mark occurrences" * working in XML files. * * @param type The token type. * @return Whether tokens of this type should have "mark occurrences" * enabled. */ public boolean getMarkOccurrencesOfTokenType(int type) { return false; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; prevState = YYINITIAL; // Start off in the proper state. int state = YYINITIAL; switch (initialTokenType) { case INTERNAL_INTAG_START: state = INTAG_START; break; case INTERNAL_INTAG_ELEMENT: state = INTAG_ELEMENT; break; case INTERNAL_INTAG_ATTLIST: state = INTAG_ATTLIST; break; default: if (initialTokenType<-1024) { // INTERNAL_IN_COMMENT - prevState int main = -(-initialTokenType & 0xffffff00); switch (main) { default: // Should never happen case INTERNAL_IN_COMMENT: state = COMMENT; break; } prevState = -initialTokenType&0xff; } else { // Shouldn't happen state = YYINITIAL; } } start = text.offset; s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} Whitespace = ([ \t\f]) LineTerminator = ([\n]) UnclosedString = ([\"][^\"]*) UnclosedChar = ([\'][^\']*) URLGenDelim = ([:\/\?#\[\]@]) URLSubDelim = ([\!\$&'\(\)\*\+,;=]) URLUnreserved = ([A-Za-z_0-9\-\.\~]) URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) URLCharacters = ({URLCharacter}*) URLEndCharacter = ([\/\$A-Za-z0-9]) URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) %state COMMENT %state INTAG_START %state INTAG_ELEMENT %state INTAG_ATTLIST %% { ([^ \t\f<]+) { /* Not really valid */ addToken(Token.IDENTIFIER); } "" { int temp = zzMarkedPos; addToken(start,zzStartRead+2, Token.COMMENT_MULTILINE); start = temp; yybegin(prevState); } "-" {} {LineTerminator} | <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_COMMENT - prevState); return firstToken; } } { ("ELEMENT") { addToken(Token.MARKUP_TAG_NAME); yybegin(INTAG_ELEMENT); } ("ATTLIST") { addToken(Token.MARKUP_TAG_NAME); yybegin(INTAG_ATTLIST); } ([^ \t\f>]+) { addToken(Token.IDENTIFIER); } {Whitespace}+ { addToken(Token.WHITESPACE); } (">") { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } <> { addEndToken(INTERNAL_INTAG_START); return firstToken; } } { ([^ \t\f>]+) { addToken(Token.MARKUP_TAG_ATTRIBUTE); } {Whitespace}+ { addToken(Token.WHITESPACE); } (">") { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } <> { addEndToken(INTERNAL_INTAG_ELEMENT); return firstToken; } } { ("CDATA"|"#IMPLIED"|"#REQUIRED") { addToken(Token.MARKUP_PROCESSING_INSTRUCTION); } ([^ \t\f>\"\']+) { addToken(Token.MARKUP_TAG_ATTRIBUTE); } ({UnclosedString}[\"]?) { addToken(Token.MARKUP_TAG_ATTRIBUTE_VALUE); } ({UnclosedChar}[\']?) { addToken(Token.MARKUP_TAG_ATTRIBUTE_VALUE); } {Whitespace}+ { addToken(Token.WHITESPACE); } (">") { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } <> { addEndToken(INTERNAL_INTAG_ATTLIST); return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DtdTokenMaker.java000066400000000000000000000625401257417003700312760ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 4/14/12 10:23 AM */ /* * 04/12/2012 * * DtdTokenMaker.java - Generates tokens for DTD syntax highlighting. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for DTD files. * * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated XMLTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 1.0 */ public class DtdTokenMaker extends AbstractJFlexTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int INTAG_START = 2; public static final int INTAG_ELEMENT = 3; public static final int YYINITIAL = 0; public static final int INTAG_ATTLIST = 4; public static final int COMMENT = 1; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\1\1\2\1\0\1\1\23\0\1\1\1\24\1\3\1\41"+ "\1\7\1\5\1\5\1\4\5\5\1\25\1\22\1\6\12\7\1\20"+ "\1\5\1\23\1\5\1\26\2\5\1\34\1\7\1\37\1\40\1\27"+ "\3\7\1\35\2\7\1\30\1\31\1\32\1\7\1\42\1\44\1\43"+ "\1\36\1\33\1\45\5\7\1\5\1\0\1\5\1\0\1\5\1\0"+ "\4\7\1\17\1\14\1\7\1\10\1\15\2\7\1\16\3\7\1\12"+ "\2\7\1\13\1\11\2\7\1\21\3\7\3\0\1\5\uff81\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\5\0\1\1\1\2\1\3\1\4\1\5\4\4\1\3"+ "\1\6\2\3\2\7\2\10\2\7\1\11\5\0\2\3"+ "\1\10\3\7\5\0\1\12\2\3\3\7\1\13\2\0"+ "\1\14\2\3\3\7\2\0\2\3\1\15\2\7\2\3"+ "\2\7\1\16\1\17\1\7"; private static int [] zzUnpackAction() { int [] result = new int[70]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\46\0\114\0\162\0\230\0\276\0\344\0\u010a"+ "\0\u0130\0\u0156\0\u017c\0\u01a2\0\u01c8\0\u01ee\0\u0214\0\u0156"+ "\0\u023a\0\u0260\0\u0286\0\u02ac\0\u02d2\0\u02f8\0\u031e\0\u0344"+ "\0\u036a\0\u0390\0\u03b6\0\u03dc\0\u0402\0\u0428\0\u044e\0\u0474"+ "\0\u0156\0\u049a\0\u04c0\0\u04e6\0\u050c\0\u0532\0\u0558\0\u057e"+ "\0\u05a4\0\u0156\0\u05ca\0\u05f0\0\u0616\0\u063c\0\u0662\0\u0156"+ "\0\u0688\0\u06ae\0\u06d4\0\u06fa\0\u0720\0\u0746\0\u076c\0\u0792"+ "\0\u07b8\0\u06d4\0\u07de\0\u0804\0\u02ac\0\u082a\0\u0850\0\u0876"+ "\0\u089c\0\u08c2\0\u08e8\0\u0214\0\u0214\0\u090e"; private static int [] zzUnpackRowMap() { int [] result = new int[70]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\6\1\7\21\6\1\10\22\6\2\11\1\12\5\11"+ "\1\13\3\11\1\14\4\11\1\15\3\11\1\16\20\11"+ "\1\17\1\7\24\17\1\20\1\21\4\17\1\22\11\17"+ "\1\23\1\7\24\23\1\20\17\23\1\24\1\7\1\24"+ "\1\25\1\26\21\24\1\20\10\24\1\27\1\24\1\30"+ "\4\24\1\6\1\0\21\6\1\0\22\6\1\0\1\7"+ "\70\0\1\31\21\0\2\11\1\0\5\11\1\0\3\11"+ "\1\0\4\11\1\0\3\11\1\0\20\11\57\0\1\32"+ "\45\0\1\33\3\0\1\34\51\0\1\35\51\0\1\36"+ "\20\0\1\17\1\0\24\17\1\0\20\17\1\0\24\17"+ "\1\0\1\17\1\37\16\17\1\0\24\17\1\0\4\17"+ "\1\40\12\17\1\23\1\0\24\23\1\0\17\23\1\24"+ "\1\0\1\24\2\0\21\24\1\0\17\24\3\25\1\41"+ "\42\25\4\26\1\41\41\26\1\24\1\0\1\24\2\0"+ "\21\24\1\0\11\24\1\42\6\24\1\0\1\24\2\0"+ "\21\24\1\0\6\24\1\43\5\24\1\44\2\24\25\0"+ "\1\45\31\0\1\46\46\0\1\47\51\0\1\50\50\0"+ "\1\51\52\0\1\52\17\0\1\17\1\0\24\17\1\0"+ "\1\53\17\17\1\0\24\17\1\0\4\17\1\54\12\17"+ "\1\24\1\0\1\24\2\0\21\24\1\0\5\24\1\55"+ "\12\24\1\0\1\24\2\0\21\24\1\0\2\24\1\56"+ "\15\24\1\0\1\24\2\0\21\24\1\0\1\57\16\24"+ "\25\0\1\60\32\0\1\61\53\0\1\62\44\0\1\47"+ "\50\0\1\63\23\0\1\17\1\0\24\17\1\0\2\17"+ "\1\64\15\17\1\0\24\17\1\0\1\17\1\65\15\17"+ "\1\24\1\0\1\24\2\0\21\24\1\0\4\24\1\66"+ "\13\24\1\0\1\24\2\0\21\24\1\0\13\24\1\67"+ "\4\24\1\0\1\24\2\0\21\24\1\0\15\24\1\70"+ "\1\24\13\0\1\47\4\0\1\62\33\0\1\71\43\0"+ "\2\72\12\63\1\72\1\63\1\72\1\0\2\72\1\0"+ "\12\63\1\72\4\63\1\17\1\0\24\17\1\0\1\73"+ "\17\17\1\0\24\17\1\0\6\17\1\74\10\17\1\24"+ "\1\0\1\24\2\0\21\24\1\0\5\24\1\75\12\24"+ "\1\0\1\24\2\0\21\24\1\0\1\24\1\76\16\24"+ "\1\0\1\24\2\0\21\24\1\0\16\24\1\77\6\0"+ "\1\63\37\0\1\17\1\0\24\17\1\0\3\17\1\100"+ "\14\17\1\0\24\17\1\0\7\17\1\101\7\17\1\24"+ "\1\0\1\24\2\0\21\24\1\0\6\24\1\102\11\24"+ "\1\0\1\24\2\0\21\24\1\0\6\24\1\103\10\24"+ "\1\17\1\0\24\17\1\0\4\17\1\104\13\17\1\0"+ "\24\17\1\0\4\17\1\105\12\17\1\24\1\0\1\24"+ "\2\0\21\24\1\0\1\106\17\24\1\0\1\24\2\0"+ "\21\24\1\0\14\24\1\102\3\24\1\0\1\24\2\0"+ "\21\24\1\0\11\24\1\75\5\24"; private static int [] zzUnpackTrans() { int [] result = new int[2356]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\5\0\4\1\1\11\5\1\1\11\11\1\5\0\2\1"+ "\1\11\3\1\5\0\1\11\5\1\1\11\2\0\6\1"+ "\2\0\14\1"; private static int [] zzUnpackAttribute() { int [] result = new int[70]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Token type specific to XMLTokenMaker denoting a line ending with an * unclosed XML tag; thus a new line is beginning still inside of the tag. */ public static final int INTERNAL_INTAG_START = -1; /** * Token type specific to XMLTokenMaker denoting a line ending with an * unclosed DOCTYPE element. */ public static final int INTERNAL_INTAG_ELEMENT = -2; /** * Token type specific to XMLTokenMaker denoting a line ending with an * unclosed, locally-defined DTD in a DOCTYPE element. */ public static final int INTERNAL_INTAG_ATTLIST = -3; /** * Token type specific to XMLTokenMaker denoting a line ending with an * unclosed comment. The state to return to when this comment ends is * embedded in the token type as well. */ public static final int INTERNAL_IN_COMMENT = -(1<<11); /** * The state we were in prior to the current one. This is used to know * what state to resume after an MLC ends. */ private int prevState; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public DtdTokenMaker() { } /** * Adds the token specified to the current linked list of tokens as an * "end token;" that is, at zzMarkedPos. * * @param tokenType The token's type. */ private void addEndToken(int tokenType) { addToken(zzMarkedPos,zzMarkedPos, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * Always returns false, as you never want "mark occurrences" * working in XML files. * * @param type The token type. * @return Whether tokens of this type should have "mark occurrences" * enabled. */ @Override public boolean getMarkOccurrencesOfTokenType(int type) { return false; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; prevState = YYINITIAL; // Start off in the proper state. int state = YYINITIAL; switch (initialTokenType) { case INTERNAL_INTAG_START: state = INTAG_START; break; case INTERNAL_INTAG_ELEMENT: state = INTAG_ELEMENT; break; case INTERNAL_INTAG_ATTLIST: state = INTAG_ATTLIST; break; default: if (initialTokenType<-1024) { // INTERNAL_IN_COMMENT - prevState int main = -(-initialTokenType & 0xffffff00); switch (main) { default: // Should never happen case INTERNAL_IN_COMMENT: state = COMMENT; break; } prevState = -initialTokenType&0xff; } else { // Shouldn't happen state = YYINITIAL; } } start = text.offset; s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public DtdTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public DtdTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 138) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 3: { addToken(Token.IDENTIFIER); } case 16: break; case 12: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } case 17: break; case 2: { addToken(Token.WHITESPACE); } case 18: break; case 1: { /* Not really valid */ addToken(Token.IDENTIFIER); } case 19: break; case 9: { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(INTAG_START); } case 20: break; case 6: { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } case 21: break; case 11: { start = zzStartRead; prevState = zzLexicalState; yybegin(COMMENT); } case 22: break; case 7: { addToken(Token.MARKUP_TAG_ATTRIBUTE); } case 23: break; case 10: { int temp = zzMarkedPos; addToken(start,zzStartRead+2, Token.COMMENT_MULTILINE); start = temp; yybegin(prevState); } case 24: break; case 15: { addToken(Token.MARKUP_TAG_NAME); yybegin(INTAG_ATTLIST); } case 25: break; case 14: { addToken(Token.MARKUP_TAG_NAME); yybegin(INTAG_ELEMENT); } case 26: break; case 13: { addToken(Token.MARKUP_PROCESSING_INSTRUCTION); } case 27: break; case 4: { } case 28: break; case 5: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_COMMENT - prevState); return firstToken; } case 29: break; case 8: { addToken(Token.MARKUP_TAG_ATTRIBUTE_VALUE); } case 30: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case INTAG_START: { addEndToken(INTERNAL_INTAG_START); return firstToken; } case 71: break; case INTAG_ELEMENT: { addEndToken(INTERNAL_INTAG_ELEMENT); return firstToken; } case 72: break; case YYINITIAL: { addNullToken(); return firstToken; } case 73: break; case INTAG_ATTLIST: { addEndToken(INTERNAL_INTAG_ATTLIST); return firstToken; } case 74: break; case COMMENT: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_COMMENT - prevState); return firstToken; } case 75: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/FortranTokenMaker.flex000066400000000000000000000460721257417003700322150ustar00rootroot00000000000000/* * 03/23/2005 * * FortranTokenMaker.java - Scanner for the Fortran programming language. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for the Fortran programming language. * * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated FortranTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.4 * */ %% %public %class FortranTokenMaker %extends AbstractJFlexTokenMaker %unicode %ignorecase %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Constructor. We must have this here as there is no default, * no-parameter constructor generated by JFlex. */ public FortranTokenMaker() { super(); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "!", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.LITERAL_STRING_DOUBLE_QUOTE: state = STRING; start = text.offset; break; case Token.LITERAL_CHAR: state = CHAR; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} LineTerminator = (\n) WhiteSpace = ([ \t\f]) Column1CommentBegin = ([C\*]) Column1Comment2Begin = (D) AnywhereCommentBegin = (\!) Identifier = ([A-Za-z0-9_$]+) StringDelimiter = (\") CharDelimiter = (\') Operators1 = ("<"|">"|"<="|">="|"&"|"/="|"==") Operators2 = (\.(lt|gt|eq|ne|le|ge|and|or)\.) Operator = ({Operators1}|{Operators2}) Boolean = (\.(true|false)\.) %state STRING %state CHAR %% /* Keywords */ "INCLUDE" { addToken(Token.RESERVED_WORD); } "PROGRAM" { addToken(Token.RESERVED_WORD); } "MODULE" { addToken(Token.RESERVED_WORD); } "SUBROUTINE" { addToken(Token.RESERVED_WORD); } "FUNCTION" { addToken(Token.RESERVED_WORD); } "CONTAINS" { addToken(Token.RESERVED_WORD); } "USE" { addToken(Token.RESERVED_WORD); } "CALL" { addToken(Token.RESERVED_WORD); } "RETURN" { addToken(Token.RESERVED_WORD); } "IMPLICIT" { addToken(Token.RESERVED_WORD); } "EXPLICIT" { addToken(Token.RESERVED_WORD); } "NONE" { addToken(Token.RESERVED_WORD); } "DATA" { addToken(Token.RESERVED_WORD); } "PARAMETER" { addToken(Token.RESERVED_WORD); } "ALLOCATE" { addToken(Token.RESERVED_WORD); } "ALLOCATABLE" { addToken(Token.RESERVED_WORD); } "ALLOCATED" { addToken(Token.RESERVED_WORD); } "DEALLOCATE" { addToken(Token.RESERVED_WORD); } "INTEGER" { addToken(Token.RESERVED_WORD); } "REAL" { addToken(Token.RESERVED_WORD); } "DOUBLE" { addToken(Token.RESERVED_WORD); } "PRECISION" { addToken(Token.RESERVED_WORD); } "COMPLEX" { addToken(Token.RESERVED_WORD); } "LOGICAL" { addToken(Token.RESERVED_WORD); } "CHARACTER" { addToken(Token.RESERVED_WORD); } "DIMENSION" { addToken(Token.RESERVED_WORD); } "KIND" { addToken(Token.RESERVED_WORD); } "CASE" { addToken(Token.RESERVED_WORD); } "SELECT" { addToken(Token.RESERVED_WORD); } "DEFAULT" { addToken(Token.RESERVED_WORD); } "CONTINUE" { addToken(Token.RESERVED_WORD); } "CYCLE" { addToken(Token.RESERVED_WORD); } "DO" { addToken(Token.RESERVED_WORD); } "WHILE" { addToken(Token.RESERVED_WORD); } "ELSE" { addToken(Token.RESERVED_WORD); } "IF" { addToken(Token.RESERVED_WORD); } "ELSEIF" { addToken(Token.RESERVED_WORD); } "THEN" { addToken(Token.RESERVED_WORD); } "ELSEWHERE" { addToken(Token.RESERVED_WORD); } "END" { addToken(Token.RESERVED_WORD); } "ENDIF" { addToken(Token.RESERVED_WORD); } "ENDDO" { addToken(Token.RESERVED_WORD); } "FORALL" { addToken(Token.RESERVED_WORD); } "WHERE" { addToken(Token.RESERVED_WORD); } "EXIT" { addToken(Token.RESERVED_WORD); } "GOTO" { addToken(Token.RESERVED_WORD); } "PAUSE" { addToken(Token.RESERVED_WORD); } "STOP" { addToken(Token.RESERVED_WORD); } "BACKSPACE" { addToken(Token.RESERVED_WORD); } "CLOSE" { addToken(Token.RESERVED_WORD); } "ENDFILE" { addToken(Token.RESERVED_WORD); } "INQUIRE" { addToken(Token.RESERVED_WORD); } "OPEN" { addToken(Token.RESERVED_WORD); } "PRINT" { addToken(Token.RESERVED_WORD); } "READ" { addToken(Token.RESERVED_WORD); } "REWIND" { addToken(Token.RESERVED_WORD); } "WRITE" { addToken(Token.RESERVED_WORD); } "FORMAT" { addToken(Token.RESERVED_WORD); } "AIMAG" { addToken(Token.RESERVED_WORD); } "AINT" { addToken(Token.RESERVED_WORD); } "AMAX0" { addToken(Token.RESERVED_WORD); } "AMIN0" { addToken(Token.RESERVED_WORD); } "ANINT" { addToken(Token.RESERVED_WORD); } "CEILING" { addToken(Token.RESERVED_WORD); } "CMPLX" { addToken(Token.RESERVED_WORD); } "CONJG" { addToken(Token.RESERVED_WORD); } "DBLE" { addToken(Token.RESERVED_WORD); } "DCMPLX" { addToken(Token.RESERVED_WORD); } "DFLOAT" { addToken(Token.RESERVED_WORD); } "DIM" { addToken(Token.RESERVED_WORD); } "DPROD" { addToken(Token.RESERVED_WORD); } "FLOAT" { addToken(Token.RESERVED_WORD); } "FLOOR" { addToken(Token.RESERVED_WORD); } "IFIX" { addToken(Token.RESERVED_WORD); } "IMAG" { addToken(Token.RESERVED_WORD); } "INT" { addToken(Token.RESERVED_WORD); } "LOGICAL" { addToken(Token.RESERVED_WORD); } "MODULO" { addToken(Token.RESERVED_WORD); } "NINT" { addToken(Token.RESERVED_WORD); } "REAL" { addToken(Token.RESERVED_WORD); } "SIGN" { addToken(Token.RESERVED_WORD); } "SNGL" { addToken(Token.RESERVED_WORD); } "TRANSFER" { addToken(Token.RESERVED_WORD); } "ZEXT" { addToken(Token.RESERVED_WORD); } "ABS" { addToken(Token.RESERVED_WORD); } "ACOS" { addToken(Token.RESERVED_WORD); } "AIMAG" { addToken(Token.RESERVED_WORD); } "AINT" { addToken(Token.RESERVED_WORD); } "ALOG" { addToken(Token.RESERVED_WORD); } "ALOG10" { addToken(Token.RESERVED_WORD); } "AMAX0" { addToken(Token.RESERVED_WORD); } "AMAX1" { addToken(Token.RESERVED_WORD); } "AMIN0" { addToken(Token.RESERVED_WORD); } "AMIN1" { addToken(Token.RESERVED_WORD); } "AMOD" { addToken(Token.RESERVED_WORD); } "ANINT" { addToken(Token.RESERVED_WORD); } "ASIN" { addToken(Token.RESERVED_WORD); } "ATAN" { addToken(Token.RESERVED_WORD); } "ATAN2" { addToken(Token.RESERVED_WORD); } "CABS" { addToken(Token.RESERVED_WORD); } "CCOS" { addToken(Token.RESERVED_WORD); } "CHAR" { addToken(Token.RESERVED_WORD); } "CLOG" { addToken(Token.RESERVED_WORD); } "CMPLX" { addToken(Token.RESERVED_WORD); } "CONJG" { addToken(Token.RESERVED_WORD); } "COS" { addToken(Token.RESERVED_WORD); } "COSH" { addToken(Token.RESERVED_WORD); } "CSIN" { addToken(Token.RESERVED_WORD); } "CSQRT" { addToken(Token.RESERVED_WORD); } "DABS" { addToken(Token.RESERVED_WORD); } "DACOS" { addToken(Token.RESERVED_WORD); } "DASIN" { addToken(Token.RESERVED_WORD); } "DATAN" { addToken(Token.RESERVED_WORD); } "DATAN2" { addToken(Token.RESERVED_WORD); } "DBLE" { addToken(Token.RESERVED_WORD); } "DCOS" { addToken(Token.RESERVED_WORD); } "DCOSH" { addToken(Token.RESERVED_WORD); } "DDIM" { addToken(Token.RESERVED_WORD); } "DEXP" { addToken(Token.RESERVED_WORD); } "DIM" { addToken(Token.RESERVED_WORD); } "DINT" { addToken(Token.RESERVED_WORD); } "DLOG" { addToken(Token.RESERVED_WORD); } "DLOG10" { addToken(Token.RESERVED_WORD); } "DMAX1" { addToken(Token.RESERVED_WORD); } "DMIN1" { addToken(Token.RESERVED_WORD); } "DMOD" { addToken(Token.RESERVED_WORD); } "DNINT" { addToken(Token.RESERVED_WORD); } "DPROD" { addToken(Token.RESERVED_WORD); } "DREAL" { addToken(Token.RESERVED_WORD); } "DSIGN" { addToken(Token.RESERVED_WORD); } "DSIN" { addToken(Token.RESERVED_WORD); } "DSINH" { addToken(Token.RESERVED_WORD); } "DSQRT" { addToken(Token.RESERVED_WORD); } "DTAN" { addToken(Token.RESERVED_WORD); } "DTANH" { addToken(Token.RESERVED_WORD); } "EXP" { addToken(Token.RESERVED_WORD); } "FLOAT" { addToken(Token.RESERVED_WORD); } "IABS" { addToken(Token.RESERVED_WORD); } "ICHAR" { addToken(Token.RESERVED_WORD); } "IDIM" { addToken(Token.RESERVED_WORD); } "IDINT" { addToken(Token.RESERVED_WORD); } "IDNINT" { addToken(Token.RESERVED_WORD); } "IFIX" { addToken(Token.RESERVED_WORD); } "INDEX" { addToken(Token.RESERVED_WORD); } "INT" { addToken(Token.RESERVED_WORD); } "ISIGN" { addToken(Token.RESERVED_WORD); } "LEN" { addToken(Token.RESERVED_WORD); } "LGE" { addToken(Token.RESERVED_WORD); } "LGT" { addToken(Token.RESERVED_WORD); } "LLE" { addToken(Token.RESERVED_WORD); } "LLT" { addToken(Token.RESERVED_WORD); } "LOG" { addToken(Token.RESERVED_WORD); } "LOG10" { addToken(Token.RESERVED_WORD); } "MAX" { addToken(Token.RESERVED_WORD); } "MAX0" { addToken(Token.RESERVED_WORD); } "MAX1" { addToken(Token.RESERVED_WORD); } "MIN" { addToken(Token.RESERVED_WORD); } "MIN0" { addToken(Token.RESERVED_WORD); } "MIN1" { addToken(Token.RESERVED_WORD); } "MOD" { addToken(Token.RESERVED_WORD); } "NINT" { addToken(Token.RESERVED_WORD); } "REAL" { addToken(Token.RESERVED_WORD); } "SIGN" { addToken(Token.RESERVED_WORD); } "SIN" { addToken(Token.RESERVED_WORD); } "SINH" { addToken(Token.RESERVED_WORD); } "SNGL" { addToken(Token.RESERVED_WORD); } "SQRT" { addToken(Token.RESERVED_WORD); } "TAN" { addToken(Token.RESERVED_WORD); } "TANH" { addToken(Token.RESERVED_WORD); } { {LineTerminator} { addNullToken(); return firstToken; } {WhiteSpace}+ { addToken(Token.WHITESPACE); } /* String/Character Literals. */ {CharDelimiter} { start = zzMarkedPos-1; yybegin(CHAR); } {StringDelimiter} { start = zzMarkedPos-1; yybegin(STRING); } /* Comment Literals. */ /* Note that we cannot combine these as JFLex doesn't like combining an */ /* expression containing the beginning-of-line character '^'. */ {Column1CommentBegin} { // Since we change zzStartRead, we have the unfortunate // side-effect of not being able to use the '^' operator. // So we must check whether we're really at the beginning // of the line ourselves... if (zzStartRead==s.offset) { addToken(zzStartRead,zzEndRead, Token.COMMENT_EOL); addNullToken(); return firstToken; } else { addToken(Token.IDENTIFIER); } } {Column1Comment2Begin} { // Since we change zzStartRead, we have the unfortunate // side-effect of not being able to use the '^' operator. // So we must check whether we're really at the beginning // of the line ourselves... if (zzStartRead==s.offset) { addToken(zzStartRead,zzEndRead, Token.COMMENT_DOCUMENTATION); addNullToken(); return firstToken; } else { addToken(Token.IDENTIFIER); } } {AnywhereCommentBegin} { addToken(zzStartRead,zzEndRead, Token.COMMENT_EOL); addNullToken(); return firstToken; } /* Operators. */ {Operator} { addToken(Token.OPERATOR); } /* Boolean literals. */ {Boolean} { addToken(Token.LITERAL_BOOLEAN); } {Identifier} { addToken(Token.IDENTIFIER); } /* Ended with a line not in a string or char literal. */ <> { addNullToken(); return firstToken; } /* Catch any other (unhandled) characters. */ . { addToken(Token.IDENTIFIER); } } { [^\'\n]* {} \' { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); } \n { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } } { [^\"\n]* {} \" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/FortranTokenMaker.java000066400000000000000000001063001257417003700321670ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 10/16/06 10:31 AM */ /* * 03/23/2005 * * FortranTokenMaker.java - Scanner for the Fortran programming language. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for the Fortran programming language. * * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated FortranTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.4 * */ public class FortranTokenMaker extends AbstractJFlexTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int STRING = 1; public static final int YYINITIAL = 0; public static final int CHAR = 2; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\2\1\1\1\0\1\2\23\0\1\2\1\5\1\10\1\0"+ "\1\6\1\0\1\14\1\11\2\0\1\3\3\0\1\16\1\15\1\45"+ "\1\50\1\51\7\6\2\0\1\12\1\13\1\12\2\0\1\25\1\37"+ "\1\7\1\4\1\22\1\31\1\21\1\41\1\33\1\46\1\42\1\17"+ "\1\36\1\24\1\26\1\35\1\23\1\27\1\32\1\20\1\30\1\6"+ "\1\44\1\40\1\43\1\47\4\0\1\6\1\0\1\25\1\37\1\34"+ "\1\4\1\22\1\31\1\21\1\41\1\33\1\46\1\42\1\17\1\36"+ "\1\24\1\26\1\35\1\23\1\27\1\32\1\20\1\30\1\6\1\44"+ "\1\40\1\43\1\47\uff85\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\1\0\2\1\1\2\1\3\1\4\1\5\1\6\1\7"+ "\1\2\1\5\1\10\1\11\1\12\1\2\1\12\24\2"+ "\1\1\1\13\1\14\1\1\1\15\1\16\7\2\1\17"+ "\20\2\7\0\41\2\1\17\27\2\1\17\10\2\1\17"+ "\3\2\4\0\2\17\3\2\2\17\20\2\1\17\10\2"+ "\2\17\3\2\1\17\2\2\1\17\6\2\1\17\2\0"+ "\3\2\1\17\4\2\1\17\26\2\1\0\20\2\1\20"+ "\12\2\1\17"; private static int [] zzUnpackAction() { int [] result = new int[257]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\52\0\124\0\176\0\176\0\250\0\176\0\322"+ "\0\176\0\374\0\u0126\0\176\0\176\0\u0150\0\u0150\0\176"+ "\0\u017a\0\u01a4\0\u01ce\0\u01f8\0\u0222\0\u024c\0\u0276\0\u02a0"+ "\0\u02ca\0\u02f4\0\u031e\0\u0348\0\u0372\0\u0126\0\u039c\0\u03c6"+ "\0\u03f0\0\u041a\0\u0444\0\u046e\0\u0498\0\176\0\176\0\u04c2"+ "\0\176\0\176\0\u04ec\0\u0516\0\u0540\0\u056a\0\u0594\0\u05be"+ "\0\u05e8\0\u0612\0\u063c\0\u0666\0\u0690\0\u06ba\0\u06e4\0\u070e"+ "\0\u0738\0\u0762\0\u078c\0\u07b6\0\u07e0\0\u080a\0\u0834\0\u085e"+ "\0\u0888\0\u08b2\0\u08dc\0\u0906\0\u0930\0\u095a\0\u0984\0\u09ae"+ "\0\u09d8\0\u0a02\0\u0a2c\0\u0a56\0\u0a80\0\u0aaa\0\u0ad4\0\u0afe"+ "\0\u0b28\0\u0b52\0\u0b7c\0\u0ba6\0\u0bd0\0\u0bfa\0\u0c24\0\u0c4e"+ "\0\u0c78\0\u0ca2\0\u0ccc\0\u0cf6\0\u0d20\0\u0d4a\0\u0d74\0\u0d9e"+ "\0\u0dc8\0\u0df2\0\u0e1c\0\u0e46\0\u0e70\0\u0e9a\0\u0ec4\0\u0eee"+ "\0\u0f18\0\u0f42\0\u0f6c\0\u0f96\0\u0fc0\0\u0fea\0\u1014\0\u103e"+ "\0\u1068\0\u1092\0\u10bc\0\u10e6\0\u1110\0\u113a\0\u1164\0\u118e"+ "\0\u11b8\0\u11e2\0\u120c\0\u1236\0\u1260\0\u128a\0\u12b4\0\u12de"+ "\0\u1308\0\u1332\0\u135c\0\u1386\0\u13b0\0\u13da\0\u1404\0\u142e"+ "\0\u1458\0\u1482\0\u14ac\0\u14d6\0\u1500\0\u152a\0\u1554\0\u157e"+ "\0\u15a8\0\u15d2\0\u15fc\0\374\0\u1626\0\u1650\0\u167a\0\u16a4"+ "\0\u16ce\0\u16f8\0\u1722\0\u174c\0\u1776\0\u17a0\0\u17ca\0\u17f4"+ "\0\u181e\0\u1848\0\u1872\0\u189c\0\u18c6\0\u18f0\0\u191a\0\u1944"+ "\0\u196e\0\u1998\0\u19c2\0\u19ec\0\u1a16\0\u1a40\0\u1a6a\0\u16f8"+ "\0\u1a94\0\u1abe\0\u1ae8\0\u1b12\0\u1b3c\0\u1b66\0\u1b90\0\u1bba"+ "\0\u1be4\0\u1c0e\0\u1c38\0\u174c\0\u1c62\0\u1c8c\0\u1cb6\0\u1ce0"+ "\0\u1d0a\0\u1d34\0\u1d5e\0\u1d88\0\u1db2\0\u1ddc\0\u1e06\0\u1e30"+ "\0\u1e5a\0\u1e84\0\u1eae\0\u1ed8\0\u1f02\0\u1f2c\0\u1b12\0\u1f56"+ "\0\u1f80\0\u1faa\0\u1fd4\0\u1ffe\0\u2028\0\u2052\0\u207c\0\u20a6"+ "\0\u20d0\0\u20fa\0\u2124\0\u214e\0\u2178\0\u21a2\0\u21cc\0\u21f6"+ "\0\u2220\0\u224a\0\u2274\0\u229e\0\u22c8\0\u22f2\0\u231c\0\u2346"+ "\0\u2370\0\u239a\0\u23c4\0\u23ee\0\u2418\0\u2442\0\u246c\0\u2496"+ "\0\u24c0\0\u24ea\0\u2514\0\u253e\0\u2568\0\176\0\u2592\0\u25bc"+ "\0\u25e6\0\u2610\0\u263a\0\u2664\0\u268e\0\u26b8\0\u26e2\0\u270c"+ "\0\u13da"; private static int [] zzUnpackRowMap() { int [] result = new int[257]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13"+ "\1\14\1\15\1\16\1\17\1\20\1\17\1\21\1\22"+ "\1\23\1\24\1\25\1\12\1\26\1\27\1\30\1\31"+ "\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41"+ "\2\12\1\42\1\12\1\43\2\12\1\44\2\12\1\45"+ "\1\46\6\45\1\47\41\45\1\50\1\51\7\50\1\52"+ "\40\50\54\0\1\6\53\0\1\53\1\0\1\12\1\54"+ "\7\0\1\55\1\56\1\12\1\57\1\12\1\60\1\61"+ "\1\62\1\63\1\12\1\64\1\65\1\66\1\54\1\67"+ "\1\70\1\71\12\12\4\0\1\12\1\0\2\12\7\0"+ "\33\12\4\0\1\12\1\0\1\12\1\72\7\0\1\73"+ "\2\12\1\74\2\12\1\75\1\76\3\12\1\77\1\12"+ "\1\72\1\12\1\100\2\12\1\101\1\12\1\102\6\12"+ "\13\0\1\20\55\0\1\103\1\104\1\103\1\105\1\0"+ "\1\106\1\107\1\110\2\0\1\111\24\0\1\12\1\0"+ "\2\12\7\0\1\112\1\12\1\112\1\113\3\12\1\114"+ "\23\12\4\0\1\12\1\0\2\12\7\0\6\12\1\115"+ "\1\12\1\116\11\12\1\117\10\12\4\0\1\12\1\0"+ "\2\12\7\0\7\12\1\120\23\12\4\0\1\12\1\0"+ "\2\12\7\0\1\121\4\12\1\122\13\12\1\123\11\12"+ "\4\0\1\12\1\0\2\12\7\0\7\12\1\124\4\12"+ "\1\125\16\12\4\0\1\12\1\0\1\12\1\72\7\0"+ "\1\126\1\127\3\12\1\60\5\12\1\130\1\131\1\72"+ "\1\12\1\132\1\133\12\12\4\0\1\12\1\0\2\12"+ "\7\0\16\12\1\117\14\12\4\0\1\12\1\0\2\12"+ "\7\0\3\12\1\134\27\12\4\0\1\12\1\0\2\12"+ "\7\0\13\12\1\135\17\12\4\0\1\12\1\0\2\12"+ "\7\0\1\136\6\12\1\137\1\12\1\140\21\12\4\0"+ "\1\12\1\0\2\12\7\0\1\12\1\141\1\12\1\142"+ "\1\143\1\144\3\12\1\145\2\12\1\146\16\12\4\0"+ "\1\147\1\0\1\12\1\150\7\0\5\12\1\151\1\152"+ "\3\12\1\153\1\154\1\12\1\150\1\12\1\155\13\12"+ "\4\0\1\12\1\0\2\12\7\0\6\12\1\156\1\12"+ "\1\157\22\12\4\0\1\12\1\0\2\12\7\0\6\12"+ "\1\160\1\161\4\12\1\162\16\12\4\0\1\12\1\0"+ "\2\12\7\0\6\12\1\163\24\12\4\0\1\12\1\0"+ "\2\12\7\0\14\12\1\164\16\12\4\0\1\12\1\0"+ "\2\12\7\0\10\12\1\165\11\12\1\166\10\12\4\0"+ "\1\12\1\0\2\12\7\0\3\12\1\167\27\12\1\45"+ "\1\0\6\45\1\0\41\45\1\50\1\0\7\50\1\0"+ "\40\50\4\0\1\12\1\0\2\12\7\0\14\12\1\170"+ "\16\12\4\0\1\12\1\0\2\12\7\0\7\12\1\171"+ "\7\12\1\100\13\12\4\0\1\12\1\0\2\12\7\0"+ "\7\12\1\172\23\12\4\0\1\12\1\0\2\12\7\0"+ "\6\12\1\115\24\12\4\0\1\12\1\0\2\12\7\0"+ "\6\12\1\173\3\12\1\174\6\12\1\175\11\12\4\0"+ "\1\12\1\0\2\12\7\0\14\12\1\125\16\12\4\0"+ "\1\12\1\0\1\12\1\72\7\0\1\12\1\176\11\12"+ "\1\130\1\12\1\72\2\12\1\133\12\12\4\0\1\12"+ "\1\0\2\12\7\0\11\12\1\177\21\12\4\0\1\12"+ "\1\0\2\12\7\0\3\12\1\200\27\12\4\0\1\12"+ "\1\0\2\12\7\0\1\201\32\12\4\0\1\12\1\0"+ "\2\12\7\0\4\12\1\143\7\12\1\146\16\12\4\0"+ "\1\12\1\0\2\12\7\0\5\12\1\202\11\12\1\203"+ "\13\12\4\0\1\12\1\0\2\12\7\0\10\12\1\204"+ "\22\12\4\0\1\12\1\0\2\12\7\0\6\12\1\205"+ "\1\206\4\12\1\207\16\12\4\0\1\12\1\0\2\12"+ "\7\0\1\135\32\12\4\0\1\12\1\0\2\12\7\0"+ "\7\12\1\133\23\12\4\0\1\12\1\0\2\12\7\0"+ "\7\12\1\210\23\12\4\0\1\12\1\0\2\12\7\0"+ "\14\12\1\211\16\12\4\0\1\12\1\0\2\12\7\0"+ "\1\212\12\12\1\135\4\12\1\133\12\12\4\0\1\12"+ "\1\0\2\12\7\0\5\12\1\213\5\12\1\214\3\12"+ "\1\215\13\12\4\0\1\12\1\0\2\12\7\0\4\12"+ "\1\143\7\12\1\113\16\12\4\0\1\12\1\0\2\12"+ "\7\0\16\12\1\216\14\12\4\0\1\12\1\0\2\12"+ "\7\0\6\12\1\217\24\12\4\0\1\12\1\0\1\12"+ "\1\71\7\0\15\12\1\71\15\12\20\0\1\220\1\0"+ "\1\220\56\0\1\221\45\0\1\220\50\0\1\220\53\0"+ "\1\222\54\0\1\220\47\0\1\223\30\0\1\12\1\0"+ "\2\12\7\0\1\12\1\224\1\12\1\224\27\12\4\0"+ "\1\12\1\0\2\12\7\0\5\12\1\224\25\12\4\0"+ "\1\12\1\0\2\12\7\0\2\12\1\225\30\12\4\0"+ "\1\12\1\0\2\12\7\0\5\12\1\214\25\12\4\0"+ "\1\12\1\0\2\12\7\0\6\12\1\226\24\12\4\0"+ "\1\12\1\0\2\12\7\0\3\12\1\113\27\12\4\0"+ "\1\12\1\0\2\12\7\0\1\12\1\227\31\12\4\0"+ "\1\12\1\0\2\12\7\0\13\12\1\230\17\12\4\0"+ "\1\231\1\0\2\12\7\0\33\12\4\0\1\12\1\0"+ "\2\12\7\0\14\12\1\202\1\12\1\232\14\12\4\0"+ "\1\12\1\0\2\12\7\0\5\12\1\135\25\12\4\0"+ "\1\12\1\0\2\12\7\0\5\12\1\202\25\12\4\0"+ "\1\12\1\0\2\12\7\0\1\233\6\12\1\172\23\12"+ "\4\0\1\12\1\0\2\12\7\0\6\12\1\234\24\12"+ "\4\0\1\12\1\0\2\12\7\0\14\12\1\113\16\12"+ "\4\0\1\12\1\0\2\12\7\0\5\12\1\202\11\12"+ "\1\235\13\12\4\0\1\12\1\0\2\12\7\0\6\12"+ "\1\236\1\206\4\12\1\237\16\12\4\0\1\12\1\0"+ "\2\12\7\0\13\12\1\224\17\12\4\0\1\12\1\0"+ "\2\12\7\0\1\12\1\240\4\12\1\241\16\12\1\42"+ "\5\12\4\0\1\12\1\0\2\12\7\0\3\12\1\224"+ "\27\12\4\0\1\12\1\0\2\12\7\0\7\12\1\242"+ "\23\12\4\0\1\12\1\0\2\12\7\0\10\12\1\243"+ "\22\12\4\0\1\12\1\0\2\12\7\0\5\12\1\244"+ "\25\12\4\0\1\12\1\0\2\12\7\0\7\12\1\175"+ "\23\12\4\0\1\12\1\0\2\12\7\0\1\245\32\12"+ "\4\0\1\12\1\0\2\12\7\0\10\12\1\202\22\12"+ "\4\0\1\12\1\0\2\12\7\0\2\12\1\212\30\12"+ "\4\0\1\12\1\0\2\12\7\0\20\12\1\246\12\12"+ "\4\0\1\12\1\0\2\12\7\0\2\12\1\113\2\12"+ "\1\214\25\12\4\0\1\12\1\0\2\12\7\0\5\12"+ "\1\60\6\12\1\247\16\12\4\0\1\12\1\0\2\12"+ "\7\0\22\12\1\250\10\12\4\0\1\251\1\0\1\12"+ "\1\252\7\0\1\12\1\253\2\12\1\254\10\12\1\252"+ "\15\12\4\0\1\12\1\0\2\12\7\0\20\12\1\133"+ "\12\12\4\0\1\12\1\0\2\12\7\0\14\12\1\255"+ "\16\12\4\0\1\12\1\0\2\12\7\0\14\12\1\256"+ "\16\12\4\0\1\12\1\0\2\12\7\0\6\12\1\257"+ "\7\12\1\260\14\12\4\0\1\12\1\0\2\12\7\0"+ "\10\12\1\261\1\32\21\12\4\0\1\12\1\0\2\12"+ "\7\0\3\12\1\262\3\12\1\263\4\12\1\125\16\12"+ "\4\0\1\12\1\0\2\12\7\0\21\12\1\264\11\12"+ "\4\0\1\265\1\0\2\12\7\0\33\12\4\0\1\12"+ "\1\0\2\12\7\0\5\12\1\264\25\12\4\0\1\12"+ "\1\0\1\12\1\266\7\0\15\12\1\266\15\12\4\0"+ "\1\12\1\0\2\12\7\0\5\12\1\206\25\12\4\0"+ "\1\12\1\0\2\12\7\0\14\12\1\267\16\12\4\0"+ "\1\12\1\0\2\12\7\0\3\12\1\270\10\12\1\71"+ "\16\12\4\0\1\12\1\0\2\12\7\0\21\12\1\202"+ "\11\12\4\0\1\12\1\0\2\12\7\0\17\12\1\224"+ "\13\12\4\0\1\12\1\0\2\12\7\0\13\12\1\214"+ "\17\12\4\0\1\12\1\0\2\12\7\0\2\12\1\271"+ "\30\12\4\0\1\12\1\0\2\12\7\0\1\272\32\12"+ "\4\0\1\12\1\0\2\12\7\0\6\12\1\273\24\12"+ "\4\0\1\12\1\0\2\12\7\0\16\12\1\224\14\12"+ "\4\0\1\12\1\0\2\12\7\0\6\12\1\274\24\12"+ "\4\0\1\12\1\0\2\12\7\0\20\12\1\71\12\12"+ "\4\0\1\12\1\0\2\12\7\0\6\12\1\212\24\12"+ "\4\0\1\12\1\0\2\12\7\0\7\12\1\275\23\12"+ "\4\0\1\12\1\0\2\12\7\0\1\12\1\224\31\12"+ "\4\0\1\12\1\0\2\12\7\0\3\12\1\276\27\12"+ "\4\0\1\12\1\0\2\12\7\0\7\12\1\206\23\12"+ "\4\0\1\12\1\0\2\12\7\0\21\12\1\277\11\12"+ "\4\0\1\224\1\0\2\12\7\0\33\12\4\0\1\12"+ "\1\0\2\12\7\0\5\12\1\277\25\12\4\0\1\12"+ "\1\0\2\12\7\0\2\12\1\224\10\12\1\135\17\12"+ "\4\0\1\12\1\0\2\12\7\0\1\300\32\12\4\0"+ "\1\12\1\0\2\12\7\0\1\224\32\12\4\0\1\12"+ "\1\0\2\12\7\0\1\12\1\301\25\12\1\257\3\12"+ "\4\0\1\12\1\0\2\12\7\0\22\12\1\224\10\12"+ "\4\0\1\12\1\0\2\12\7\0\16\12\1\302\14\12"+ "\4\0\1\12\1\0\2\12\7\0\1\255\32\12\4\0"+ "\1\12\1\0\2\12\7\0\10\12\1\303\22\12\16\0"+ "\1\20\63\0\1\304\25\0\1\220\64\0\1\305\36\0"+ "\1\12\1\0\2\12\7\0\14\12\1\306\14\12\1\307"+ "\1\12\4\0\1\12\1\0\2\12\7\0\5\12\1\310"+ "\25\12\4\0\1\12\1\0\2\12\7\0\7\12\1\224"+ "\23\12\4\0\1\12\1\0\2\12\7\0\3\12\1\311"+ "\27\12\4\0\1\227\1\0\2\12\7\0\12\12\1\312"+ "\1\12\1\313\16\12\4\0\1\12\1\0\2\12\7\0"+ "\1\314\32\12\4\0\1\12\1\0\2\12\7\0\7\12"+ "\1\315\23\12\4\0\1\12\1\0\2\12\7\0\5\12"+ "\1\316\25\12\4\0\1\12\1\0\2\12\7\0\6\12"+ "\1\257\24\12\4\0\1\12\1\0\2\12\7\0\21\12"+ "\1\317\11\12\4\0\1\12\1\0\2\12\7\0\5\12"+ "\1\317\25\12\4\0\1\12\1\0\2\12\7\0\11\12"+ "\1\320\21\12\4\0\1\224\1\0\2\12\7\0\1\224"+ "\32\12\4\0\1\12\1\0\2\12\7\0\6\12\1\202"+ "\1\321\23\12\4\0\1\12\1\0\2\12\7\0\6\12"+ "\1\322\10\12\1\275\13\12\4\0\1\12\1\0\1\12"+ "\1\323\7\0\15\12\1\323\15\12\4\0\1\12\1\0"+ "\2\12\7\0\3\12\1\324\27\12\4\0\1\12\1\0"+ "\2\12\7\0\10\12\1\325\22\12\4\0\1\12\1\0"+ "\2\12\7\0\5\12\1\202\11\12\1\224\13\12\4\0"+ "\1\12\1\0\2\12\7\0\6\12\1\321\24\12\4\0"+ "\1\12\1\0\2\12\7\0\3\12\1\255\27\12\4\0"+ "\1\12\1\0\2\12\7\0\1\326\32\12\4\0\1\12"+ "\1\0\2\12\7\0\3\12\1\327\27\12\4\0\1\12"+ "\1\0\2\12\7\0\11\12\1\330\21\12\4\0\1\12"+ "\1\0\2\12\7\0\21\12\1\224\11\12\4\0\1\12"+ "\1\0\2\12\7\0\2\12\1\113\30\12\4\0\1\12"+ "\1\0\2\12\7\0\2\12\1\224\30\12\4\0\1\12"+ "\1\0\2\12\7\0\6\12\1\331\24\12\4\0\1\12"+ "\1\0\1\12\1\332\7\0\15\12\1\332\15\12\4\0"+ "\1\12\1\0\2\12\7\0\2\12\1\333\30\12\4\0"+ "\1\12\1\0\2\12\7\0\26\12\1\224\2\12\1\224"+ "\1\12\4\0\1\12\1\0\2\12\7\0\11\12\1\334"+ "\21\12\4\0\1\12\1\0\2\12\7\0\23\12\1\335"+ "\7\12\4\0\1\12\1\0\2\12\7\0\1\12\1\135"+ "\31\12\4\0\1\12\1\0\2\12\7\0\10\12\1\135"+ "\22\12\4\0\1\12\1\0\2\12\7\0\31\12\1\307"+ "\1\12\4\0\1\12\1\0\2\12\7\0\1\336\32\12"+ "\4\0\1\12\1\0\2\12\7\0\11\12\1\337\21\12"+ "\4\0\1\12\1\0\2\12\7\0\6\12\1\202\24\12"+ "\4\0\1\12\1\0\2\12\7\0\5\12\1\340\25\12"+ "\4\0\1\12\1\0\2\12\7\0\31\12\1\224\1\12"+ "\4\0\1\12\1\0\2\12\7\0\14\12\1\341\16\12"+ "\4\0\1\12\1\0\2\12\7\0\6\12\1\342\5\12"+ "\1\343\16\12\4\0\1\12\1\0\2\12\7\0\1\251"+ "\32\12\4\0\1\12\1\0\2\12\7\0\6\12\1\344"+ "\24\12\22\0\1\345\61\0\1\304\23\0\1\12\1\0"+ "\1\12\1\200\7\0\15\12\1\200\15\12\4\0\1\12"+ "\1\0\2\12\7\0\26\12\1\224\4\12\4\0\1\12"+ "\1\0\2\12\7\0\13\12\1\346\17\12\4\0\1\12"+ "\1\0\2\12\7\0\14\12\1\313\10\12\1\347\5\12"+ "\4\0\1\12\1\0\2\12\7\0\14\12\1\71\16\12"+ "\4\0\1\12\1\0\2\12\7\0\12\12\1\224\20\12"+ "\4\0\1\12\1\0\2\12\7\0\14\12\1\350\16\12"+ "\4\0\1\12\1\0\1\12\1\351\7\0\15\12\1\351"+ "\15\12\4\0\1\12\1\0\2\12\7\0\32\12\1\224"+ "\4\0\1\12\1\0\2\12\7\0\10\12\1\113\22\12"+ "\4\0\1\12\1\0\2\12\7\0\10\12\1\224\22\12"+ "\4\0\1\12\1\0\2\12\7\0\1\212\32\12\4\0"+ "\1\12\1\0\2\12\7\0\1\12\1\352\31\12\4\0"+ "\1\12\1\0\1\12\1\202\7\0\15\12\1\202\15\12"+ "\4\0\1\12\1\0\2\12\7\0\7\12\1\353\23\12"+ "\4\0\1\12\1\0\2\12\7\0\11\12\1\354\21\12"+ "\4\0\1\12\1\0\2\12\7\0\2\12\1\355\30\12"+ "\4\0\1\12\1\0\2\12\7\0\14\12\1\270\16\12"+ "\4\0\1\12\1\0\2\12\7\0\17\12\1\356\13\12"+ "\4\0\1\12\1\0\2\12\7\0\14\12\1\340\16\12"+ "\4\0\1\12\1\0\2\12\7\0\10\12\1\357\22\12"+ "\4\0\1\12\1\0\2\12\7\0\1\360\32\12\4\0"+ "\1\12\1\0\2\12\7\0\13\12\1\361\17\12\4\0"+ "\1\12\1\0\2\12\7\0\7\12\1\362\23\12\4\0"+ "\1\12\1\0\2\12\7\0\1\202\32\12\4\0\1\12"+ "\1\0\2\12\7\0\13\12\1\352\17\12\4\0\1\12"+ "\1\0\2\12\7\0\5\12\1\257\25\12\4\0\1\12"+ "\1\0\2\12\7\0\14\12\1\363\16\12\4\0\1\12"+ "\1\0\2\12\7\0\5\12\1\364\25\12\4\0\1\12"+ "\1\0\1\12\1\365\7\0\15\12\1\365\15\12\16\0"+ "\1\366\37\0\1\12\1\0\2\12\7\0\12\12\1\355"+ "\20\12\4\0\1\12\1\0\2\12\7\0\22\12\1\367"+ "\10\12\4\0\1\12\1\0\1\12\1\370\7\0\15\12"+ "\1\370\15\12\4\0\1\12\1\0\2\12\7\0\6\12"+ "\1\371\24\12\4\0\1\12\1\0\2\12\7\0\14\12"+ "\1\372\16\12\4\0\1\12\1\0\2\12\7\0\11\12"+ "\1\373\21\12\4\0\1\135\1\0\2\12\7\0\33\12"+ "\4\0\1\12\1\0\2\12\7\0\3\12\1\321\27\12"+ "\4\0\1\12\1\0\2\12\7\0\3\12\1\365\27\12"+ "\4\0\1\12\1\0\2\12\7\0\6\12\1\170\24\12"+ "\4\0\1\12\1\0\2\12\7\0\3\12\1\224\3\12"+ "\1\224\23\12\4\0\1\12\1\0\2\12\7\0\16\12"+ "\1\374\14\12\4\0\1\12\1\0\1\12\1\375\7\0"+ "\15\12\1\375\15\12\4\0\1\12\1\0\2\12\7\0"+ "\5\12\1\133\25\12\4\0\1\12\1\0\2\12\7\0"+ "\11\12\1\135\21\12\4\0\1\12\1\0\2\12\7\0"+ "\1\12\1\355\31\12\4\0\1\12\1\0\2\12\7\0"+ "\3\12\1\270\27\12\4\0\1\12\1\0\2\12\7\0"+ "\14\12\1\202\16\12\4\0\1\12\1\0\2\12\7\0"+ "\1\12\1\376\31\12\4\0\1\12\1\0\2\12\7\0"+ "\7\12\1\113\23\12\4\0\1\12\1\0\2\12\7\0"+ "\1\12\1\377\31\12\4\0\1\12\1\0\2\12\7\0"+ "\6\12\1\u0100\24\12\4\0\1\12\1\0\2\12\7\0"+ "\6\12\1\267\24\12\4\0\1\12\1\0\2\12\7\0"+ "\3\12\1\u0101\2\12\1\177\24\12\4\0\1\12\1\0"+ "\2\12\7\0\14\12\1\124\16\12\4\0\1\12\1\0"+ "\1\12\1\135\7\0\15\12\1\135\15\12"; private static int [] zzUnpackTrans() { int [] result = new int[10038]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\1\0\2\1\2\11\1\1\1\11\1\1\1\11\2\1"+ "\2\11\2\1\1\11\25\1\2\11\1\1\2\11\30\1"+ "\7\0\106\1\4\0\60\1\2\0\37\1\1\0\20\1"+ "\1\11\13\1"; private static int [] zzUnpackAttribute() { int [] result = new int[257]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Constructor. We must have this here as there is no default, * no-parameter constructor generated by JFlex. */ public FortranTokenMaker() { super(); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "!", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.LITERAL_STRING_DOUBLE_QUOTE: state = STRING; start = text.offset; break; case Token.LITERAL_CHAR: state = CHAR; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public FortranTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public FortranTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 168) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 15: { addToken(Token.RESERVED_WORD); } case 17: break; case 2: { addToken(Token.IDENTIFIER); } case 18: break; case 4: { addToken(Token.WHITESPACE); } case 19: break; case 11: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } case 20: break; case 13: { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } case 21: break; case 10: { addToken(Token.OPERATOR); } case 22: break; case 5: { // Since we change zzStartRead, we have the unfortunate // side-effect of not being able to use the '^' operator. // So we must check whether we're really at the beginning // of the line ourselves... if (zzStartRead==s.offset) { addToken(zzStartRead,zzEndRead, Token.COMMENT_EOL); addNullToken(); return firstToken; } else { addToken(Token.IDENTIFIER); } } case 23: break; case 16: { addToken(Token.LITERAL_BOOLEAN); } case 24: break; case 8: { start = zzMarkedPos-1; yybegin(STRING); } case 25: break; case 7: { addToken(zzStartRead,zzEndRead, Token.COMMENT_EOL); addNullToken(); return firstToken; } case 26: break; case 6: { // Since we change zzStartRead, we have the unfortunate // side-effect of not being able to use the '^' operator. // So we must check whether we're really at the beginning // of the line ourselves... if (zzStartRead==s.offset) { addToken(zzStartRead,zzEndRead, Token.COMMENT_DOCUMENTATION); addNullToken(); return firstToken; } else { addToken(Token.IDENTIFIER); } } case 27: break; case 9: { start = zzMarkedPos-1; yybegin(CHAR); } case 28: break; case 14: { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); } case 29: break; case 12: { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } case 30: break; case 3: { addNullToken(); return firstToken; } case 31: break; case 1: { } case 32: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case STRING: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } case 258: break; case YYINITIAL: { addNullToken(); return firstToken; } case 259: break; case CHAR: { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } case 260: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/GroovyTokenMaker.flex000066400000000000000000000646761257417003700321010ustar00rootroot00000000000000/* * 09/28/2007 * * GroovyTokenMaker.java - Scanner for the Groovy programming language. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for the Groovy programming language.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated GroovyTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.5 * */ %% %public %class GroovyTokenMaker %extends AbstractJFlexCTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public GroovyTokenMaker() { } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.LITERAL_STRING_DOUBLE_QUOTE: state = MULTILINE_STRING_DOUBLE; start = text.offset; break; case Token.LITERAL_CHAR: state = MULTILINE_STRING_SINGLE; start = text.offset; break; case Token.COMMENT_MULTILINE: state = MLC; start = text.offset; break; case Token.COMMENT_DOCUMENTATION: state = DOCCOMMENT; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Returns whether a regular expression token can follow the specified * token. * * @param t The token to check, which may be null. * @return Whether a regular expression token may follow this one. */ private static final boolean regexCanFollow(Token t) { char ch; return t==null || //t.isOperator() || (t.length()==1 && ( (ch=t.charAt(0))=='=' || ch=='(' || ch==',' || ch=='?' || ch==':' || ch=='[' )) || /* Operators "==", "===", "!=", "!==", etc. */ (t.getType()==Token.OPERATOR && ((ch=t.charAt(t.length()-1))=='=' || ch=='~')); } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} Letter = [A-Za-z] LetterOrUnderscore = ({Letter}|"_") NonzeroDigit = [1-9] BinaryDigit = ([0-1]) Digit = ("0"|{NonzeroDigit}) HexDigit = ({Digit}|[A-Fa-f]) OctalDigit = ([0-7]) AnyCharacterButApostropheOrBackSlash = ([^\\']) EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) Escape = ("\\"(([btnfr\"'\\])|([0123]{OctalDigit}?{OctalDigit}?)|({OctalDigit}{OctalDigit}?)|{EscapedSourceCharacter})) NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\") IdentifierStart = ({LetterOrUnderscore}|"$") IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) LineTerminator = (\n) WhiteSpace = ([ \t\f]) CharLiteral = ([\']({AnyCharacterButApostropheOrBackSlash}|{Escape})*[\']) UnclosedCharLiteral = ([\'][^\'\n]*) ErrorCharLiteral = ({UnclosedCharLiteral}[\']) MLCBegin = "/*" MLCEnd = "*/" DocCommentBegin = "/**" LineCommentBegin = "//" DigitOrUnderscore = ({Digit}|[_]) DigitsAndUnderscoresEnd = ({DigitOrUnderscore}*{Digit}) IntegerHelper = (({NonzeroDigit}{DigitsAndUnderscoresEnd}?)|"0") IntegerLiteral = ({IntegerHelper}[lL]?) BinaryDigitOrUnderscore = ({BinaryDigit}|[_]) BinaryDigitsAndUnderscores = ({BinaryDigit}({BinaryDigitOrUnderscore}*{BinaryDigit})?) BinaryLiteral = ("0"[bB]{BinaryDigitsAndUnderscores}) HexDigitOrUnderscore = ({HexDigit}|[_]) HexDigitsAndUnderscores = ({HexDigit}({HexDigitOrUnderscore}*{HexDigit})?) OctalDigitOrUnderscore = ({OctalDigit}|[_]) OctalDigitsAndUnderscoresEnd= ({OctalDigitOrUnderscore}*{OctalDigit}) HexHelper = ("0"(([xX]{HexDigitsAndUnderscores})|({OctalDigitsAndUnderscoresEnd}))) HexLiteral = ({HexHelper}[lL]?) FloatHelper1 = ([fFdD]?) FloatHelper2 = ([eE][+-]?{Digit}+{FloatHelper1}) FloatLiteral1 = ({Digit}+"."({FloatHelper1}|{FloatHelper2}|{Digit}+({FloatHelper1}|{FloatHelper2}))) FloatLiteral2 = ("."{Digit}+({FloatHelper1}|{FloatHelper2})) FloatLiteral3 = ({Digit}+{FloatHelper2}) FloatLiteral = ({FloatLiteral1}|{FloatLiteral2}|{FloatLiteral3}|({Digit}+[fFdD])) ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+) BooleanLiteral = ("true"|"false") Regex = ([~]?"/"([^\*\\/]|\\.)([^/\\]|\\.)*"/") Separator = ([\(\)\{\}\[\]]) Separator2 = ([\;,.]) NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"|"|"&&"|">>>") AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") GroovyOperator = ("=~") Operator = ({NonAssignmentOperator}|{AssignmentOperator}|{GroovyOperator}) CurrentBlockTag = ("author"|"deprecated"|"exception"|"param"|"return"|"see"|"serial"|"serialData"|"serialField"|"since"|"throws"|"version") ProposedBlockTag = ("category"|"example"|"tutorial"|"index"|"exclude"|"todo"|"internal"|"obsolete"|"threadsafety") BlockTag = ({CurrentBlockTag}|{ProposedBlockTag}) InlineTag = ("code"|"docRoot"|"inheritDoc"|"link"|"linkplain"|"literal"|"value") Identifier = ({IdentifierStart}{IdentifierPart}*) ErrorIdentifier = ({NonSeparator}+) // Variables in strings VariableStart = ([\$]) BracedVariable = ({VariableStart}\{[^\}]+\}) UnbracedVariable = ({VariableStart}{Identifier}) Variable = ({BracedVariable}|{UnbracedVariable}) Annotation = ("@"{Identifier}?) URLGenDelim = ([:\/\?#\[\]@]) URLSubDelim = ([\!\$&'\(\)\*\+,;=]) URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) URLCharacters = ({URLCharacter}*) URLEndCharacter = ([\/\$]|{Letter}|{Digit}) URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) %state MLC %state DOCCOMMENT %state EOL_COMMENT %state MULTILINE_STRING_DOUBLE %state MULTILINE_STRING_SINGLE %state STRING_DOUBLE %% { /* Keywords */ "abstract" | "break" | "case" | "catch" | "class" | "const" | "continue" | "default" | "do" | "else" | "enum" | "extends" | "final" | "finally" | "for" | "goto" | "if" | "it" | "implements" | "import" | "instanceof" | "interface" | "native" | "new" | "null" | "package" | "private" | "protected" | "public" | "static" | "strictfp" | "super" | "switch" | "synchronized" | "this" | "throw" | "throws" | "transient" | "try" | "void" | "volatile" | "while" { addToken(Token.RESERVED_WORD); } "return" { addToken(Token.RESERVED_WORD_2); } /* Groovy keywords */ "as" | "assert" | "def" | "mixin" | "property" | "test" | "using" | "in" { addToken(Token.RESERVED_WORD); } /* Data types. */ "boolean" | "byte" | "char" | "double" | "float" | "int" | "long" | "short" { addToken(Token.DATA_TYPE); } /* Booleans. */ {BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } /* java.lang classes */ "Appendable" | "AutoCloseable" | "CharSequence" | "Cloneable" | "Comparable" | "Iterable" | "Readable" | "Runnable" | "Thread.UncaughtExceptionHandler" | "Boolean" | "Byte" | "Character" | "Character.Subset" | "Character.UnicodeBlock" | "Class" | "ClassLoader" | "ClassValue" | "Compiler" | "Double" | "Enum" | "Float" | "InheritableThreadLocal" | "Integer" | "Long" | "Math" | "Number" | "Object" | "Package" | "Process" | "ProcessBuilder" | "ProcessBuilder.Redirect" | "Runtime" | "RuntimePermission" | "SecurityManager" | "Short" | "StackTraceElement" | "StrictMath" | "String" | "StringBuffer" | "StringBuilder" | "System" | "Thread" | "ThreadGroup" | "ThreadLocal" | "Throwable" | "Void" | "Character.UnicodeScript" | "ProcessBuilder.Redirect.Type" | "Thread.State" | "ArithmeticException" | "ArrayIndexOutOfBoundsException" | "ArrayStoreException" | "ClassCastException" | "ClassNotFoundException" | "CloneNotSupportedException" | "EnumConstantNotPresentException" | "Exception" | "IllegalAccessException" | "IllegalArgumentException" | "IllegalMonitorStateException" | "IllegalStateException" | "IllegalThreadStateException" | "IndexOutOfBoundsException" | "InstantiationException" | "InterruptedException" | "NegativeArraySizeException" | "NoSuchFieldException" | "NoSuchMethodException" | "NullPointerException" | "NumberFormatException" | "RuntimeException" | "SecurityException" | "StringIndexOutOfBoundsException" | "TypeNotPresentException" | "UnsupportedOperationException" | "AbstractMethodError" | "AssertionError" | "BootstrapMethodError" | "ClassCircularityError" | "ClassFormatError" | "Error" | "ExceptionInInitializerError" | "IllegalAccessError" | "IncompatibleClassChangeError" | "InstantiationError" | "InternalError" | "LinkageError" | "NoClassDefFoundError" | "NoSuchFieldError" | "NoSuchMethodError" | "OutOfMemoryError" | "StackOverflowError" | "ThreadDeath" | "UnknownError" | "UnsatisfiedLinkError" | "UnsupportedClassVersionError" | "VerifyError" | "VirtualMachineError" | /* java.io classes*/ "Closeable" | "DataInput" | "DataOutput" | "Externalizable" | "FileFilter" | "FilenameFilter" | "Flushable" | "ObjectInput" | "ObjectInputValidation" | "ObjectOutput" | "ObjectStreamConstants" | "Serializable" | "BufferedInputStream" | "BufferedOutputStream" | "BufferedReader" | "BufferedWriter" | "ByteArrayInputStream" | "ByteArrayOutputStream" | "CharArrayReader" | "CharArrayWriter" | "Console" | "DataInputStream" | "DataOutputStream" | "File" | "FileDescriptor" | "FileInputStream" | "FileOutputStream" | "FilePermission" | "FileReader" | "FileWriter" | "FilterInputStream" | "FilterOutputStream" | "FilterReader" | "FilterWriter" | "InputStream" | "InputStreamReader" | "LineNumberInputStream" | "LineNumberReader" | "ObjectInputStream" | "ObjectInputStream.GetField" | "ObjectOutputStream" | "ObjectOutputStream.PutField" | "ObjectStreamClass" | "ObjectStreamField" | "OutputStream" | "OutputStreamWriter" | "PipedInputStream" | "PipedOutputStream" | "PipedReader" | "PipedWriter" | "PrintStream" | "PrintWriter" | "PushbackInputStream" | "PushbackReader" | "RandomAccessFile" | "Reader" | "SequenceInputStream" | "SerializablePermission" | "StreamTokenizer" | "StringBufferInputStream" | "StringReader" | "StringWriter" | "Writer" | "CharConversionException" | "EOFException" | "FileNotFoundException" | "InterruptedIOException" | "InvalidClassException" | "InvalidObjectException" | "IOException" | "NotActiveException" | "NotSerializableException" | "ObjectStreamException" | "OptionalDataException" | "StreamCorruptedException" | "SyncFailedException" | "UncheckedIOException" | "UnsupportedEncodingException" | "UTFDataFormatException" | "WriteAbortedException" | "IOError" | /* java.util classes */ "Collection" | "Comparator" | "Deque" | "Enumeration" | "EventListener" | "Formattable" | "Iterator" | "List" | "ListIterator" | "Map" | "Map.Entry" | "NavigableMap" | "NavigableSet" | "Observer" | "PrimitiveIterator" | "PrimitiveIterator.OfDouble" | "PrimitiveIterator.OfInt" | "PrimitiveIterator.OfLong" | "Queue" | "RandomAccess" | "Set" | "SortedMap" | "SortedSet" | "Spliterator" | "Spliterator.OfDouble" | "Spliterator.OfInt" | "Spliterator.OfLong" | "Spliterator.OfPrimitive" | "AbstractCollection" | "AbstractList" | "AbstractMap" | "AbstractMap.SimpleEntry" | "AbstractMap.SimpleImmutableEntry" | "AbstractQueue" | "AbstractSequentialList" | "AbstractSet" | "ArrayDeque" | "ArrayList" | "Arrays" | "Base64" | "Base64.Decoder" | "Base64.Encoder" | "BitSet" | "Calendar" | "Calendar.Builder" | "Collections" | "Currency" | "Date" | "Dictionary" | "DoubleSummaryStatistics" | "EnumMap" | "EnumSet" | "EventListenerProxy" | "EventObject" | "FormattableFlags" | "Formatter" | "GregorianCalendar" | "HashMap" | "HashSet" | "Hashtable" | "IdentityHashMap" | "IntSummaryStatistics" | "LinkedHashMap" | "LinkedHashSet" | "LinkedList" | "ListResourceBundle" | "Locale" | "Locale.Builder" | "Locale.LanguageRange" | "LongSummaryStatistics" | "Objects" | "Observable" | "Optional" | "OptionalDouble" | "OptionalInt" | "OptionalLong" | "PriorityQueue" | "Properties" | "PropertyPermission" | "PropertyResourceBundle" | "Random" | "ResourceBundle" | "ResourceBundle.Control" | "Scanner" | "ServiceLoader" | "SimpleTimeZone" | "Spliterators" | "Spliterators.AbstractDoubleSpliterator" | "Spliterators.AbstractIntSpliterator" | "Spliterators.AbstractLongSpliterator" | "Spliterators.AbstractSpliterator" | "SpliteratorRandom" | "Stack" | "StringJoiner" | "StringTokenizer" | "Timer" | "TimerTask" | "TimeZone" | "TreeMap" | "TreeSet" | "UUID" | "Vector" | "WeakHashMap" | "Formatter.BigDecimalLayoutForm" | "Locale.Category" | "Locale.FilteringMode" | "ConcurrentModificationException" | "DuplicateFormatFlagsException" | "EmptyStackException" | "FormatFlagsConversionMismatchException" | "FormatterClosedException" | "IllegalFormatCodePointException" | "IllegalFormatConversionException" | "IllegalFormatException" | "IllegalFormatFlagsException" | "IllegalFormatPrecisionException" | "IllegalFormatWidthException" | "IllformedLocaleException" | "InputMismatchException" | "InvalidPropertiesFormatException" | "MissingFormatArgumentException" | "MissingFormatWidthException" | "MissingResourceException" | "NoSuchElementException" | "TooManyListenersException" | "UnknownFormatConversionException" | "UnknownFormatFlagsException" | "ServiceConfigurationError" { addToken(Token.FUNCTION); } /* Commonly used methods added to Object class */ "addShutdownHook" | "any" | "asBoolean" | "asType" | "collect" | "dump" | "each" | "eachWithIndex" | "every" | "find" | "findAll" | "findIndexOf" | "findIndexValues" | "findLastIndexOf" | "getAt" | "getMetaClass" | "getMetaPropertyValues" | "getProperties" | "grep" | "hasProperty" | "identity" | "inject" | "inspect" | "invokeMethod" | "is" | "isCase" | "iterator" | "metaClass" | "print" | "printf" | "println" | "putAt" | "respondsTo" | "setMetaClass" | "sleep" | "split" | "sprintf" | "toString" | "use" | "with" { addToken(Token.FUNCTION); } {LineTerminator} { addNullToken(); return firstToken; } {Identifier} { addToken(Token.IDENTIFIER); } {WhiteSpace}+ { addToken(Token.WHITESPACE); } /* Multiline string literals. */ \"\"\" { start = zzMarkedPos-3; yybegin(MULTILINE_STRING_DOUBLE); } \'\'\' { start = zzMarkedPos-3; yybegin(MULTILINE_STRING_SINGLE); } /* String/Character literals. */ {CharLiteral} { addToken(Token.LITERAL_CHAR); } {UnclosedCharLiteral} { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; } {ErrorCharLiteral} { addToken(Token.ERROR_CHAR); } \" { start = zzMarkedPos-1; yybegin(STRING_DOUBLE); } /* Comment literals. */ "/**/" { addToken(Token.COMMENT_MULTILINE); } {MLCBegin} { start = zzMarkedPos-2; yybegin(MLC); } {DocCommentBegin} { start = zzMarkedPos-3; yybegin(DOCCOMMENT); } {LineCommentBegin} { start = zzMarkedPos-2; yybegin(EOL_COMMENT); } /* Regular expressions. */ {Regex} { boolean highlightedAsRegex = false; if (zzBuffer[zzStartRead]=='~' || firstToken==null) { addToken(Token.REGEX); highlightedAsRegex = true; } else { // If this is *likely* to be a regex, based on // the previous token, highlight it as such. Token t = firstToken.getLastNonCommentNonWhitespaceToken(); if (regexCanFollow(t)) { addToken(Token.REGEX); highlightedAsRegex = true; } } // If it doesn't *appear* to be a regex, highlight it as // individual tokens. if (!highlightedAsRegex) { int temp = zzStartRead + 1; addToken(zzStartRead, zzStartRead, Token.OPERATOR); zzStartRead = zzCurrentPos = zzMarkedPos = temp; } } /* Annotations. */ {Annotation} { addToken(Token.ANNOTATION); } /* Separators. */ {Separator} { addToken(Token.SEPARATOR); } {Separator2} { addToken(Token.IDENTIFIER); } /* Operators. */ {Operator} { addToken(Token.OPERATOR); } /* Numbers */ {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {BinaryLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } {FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } {ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } /* Ended with a line not in a string or comment. */ <> { addNullToken(); return firstToken; } /* Catch any other (unhandled) characters and flag them as bad. */ . { addToken(Token.ERROR_IDENTIFIER); } } { [^hwf\n\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } [hwf] {} \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } \* {} <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } } { [^hwf\@\{\n\<\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; } [hwf] {} "@"{BlockTag} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } "@" {} "{@"{InlineTag}[^\}]*"}" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } "{" {} \n { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); return firstToken; } "<"[/]?({Letter}[^\>]*)?">" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.PREPROCESSOR); start = zzMarkedPos; } \< {} {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_DOCUMENTATION); } \* {} <> { yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); return firstToken; } } { [^hwf\n]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } [hwf] {} \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } } { [^\"\\\$\n]* {} \\.? { /* Skip escaped chars, handles case: '\"""'. */ } \"\"\" { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.LITERAL_STRING_DOUBLE_QUOTE); } {Variable} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } {VariableStart} {} \" {} \n | <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } } { [^\'\\\n]* {} \\.? { /* Skip escaped chars, handles case: "\'''". */ } \'\'\' { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.LITERAL_CHAR); } \' {} \n | <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } } { [^\n\\\$\"]+ {} \n { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } \\.? { /* Skip escaped chars. */ } {Variable} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } {VariableStart} {} \" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } <> { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/GroovyTokenMaker.java000066400000000000000000010071671257417003700320550ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 6/21/15 6:49 PM */ /* * 09/28/2007 * * GroovyTokenMaker.java - Scanner for the Groovy programming language. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for the Groovy programming language.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated GroovyTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.5 * */ public class GroovyTokenMaker extends AbstractJFlexCTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int EOL_COMMENT = 3; public static final int MULTILINE_STRING_DOUBLE = 4; public static final int DOCCOMMENT = 2; public static final int YYINITIAL = 0; public static final int MLC = 1; public static final int STRING_DOUBLE = 6; public static final int MULTILINE_STRING_SINGLE = 5; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\22\1\21\1\0\1\22\1\16\22\0\1\22\1\53\1\13"+ "\1\17\1\20\1\53\1\55\1\10\2\44\1\24\1\46\1\45\1\33"+ "\1\34\1\23\1\4\1\5\2\7\1\123\1\7\1\122\1\7\2\3"+ "\1\56\1\45\1\47\1\50\1\52\1\54\1\100\1\102\1\26\1\6"+ "\1\67\1\32\1\31\1\117\1\110\1\105\1\125\1\1\1\25\1\112"+ "\1\113\1\114\1\116\1\121\1\74\1\103\1\106\1\107\1\111\1\120"+ "\1\30\1\1\1\124\1\44\1\12\1\44\1\51\1\2\1\0\1\40"+ "\1\27\1\63\1\61\1\37\1\15\1\72\1\57\1\65\1\115\1\75"+ "\1\41\1\66\1\14\1\60\1\62\1\104\1\36\1\42\1\35\1\11"+ "\1\71\1\70\1\64\1\73\1\101\1\76\1\51\1\77\1\43\uff81\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\4\0\2\1\1\0\1\2\1\3\2\4\1\3\1\5"+ "\1\3\1\6\2\3\1\2\1\7\1\10\2\11\5\3"+ "\1\11\7\3\1\11\1\12\1\3\6\11\13\3\1\13"+ "\16\3\2\1\1\14\5\1\1\15\10\1\1\16\3\1"+ "\1\17\2\1\1\20\2\1\1\21\1\22\1\23\1\24"+ "\1\25\1\2\2\26\1\27\1\4\1\26\1\27\2\26"+ "\1\30\2\26\5\3\1\5\1\31\1\5\1\0\1\3"+ "\1\0\7\3\2\0\1\32\1\33\1\11\37\3\1\34"+ "\12\3\2\0\1\11\3\3\1\34\7\3\3\34\1\35"+ "\22\3\1\13\57\3\2\0\1\36\4\0\1\37\2\0"+ "\1\40\22\0\1\17\1\0\1\41\2\0\1\21\1\23"+ "\1\2\1\4\1\27\1\0\2\30\1\4\1\30\10\3"+ "\1\31\1\42\1\5\1\43\1\5\1\0\1\35\1\3"+ "\1\44\5\3\1\45\1\46\65\3\1\34\13\3\1\47"+ "\30\3\1\2\54\3\1\35\24\3\37\0\1\50\2\0"+ "\1\51\1\2\2\26\12\3\1\43\1\5\1\0\4\3"+ "\1\35\1\52\1\35\3\3\1\35\5\3\1\35\2\3"+ "\1\47\4\3\2\35\6\3\1\53\5\3\1\35\54\3"+ "\1\2\56\3\1\0\31\3\2\0\1\54\2\0\1\55"+ "\15\0\1\56\12\0\1\57\1\0\1\41\1\2\2\3"+ "\1\35\11\3\1\5\1\0\1\34\42\3\1\34\20\3"+ "\1\35\24\3\1\2\11\3\1\35\31\3\1\35\11\3"+ "\1\0\31\3\36\0\1\2\15\3\1\5\1\0\4\3"+ "\1\35\5\3\1\35\27\3\1\60\31\3\1\35\1\2"+ "\11\3\1\35\30\3\1\35\13\3\1\0\2\3\1\35"+ "\10\3\1\35\12\3\23\0\14\3\1\0\2\3\1\0"+ "\3\3\1\0\45\3\1\35\2\3\1\2\43\3\1\0"+ "\14\3\1\0\23\3\1\35\6\3\5\0\1\56\4\0"+ "\1\35\14\3\4\0\3\3\2\0\102\3\2\0\11\3"+ "\1\0\20\3\1\35\12\3\12\0\4\3\1\35\6\3"+ "\4\0\3\3\1\0\3\3\1\35\10\3\1\35\11\3"+ "\1\35\47\3\2\0\10\3\1\35\27\3\5\0\4\3"+ "\1\0\2\3\1\35\2\3\4\0\1\3\1\0\3\3"+ "\1\0\57\3\2\0\32\3\5\0\3\3\2\0\3\3"+ "\4\0\3\3\1\0\1\35\14\3\1\35\10\3\1\35"+ "\5\3\1\35\12\3\2\0\15\3\1\35\5\3\2\0"+ "\2\3\2\0\3\3\4\0\3\3\1\0\10\3\1\35"+ "\3\3\1\0\1\3\1\35\2\3\1\35\2\3\1\0"+ "\1\35\15\3\1\0\14\3\1\35\3\3\1\35\5\3"+ "\2\0\2\3\3\0\2\3\1\0\2\3\1\35\10\3"+ "\1\0\2\3\2\0\12\3\1\0\23\3\2\0\1\3"+ "\2\0\2\3\1\0\5\3\1\35\1\3\1\0\2\3"+ "\2\0\12\3\1\0\14\3\1\35\2\3\2\0\1\3"+ "\2\0\2\3\1\0\4\3\1\0\1\3\1\0\1\3"+ "\5\0\11\3\1\0\11\3\1\0\2\3\1\0\1\3"+ "\2\0\1\3\1\0\2\3\1\0\1\3\5\0\10\3"+ "\1\0\6\3\1\0\1\3\3\0\1\3\1\0\1\3"+ "\1\0\1\3\5\0\5\3\1\0\3\3\1\35\1\3"+ "\1\0\1\35\4\0\1\3\1\0\1\3\1\0\1\3"+ "\4\0\3\3\1\0\3\3\1\0\1\35\4\0\1\3"+ "\1\0\1\3\4\0\2\3\1\0\2\3\6\0\1\3"+ "\1\0\1\3\4\0\1\3\7\0\1\3\1\0\1\3"+ "\30\0\1\35\37\0"; private static int [] zzUnpackAction() { int [] result = new int[2058]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\126\0\254\0\u0102\0\u0158\0\u01ae\0\u0204\0\u025a"+ "\0\u02b0\0\u0306\0\u035c\0\u03b2\0\u0408\0\u045e\0\u04b4\0\u050a"+ "\0\u0560\0\u05b6\0\u05b6\0\u060c\0\u0662\0\u06b8\0\u070e\0\u0764"+ "\0\u07ba\0\u0810\0\u0866\0\u08bc\0\u0912\0\u0968\0\u09be\0\u0a14"+ "\0\u0a6a\0\u0ac0\0\u0b16\0\u0b6c\0\u05b6\0\u05b6\0\u0bc2\0\u0c18"+ "\0\u0c6e\0\u0cc4\0\u05b6\0\u0d1a\0\u0d70\0\u0dc6\0\u0e1c\0\u0e72"+ "\0\u0ec8\0\u0f1e\0\u0f74\0\u0fca\0\u1020\0\u1076\0\u10cc\0\u1122"+ "\0\u1178\0\u11ce\0\u1224\0\u127a\0\u12d0\0\u1326\0\u137c\0\u13d2"+ "\0\u1428\0\u147e\0\u14d4\0\u152a\0\u1580\0\u15d6\0\u162c\0\u1682"+ "\0\u05b6\0\u16d8\0\u172e\0\u1784\0\u17da\0\u1830\0\u05b6\0\u1886"+ "\0\u18dc\0\u1932\0\u1988\0\u19de\0\u1a34\0\u1a8a\0\u1ae0\0\u05b6"+ "\0\u1b36\0\u1b8c\0\u1be2\0\u1c38\0\u1c8e\0\u1ce4\0\u05b6\0\u1d3a"+ "\0\u1d90\0\u1de6\0\u05b6\0\u1e3c\0\u05b6\0\u05b6\0\u1e92\0\u1ee8"+ "\0\u1f3e\0\u1ee8\0\u1ee8\0\u1f94\0\u1fea\0\u2040\0\u2096\0\u20ec"+ "\0\u2142\0\u2198\0\u21ee\0\u2244\0\u229a\0\u22f0\0\u2346\0\u239c"+ "\0\u23f2\0\u2448\0\u249e\0\u24f4\0\u254a\0\u25a0\0\u25f6\0\u264c"+ "\0\u26a2\0\u26f8\0\u274e\0\u27a4\0\u27fa\0\u2850\0\u05b6\0\u28a6"+ "\0\u27fa\0\u28fc\0\u2952\0\u29a8\0\u29fe\0\u2a54\0\u2aaa\0\u2b00"+ "\0\u2b56\0\u2bac\0\u2c02\0\u2c58\0\u2cae\0\u2d04\0\u2d5a\0\u2db0"+ "\0\u2e06\0\u2e5c\0\u2eb2\0\u2f08\0\u2f5e\0\u2fb4\0\u300a\0\u3060"+ "\0\u30b6\0\u310c\0\u3162\0\u31b8\0\u320e\0\u3264\0\u32ba\0\u3310"+ "\0\u3366\0\u33bc\0\u3412\0\u3468\0\u34be\0\u3514\0\u356a\0\u35c0"+ "\0\u3616\0\u366c\0\u36c2\0\u3718\0\u06b8\0\u376e\0\u37c4\0\u381a"+ "\0\u3870\0\u38c6\0\u391c\0\u3972\0\u39c8\0\u3a1e\0\u3a74\0\u3aca"+ "\0\u3b20\0\u3b76\0\u02b0\0\u3bcc\0\u3c22\0\u3c78\0\u3cce\0\u3d24"+ "\0\u3d7a\0\u3dd0\0\u3e26\0\u3e7c\0\u3ed2\0\u3f28\0\u3f7e\0\u3fd4"+ "\0\u402a\0\u4080\0\u40d6\0\u412c\0\u4182\0\u41d8\0\u422e\0\u4284"+ "\0\u42da\0\u4330\0\u4386\0\u43dc\0\u4432\0\u4488\0\u44de\0\u4534"+ "\0\u458a\0\u45e0\0\u4636\0\u468c\0\u46e2\0\u4738\0\u478e\0\u47e4"+ "\0\u483a\0\u4890\0\u48e6\0\u493c\0\u4992\0\u49e8\0\u4a3e\0\u4a94"+ "\0\u4aea\0\u4b40\0\u4b96\0\u4bec\0\u4c42\0\u4c98\0\u4cee\0\u4d44"+ "\0\u4d9a\0\u4df0\0\u4e46\0\u4e9c\0\u4ef2\0\u4f48\0\u4f9e\0\u4ff4"+ "\0\u504a\0\u50a0\0\u50f6\0\u514c\0\u51a2\0\u51f8\0\u524e\0\u52a4"+ "\0\u52fa\0\u05b6\0\u5350\0\u53a6\0\u53fc\0\u5452\0\u05b6\0\u54a8"+ "\0\u54fe\0\u05b6\0\u5554\0\u55aa\0\u5600\0\u5656\0\u56ac\0\u5702"+ "\0\u5758\0\u57ae\0\u5804\0\u585a\0\u58b0\0\u5906\0\u595c\0\u59b2"+ "\0\u5a08\0\u5a5e\0\u5ab4\0\u5b0a\0\u05b6\0\u5b60\0\u5bb6\0\u5c0c"+ "\0\u5c62\0\u05b6\0\u05b6\0\u5cb8\0\u5d0e\0\u5d64\0\u5dba\0\u5e10"+ "\0\u1ee8\0\u5e66\0\u5ebc\0\u5f12\0\u5f68\0\u5fbe\0\u6014\0\u606a"+ "\0\u60c0\0\u6116\0\u616c\0\u05b6\0\u05b6\0\u61c2\0\u249e\0\u6218"+ "\0\u626e\0\u02b0\0\u62c4\0\u05b6\0\u631a\0\u6370\0\u63c6\0\u641c"+ "\0\u6472\0\u05b6\0\u64c8\0\u651e\0\u6574\0\u65ca\0\u6620\0\u6676"+ "\0\u66cc\0\u6722\0\u6778\0\u67ce\0\u6824\0\u687a\0\u68d0\0\u6926"+ "\0\u697c\0\u69d2\0\u6a28\0\u6a7e\0\u6ad4\0\u6b2a\0\u6b80\0\u6bd6"+ "\0\u6c2c\0\u6c82\0\u6cd8\0\u6d2e\0\u6d84\0\u6dda\0\u6e30\0\u6e86"+ "\0\u6edc\0\u6f32\0\u6f88\0\u6fde\0\u7034\0\u708a\0\u70e0\0\u7136"+ "\0\u718c\0\u71e2\0\u7238\0\u728e\0\u72e4\0\u733a\0\u7390\0\u73e6"+ "\0\u743c\0\u7492\0\u74e8\0\u753e\0\u7594\0\u75ea\0\u7640\0\u7696"+ "\0\u76ec\0\u7742\0\u7798\0\u77ee\0\u7844\0\u789a\0\u78f0\0\u7946"+ "\0\u799c\0\u79f2\0\u7a48\0\u7a9e\0\u7af4\0\u7b4a\0\u7ba0\0\u7bf6"+ "\0\u7c4c\0\u7ca2\0\u7cf8\0\u7d4e\0\u7da4\0\u7dfa\0\u7e50\0\u7ea6"+ "\0\u7efc\0\u7f52\0\u7fa8\0\u7ffe\0\u8054\0\u80aa\0\u8100\0\u8156"+ "\0\u81ac\0\u8202\0\u8258\0\u82ae\0\u8304\0\u835a\0\u83b0\0\u8406"+ "\0\u845c\0\u84b2\0\u8508\0\u855e\0\u85b4\0\u860a\0\u8660\0\u86b6"+ "\0\u870c\0\u8762\0\u87b8\0\u880e\0\u8864\0\u88ba\0\u8910\0\u8966"+ "\0\u89bc\0\u8a12\0\u8a68\0\u8abe\0\u8b14\0\u8b6a\0\u8bc0\0\u8c16"+ "\0\u8c6c\0\u8cc2\0\u8d18\0\u8d6e\0\u8dc4\0\u8e1a\0\u8e70\0\u8ec6"+ "\0\u8f1c\0\u8f72\0\u8fc8\0\u901e\0\u9074\0\u90ca\0\u9120\0\u9176"+ "\0\u91cc\0\u9222\0\u9278\0\u92ce\0\u9324\0\u937a\0\u93d0\0\u9426"+ "\0\u947c\0\u94d2\0\u9528\0\u957e\0\u95d4\0\u962a\0\u9680\0\u96d6"+ "\0\u972c\0\u9782\0\u97d8\0\u982e\0\u9884\0\u98da\0\u9930\0\u9986"+ "\0\u99dc\0\u9a32\0\u9a88\0\u9ade\0\u9b34\0\u9b8a\0\u9be0\0\u9c36"+ "\0\u9c8c\0\u9ce2\0\u9d38\0\u9d8e\0\u9de4\0\u9e3a\0\u9e90\0\u9ee6"+ "\0\u9f3c\0\u9f92\0\u9fe8\0\ua03e\0\ua094\0\ua0ea\0\ua140\0\ua196"+ "\0\ua1ec\0\ua242\0\ua298\0\ua2ee\0\ua344\0\ua39a\0\u05b6\0\ua3f0"+ "\0\ua446\0\u05b6\0\ua49c\0\u5e66\0\ua4f2\0\ua548\0\ua59e\0\ua5f4"+ "\0\ua64a\0\ua6a0\0\ua6f6\0\ua74c\0\ua7a2\0\ua7f8\0\ua84e\0\u05b6"+ "\0\ua8a4\0\ua8fa\0\ua950\0\ua9a6\0\ua9fc\0\uaa52\0\uaaa8\0\u05b6"+ "\0\uaafe\0\uab54\0\uabaa\0\uac00\0\uac56\0\uacac\0\uad02\0\uad58"+ "\0\uadae\0\uae04\0\uae5a\0\uaeb0\0\uaf06\0\u02b0\0\uaf5c\0\uafb2"+ "\0\ub008\0\ub05e\0\ub0b4\0\ub10a\0\ub160\0\ub1b6\0\ub20c\0\ub262"+ "\0\ub2b8\0\ub30e\0\u02b0\0\ub364\0\ub3ba\0\ub410\0\ub466\0\ub4bc"+ "\0\ub512\0\ub568\0\ub5be\0\ub614\0\ub66a\0\ub6c0\0\ub716\0\ub76c"+ "\0\ub7c2\0\ub818\0\ub86e\0\ub8c4\0\ub91a\0\ub970\0\ub9c6\0\uba1c"+ "\0\uba72\0\ubac8\0\ubb1e\0\ubb74\0\ubbca\0\ubc20\0\ubc76\0\ubccc"+ "\0\ubd22\0\ubd78\0\ubdce\0\ube24\0\ube7a\0\ubed0\0\ubf26\0\ubf7c"+ "\0\ubfd2\0\uc028\0\uc07e\0\uc0d4\0\uc12a\0\uc180\0\uc1d6\0\uc22c"+ "\0\uc282\0\uc2d8\0\uc32e\0\uc384\0\uc3da\0\uc430\0\uc486\0\uc4dc"+ "\0\uc532\0\uc588\0\uc5de\0\uc634\0\uc68a\0\uc6e0\0\uc736\0\uc78c"+ "\0\uc7e2\0\uc838\0\uc88e\0\uc8e4\0\uc93a\0\uc990\0\uc9e6\0\uca3c"+ "\0\uca92\0\ucae8\0\ucb3e\0\ucb94\0\ucbea\0\ucc40\0\ucc96\0\uccec"+ "\0\ucd42\0\ucd98\0\ucdee\0\uce44\0\uce9a\0\ucef0\0\ucf46\0\ucf9c"+ "\0\ucff2\0\ud048\0\ud09e\0\ud0f4\0\ud14a\0\ud1a0\0\ud1f6\0\ud24c"+ "\0\ud2a2\0\ud2f8\0\ud34e\0\ud3a4\0\ud3fa\0\ud450\0\ud4a6\0\ud4fc"+ "\0\ud552\0\ud5a8\0\ud5fe\0\ud654\0\ud6aa\0\ud700\0\ud756\0\ud7ac"+ "\0\ud802\0\ud858\0\ud8ae\0\ud904\0\ud95a\0\ud9b0\0\uda06\0\uda5c"+ "\0\udab2\0\udb08\0\udb5e\0\udbb4\0\udc0a\0\udc60\0\udcb6\0\udd0c"+ "\0\udd62\0\uddb8\0\ude0e\0\ude64\0\udeba\0\udf10\0\udf66\0\udfbc"+ "\0\ue012\0\ue068\0\ue0be\0\ue114\0\ue16a\0\ue1c0\0\ue216\0\ue26c"+ "\0\ue2c2\0\u05b6\0\ue318\0\ue36e\0\ue3c4\0\ue41a\0\ue470\0\ue4c6"+ "\0\ue51c\0\ue572\0\ue5c8\0\ue61e\0\ue674\0\ue6ca\0\u05b6\0\ue720"+ "\0\ue776\0\ue7cc\0\ue822\0\ue878\0\ue8ce\0\ue924\0\ue97a\0\ue9d0"+ "\0\uea26\0\uea7c\0\uead2\0\ueb28\0\ueb7e\0\uebd4\0\uec2a\0\uec80"+ "\0\uecd6\0\ued2c\0\ued82\0\uedd8\0\uee2e\0\uee84\0\ueeda\0\uef30"+ "\0\uef86\0\uefdc\0\uf032\0\uf088\0\uf0de\0\uf134\0\uf18a\0\uf1e0"+ "\0\uf236\0\uf28c\0\uf2e2\0\uf338\0\uf38e\0\uf3e4\0\uf43a\0\uf490"+ "\0\uf4e6\0\uf53c\0\uf592\0\uf5e8\0\uf63e\0\uf694\0\uf6ea\0\uf740"+ "\0\uf796\0\u6e30\0\uf7ec\0\uf842\0\uf898\0\uf8ee\0\uf944\0\uf99a"+ "\0\uf9f0\0\ufa46\0\ufa9c\0\ufaf2\0\ufb48\0\ufb9e\0\ufbf4\0\ufc4a"+ "\0\ufca0\0\ufcf6\0\ufd4c\0\ufda2\0\ufdf8\0\ufe4e\0\ufea4\0\ufefa"+ "\0\uff50\0\uffa6\0\ufffc\1\122\1\250\1\376\1\u0154\1\u01aa"+ "\1\u0200\1\u0256\1\u02ac\1\u0302\1\u0358\1\u03ae\1\u0404\1\u045a"+ "\1\u04b0\1\u0506\1\u055c\1\u05b2\1\u0608\1\u065e\1\u06b4\1\u070a"+ "\1\u0760\1\u07b6\1\u080c\1\u0862\1\u08b8\1\u090e\1\u0964\1\u09ba"+ "\1\u0a10\1\u0a66\1\u0abc\1\u0b12\1\u0b68\1\u0bbe\1\u0c14\1\u0c6a"+ "\1\u0cc0\1\u0d16\1\u0d6c\1\u0dc2\1\u0e18\1\u0e6e\1\u0ec4\1\u0f1a"+ "\1\u0f70\1\u0fc6\1\u101c\1\u1072\1\u10c8\1\u111e\1\u1174\1\u11ca"+ "\1\u1220\1\u1276\1\u12cc\1\u1322\1\u1378\1\u13ce\1\u1424\1\u147a"+ "\1\u14d0\1\u1526\1\u157c\1\u15d2\1\u1628\1\u167e\1\u16d4\1\u172a"+ "\1\u1780\1\u17d6\1\u182c\1\u1882\1\u18d8\1\u192e\1\u1984\1\u19da"+ "\1\u1a30\1\u1a86\1\u1adc\1\u1b32\1\u1b88\1\u1bde\1\u1c34\1\u1c8a"+ "\0\udd62\1\u1ce0\0\ude64\1\u1d36\1\u1d8c\1\u1de2\1\u1e38\1\u1e8e"+ "\1\u1ee4\1\u1f3a\1\u1f90\1\u1fe6\1\u203c\1\u2092\1\u20e8\1\u213e"+ "\1\u2194\1\u21ea\1\u2240\1\u2296\1\u22ec\1\u2342\1\u2398\1\u23ee"+ "\1\u2444\1\u249a\1\u24f0\0\ue674\1\u2546\1\u259c\1\u25f2\1\u2648"+ "\1\u269e\1\u26f4\1\u274a\1\u27a0\1\u27f6\1\u284c\1\u28a2\1\u28f8"+ "\1\u294e\1\u29a4\1\u29fa\1\u2a50\1\u2aa6\1\u2afc\1\u2b52\1\u2ba8"+ "\1\u2bfe\1\u2c54\1\u2caa\1\u2d00\1\u2d56\1\u2dac\0\u3bcc\1\u2e02"+ "\1\u2e58\1\u2eae\1\u2f04\1\u2f5a\1\u2fb0\1\u3006\1\u305c\1\u30b2"+ "\1\u3108\1\u315e\1\u31b4\1\u320a\1\u3260\1\u32b6\1\u330c\1\u3362"+ "\1\u33b8\1\u340e\1\u3464\1\u34ba\1\u3510\1\u3566\1\u35bc\0\u02b0"+ "\1\u3612\1\u3668\1\u36be\1\u3714\1\u376a\1\u37c0\1\u3816\1\u386c"+ "\1\u38c2\1\u3918\1\u396e\1\u39c4\1\u3a1a\1\u3a70\1\u3ac6\1\u3b1c"+ "\1\u3b72\1\u3bc8\1\u3c1e\1\u3c74\1\u3cca\1\u3d20\1\u3d76\1\u3dcc"+ "\1\u3e22\1\u3e78\1\u3ece\1\u3f24\1\u3f7a\1\u3fd0\1\u4026\1\u407c"+ "\1\u40d2\1\u4128\1\u417e\1\u41d4\1\u422a\1\u4280\1\u42d6\1\u432c"+ "\1\u4382\1\u43d8\1\u442e\1\u4484\1\u44da\1\u4530\1\u4586\1\u45dc"+ "\1\u4632\1\u4688\1\u46de\1\u4734\1\u478a\1\u47e0\1\u4836\1\u488c"+ "\1\u48e2\1\u4938\1\u498e\1\u49e4\1\u4a3a\1\u4a90\1\u4ae6\1\u4b3c"+ "\1\u4b92\1\u4be8\1\u4c3e\1\u4c94\1\u4cea\1\u4d40\1\u4d96\1\u4dec"+ "\1\u4e42\1\u4e98\1\u4eee\1\u4f44\1\u4f9a\1\u4ff0\1\u5046\1\u509c"+ "\1\u50f2\1\u5148\1\u519e\1\u51f4\1\u524a\1\u52a0\1\u52f6\1\u534c"+ "\1\u53a2\1\u53f8\1\u544e\1\u54a4\1\u54fa\1\u5550\1\u55a6\1\u55fc"+ "\1\u5652\1\u56a8\1\u56fe\1\u5754\1\u57aa\1\u5800\1\u5856\1\u58ac"+ "\1\u5902\1\u5958\1\u59ae\1\u5a04\1\u5a5a\1\u5ab0\1\u5b06\1\u5b5c"+ "\1\u5bb2\1\u5c08\1\u5c5e\1\u5cb4\1\u5d0a\1\u5d60\1\u5db6\1\u5e0c"+ "\1\u5e62\1\u5eb8\1\u5f0e\1\u5f64\1\u5fba\1\u6010\1\u6066\1\u60bc"+ "\1\u6112\1\u6168\1\u61be\1\u6214\1\u626a\1\u62c0\1\u6316\1\u636c"+ "\1\u63c2\1\u6418\1\u646e\1\u64c4\1\u651a\1\u6570\1\u65c6\1\u661c"+ "\1\u6672\1\u66c8\1\u671e\1\u6774\1\u67ca\1\u6820\1\u6876\1\u68cc"+ "\1\u6922\1\u6978\1\u69ce\1\u6a24\1\u6a7a\1\u6ad0\1\u6b26\1\u6b7c"+ "\1\u6bd2\1\u6c28\1\u6c7e\1\u6cd4\1\u6d2a\1\u6d80\1\u6dd6\1\u6e2c"+ "\1\u6e82\1\u6ed8\1\u6f2e\1\u6f84\1\u6fda\1\u7030\1\u7086\1\u70dc"+ "\1\u7132\1\u7188\1\u71de\1\u7234\1\u728a\1\u72e0\1\u7336\1\u738c"+ "\1\u73e2\1\u7438\1\u748e\1\u74e4\1\u753a\1\u7590\1\u75e6\1\u763c"+ "\1\u7692\1\u76e8\1\u773e\1\u7794\1\u77ea\1\u7840\1\u7896\1\u78ec"+ "\1\u7942\1\u7998\1\u79ee\1\u7a44\1\u7a9a\1\u7af0\1\u7b46\1\u7b9c"+ "\1\u7bf2\1\u7c48\1\u7c9e\1\u7cf4\1\u7d4a\1\u7da0\1\u7df6\1\u7e4c"+ "\1\u7ea2\1\u7ef8\1\u7f4e\1\u7fa4\1\u7ffa\1\u4f9a\1\u8050\1\u80a6"+ "\1\u80fc\1\u8152\1\u81a8\1\u81fe\1\u8254\1\u82aa\1\u8300\1\u8356"+ "\1\u83ac\1\u8402\1\u8458\1\u84ae\1\u8504\1\u855a\1\u85b0\1\u8606"+ "\1\u865c\1\u86b2\1\u8708\1\u875e\1\u87b4\1\u880a\1\u8860\1\u88b6"+ "\1\u890c\1\u8962\1\u89b8\1\u8a0e\1\u8a64\1\u8aba\1\u8b10\1\u8b66"+ "\1\u8bbc\1\u8c12\1\u8c68\1\u8cbe\1\u8d14\1\u8d6a\1\u8dc0\1\u8e16"+ "\1\u8e6c\1\u8ec2\1\u8f18\1\u8f6e\1\u8fc4\1\u901a\1\u9070\1\u90c6"+ "\1\u911c\1\u9172\1\u91c8\1\u921e\1\u9274\1\u92ca\1\u9320\1\u9376"+ "\1\u93cc\1\u9422\1\u9478\1\u94ce\1\u9524\1\u957a\1\u95d0\1\u9626"+ "\1\u967c\1\u96d2\1\u9728\1\u977e\1\u97d4\1\u982a\1\u9880\1\u98d6"+ "\1\u992c\1\u9982\1\u99d8\1\u9a2e\1\u9a84\1\u9ada\1\u9b30\1\u9b86"+ "\1\u9bdc\1\u9c32\1\u9c88\1\u9cde\1\u9d34\1\u9d8a\1\u9de0\1\u9e36"+ "\1\u9e8c\1\u9ee2\1\u9f38\1\u9f8e\1\u9fe4\1\ua03a\1\ua090\1\ua0e6"+ "\1\ua13c\1\ua192\1\ua1e8\1\ua23e\1\ua294\1\ua2ea\1\ua340\1\ua396"+ "\1\ua3ec\1\ua442\1\ua498\1\ua4ee\1\ua544\1\ua59a\1\ua5f0\1\ua646"+ "\1\ua69c\1\ua6f2\1\ua748\1\ua79e\1\ua7f4\1\ua84a\1\ua8a0\1\ua8f6"+ "\1\ua94c\1\ua9a2\1\ua9f8\1\uaa4e\1\uaaa4\1\uaafa\1\uab50\1\uaba6"+ "\1\uabfc\1\uac52\1\uaca8\1\uacfe\1\uad54\1\uadaa\1\uae00\1\uae56"+ "\1\uaeac\1\uaf02\1\uaf58\1\uafae\1\ub004\1\ub05a\1\ub0b0\1\ub106"+ "\1\ub15c\1\ub1b2\1\ub208\1\ub25e\1\ub2b4\1\ub30a\1\ub360\1\ub3b6"+ "\1\ub40c\1\ub462\1\ub4b8\1\ub50e\1\ub564\1\ub5ba\1\ub610\1\ub666"+ "\1\ub6bc\1\ub712\1\ub768\1\ub7be\1\ub814\1\ub86a\1\ub8c0\1\ub916"+ "\1\ub96c\1\ub9c2\1\uba18\1\uba6e\1\ubac4\1\ubb1a\1\ubb70\1\ubbc6"+ "\1\ubc1c\1\ubc72\1\ubcc8\1\ubd1e\1\ubd74\1\ubdca\1\ube20\1\ube76"+ "\1\ubecc\1\ubf22\1\ubf78\1\ubfce\1\uc024\1\uc07a\1\uc0d0\1\uc126"+ "\1\uc17c\1\uc1d2\1\uc228\1\uc27e\1\uc2d4\1\uc32a\1\uc380\1\uc3d6"+ "\1\uc42c\1\uc482\1\uc4d8\1\uc52e\1\uc584\1\uc5da\1\uc630\1\uc686"+ "\1\uc6dc\1\uc732\1\uc788\1\uc7de\1\uc834\1\uc88a\1\uc8e0\1\uc3d6"+ "\1\uc936\1\uc98c\1\uc9e2\1\uca38\1\uca8e\1\ucae4\1\ucb3a\1\ucb90"+ "\1\ucbe6\1\ucc3c\1\ucc92\1\ucce8\1\ucd3e\1\ucd94\1\ucdea\1\uce40"+ "\1\uce96\1\uceec\1\ucf42\1\ucf98\1\ucfee\1\ud044\1\ud09a\1\ud0f0"+ "\1\ud146\1\ud19c\1\ud1f2\1\ud248\1\ud29e\1\ud2f4\1\ud34a\1\ud3a0"+ "\1\ud3f6\1\ud44c\1\ud4a2\1\ud4f8\1\ud54e\1\ud5a4\1\ud5fa\1\ud650"+ "\1\ud6a6\1\ud6fc\1\ud752\1\ud7a8\1\ud7fe\1\ud854\1\ud8aa\1\ud900"+ "\1\ud956\0\u05b6\1\ud9ac\1\uda02\1\uda58\1\udaae\1\udb04\1\udb5a"+ "\1\udbb0\1\udc06\1\udc5c\1\udcb2\1\udd08\1\udd5e\1\uddb4\1\ude0a"+ "\1\ude60\1\udeb6\1\udf0c\1\udf62\1\udfb8\1\ue00e\1\ue064\1\ue0ba"+ "\1\ue110\1\ue166\1\ue1bc\1\ue212\1\ue268\1\ue2be\1\ue314\1\ue36a"+ "\1\ue3c0\1\ue416\1\ue46c\1\ue4c2\1\ue518\1\u9cde\1\ue56e\1\ue5c4"+ "\1\ue61a\1\ue670\1\ue6c6\1\ue71c\1\ue772\1\ue7c8\1\ue81e\1\ue874"+ "\1\ue8ca\1\ue920\1\ue976\1\ue9cc\1\uea22\1\uea78\1\ueace\1\ueb24"+ "\1\ueb7a\1\uebd0\1\uec26\1\uec7c\1\uecd2\1\ued28\1\ued7e\1\uedd4"+ "\1\uee2a\1\uee80\1\ueed6\1\uef2c\1\uef82\1\uefd8\1\uf02e\1\uf084"+ "\1\uf0da\1\uf130\1\uf186\1\uf1dc\1\uf232\1\uf288\1\uf2de\1\uf334"+ "\1\uf38a\1\uf3e0\1\uf436\1\uf48c\1\uf4e2\1\uf538\1\uf58e\1\uf5e4"+ "\1\uf63a\1\uf690\1\uf6e6\1\uf73c\1\uf792\1\uf7e8\1\uf83e\1\uf894"+ "\1\uf8ea\1\uf940\1\uf996\1\uf9ec\1\ufa42\1\ufa98\1\ufaee\1\ufb44"+ "\1\ufb9a\1\ufbf0\1\ufc46\1\ufc9c\1\ufcf2\1\ufd48\1\ufd9e\1\ufdf4"+ "\1\ufe4a\1\ufea0\1\ufef6\1\uff4c\1\uffa2\1\ufff8\2\116\2\244"+ "\2\372\2\u0150\2\u01a6\2\u01fc\2\u0252\2\u02a8\2\u02fe\2\u0354"+ "\2\u03aa\2\u0400\2\u0456\2\u04ac\2\u0502\2\u0558\2\u05ae\2\u0604"+ "\2\u065a\2\u06b0\2\u0706\2\u075c\2\u07b2\2\u0808\2\u085e\2\u08b4"+ "\2\u090a\2\u0960\2\u09b6\2\u0a0c\2\u0a62\2\u0ab8\2\u0b0e\2\u0b64"+ "\2\u0bba\2\u0c10\2\u0c66\2\u0cbc\2\u0d12\2\u0d68\2\u0dbe\2\u0e14"+ "\2\u0e6a\2\u0ec0\2\u0f16\2\u0f6c\2\u0fc2\2\u1018\2\u106e\2\u10c4"+ "\2\u111a\2\u1170\2\u11c6\2\u121c\2\u1272\2\u12c8\2\u131e\2\u1374"+ "\2\u13ca\2\u1420\2\u1476\2\u14cc\2\u1522\2\u1578\2\u15ce\2\u1624"+ "\2\u167a\2\u16d0\2\u1726\2\u177c\2\u17d2\2\u1828\2\u187e\2\u18d4"+ "\2\u192a\2\u1980\2\u19d6\2\u1a2c\2\u1a82\2\u1ad8\2\u1b2e\2\u1b84"+ "\2\u1bda\2\u1c30\2\u1c86\2\u1cdc\2\u1d32\2\u1d88\2\u1dde\2\u1e34"+ "\2\u1e8a\2\u1ee0\2\u1f36\2\u1f8c\2\u1fe2\2\u2038\2\u208e\2\u20e4"+ "\2\u213a\2\u2190\2\u21e6\2\u223c\2\u2292\2\u22e8\2\u233e\2\u2394"+ "\2\u23ea\2\u2440\2\u2496\2\u24ec\2\u2542\2\u2598\2\u25ee\2\u2644"+ "\2\u269a\2\u26f0\2\u2746\2\u279c\2\u27f2\1\ua396\2\u2848\2\u289e"+ "\2\u28f4\2\u294a\2\u29a0\2\u29f6\2\u2a4c\2\u2aa2\2\u2af8\2\u2b4e"+ "\2\u2ba4\2\u2bfa\2\u2c50\2\u2ca6\2\u2cfc\2\u2d52\2\u2da8\2\u2dfe"+ "\2\u2e54\2\u2eaa\2\u2f00\2\u2f56\2\u2fac\2\u3002\2\u3058\2\u30ae"+ "\2\u3104\2\u315a\2\u31b0\2\u3206\2\u325c\2\u32b2\2\u3308\2\u335e"+ "\2\u33b4\2\u340a\2\u3460\2\u34b6\2\u350c\2\u3562\2\u35b8\2\u360e"+ "\2\u3664\2\u36ba\2\u3710\2\u3766\2\u37bc\2\u3812\2\u3868\2\u38be"+ "\2\u3914\2\u396a\2\u39c0\2\u3a16\2\u3a6c\2\u3ac2\2\u3b18\2\u3b6e"+ "\2\u3bc4\2\u3c1a\2\u3c70\2\u3cc6\2\u3d1c\2\u3d72\2\u3dc8\2\u3e1e"+ "\2\u3e74\2\u3eca\2\u3f20\2\u3f76\2\u3fcc\2\u4022\2\u4078\2\u40ce"+ "\2\u4124\2\u417a\2\u41d0\2\u4226\2\u427c\2\u42d2\2\u4328\2\u437e"+ "\2\u43d4\2\u442a\2\u4480\2\u44d6\2\u452c\2\u4582\2\u45d8\2\u462e"+ "\2\u4684\2\u46da\2\u4730\2\u4786\2\u47dc\2\u4832\2\u4888\2\u48de"+ "\2\u4934\2\u498a\2\u49e0\2\u4a36\2\u4a8c\2\u4ae2\2\u4b38\2\u4b8e"+ "\2\u4be4\2\u4c3a\2\u4c90\2\u4ce6\2\u4d3c\2\u4d92\2\u4de8\2\u4e3e"+ "\2\u4e94\2\u4eea\2\u4f40\2\u4f96\2\u4fec\2\u5042\2\u5098\2\u50ee"+ "\2\u5144\2\u519a\2\u51f0\2\u5246\2\u529c\2\u52f2\2\u5348\2\u539e"+ "\2\u53f4\2\u544a\2\u54a0\2\u54f6\2\u554c\2\u55a2\2\u55f8\2\u564e"+ "\2\u56a4\2\u56fa\2\u5750\2\u57a6\2\u57fc\2\u5852\2\u58a8\2\u58fe"+ "\2\u5954\2\u59aa\2\u5a00\2\u5a56\2\u5aac\2\u5b02\2\u5b58\2\u5bae"+ "\2\u5c04\2\u5c5a\2\u5cb0\2\u5d06\2\u5d5c\2\u5db2\2\u5e08\2\u5e5e"+ "\2\u5eb4\2\u5f0a\2\u5f60\2\u5fb6\2\u600c\2\u6062\2\u60b8\2\u610e"+ "\2\u6164\2\u61ba\2\u6210\2\u6266\2\u62bc\2\u6312\2\u6368\2\u63be"+ "\2\u6414\2\u646a\2\u64c0\2\u6516\2\u656c\2\u65c2\2\u6618\2\u666e"+ "\2\u66c4\2\u671a\2\u6770\2\u67c6\2\u681c\2\u6872\2\u68c8\2\u691e"+ "\2\u6974\2\u69ca\2\u6a20\2\u6a76\2\u6acc\2\u6b22\2\u6b78\2\u6bce"+ "\2\u6c24\2\u6c7a\2\u6cd0\2\u6d26\2\u6d7c\2\u6dd2\2\u6e28\2\u6e7e"+ "\2\u6ed4\2\u6f2a\2\u6f80\2\u6fd6\2\u702c\2\u7082\2\u70d8\2\u712e"+ "\2\u7184\2\u71da\2\u7230\2\u7286\2\u72dc\2\u7332\2\u7388\2\u73de"+ "\2\u7434\2\u748a\2\u74e0\2\u7536\2\u758c\2\u75e2\2\u7638\2\u768e"+ "\2\u76e4\2\u773a\2\u7790\2\u77e6\2\u783c\2\u7892\2\u78e8\2\u793e"+ "\2\u7994\2\u79ea\2\u7a40\2\u7a96\2\u7aec\2\u7b42\2\u7b98\2\u7bee"+ "\2\u7c44\2\u7c9a\2\u7cf0\2\u7d46\2\u7d9c\2\u7df2\2\u7e48\2\u7e9e"+ "\2\u7ef4\2\u7f4a\2\u7fa0\2\u7ff6\2\u804c\2\u80a2\2\u80f8\2\u814e"+ "\2\u81a4\2\u81fa\2\u8250\2\u82a6\2\u82fc\2\u8352\2\u83a8\2\u83fe"+ "\2\u8454\2\u84aa\2\u8500\2\u8556\2\u85ac\2\u8602\2\u8658\2\u86ae"+ "\2\u8704\2\u875a\2\u87b0\2\u8806\2\u885c\2\u88b2\2\u8908\2\u895e"+ "\2\u89b4\2\u8a0a\2\u8a60\2\u8ab6\2\u8b0c\2\u8b62\2\u8bb8\2\u8c0e"+ "\2\u8c64\2\u8cba\2\u8d10\2\u8d66\2\u8dbc\2\u8e12\2\u8e68\2\u8ebe"+ "\2\u8f14\2\u8f6a\2\u8fc0\2\u9016\2\u906c\2\u90c2\2\u9118\2\u916e"+ "\2\u91c4\2\u921a\2\u9270\2\u92c6\2\u931c\2\u9372\2\u93c8\2\u941e"+ "\2\u9474\2\u94ca\2\u9520\2\u9576\2\u95cc\2\u9622\2\u9678\2\u96ce"+ "\2\u9724\2\u977a\2\u97d0\2\u9826\2\u987c\2\u98d2\2\u9928\2\u997e"+ "\2\u99d4\2\u9a2a\2\u9a80\2\u9ad6\2\u9b2c\2\u9b82\2\u9bd8\2\u9c2e"+ "\2\u9c84\2\u9cda\2\u9d30\2\u9d86\2\u9ddc\2\u9e32\2\u9e88\2\u9ede"+ "\2\u9f34\2\u9f8a\2\u9fe0\2\ua036\2\ua08c\2\ua0e2\2\ua138\2\ua18e"+ "\2\ua1e4\2\ua23a"; private static int [] zzUnpackRowMap() { int [] result = new int[2058]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\10\2\11\1\12\1\13\1\12\1\14\1\12\1\15"+ "\1\16\1\10\1\17\1\20\1\21\1\22\1\10\1\11"+ "\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1\11"+ "\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41"+ "\1\42\1\43\1\44\1\45\1\46\1\47\1\50\1\51"+ "\1\26\1\52\1\26\1\53\1\54\1\53\1\55\1\11"+ "\1\56\1\57\1\60\1\11\1\61\1\62\1\63\1\64"+ "\1\65\1\66\1\11\1\67\1\11\2\45\1\70\1\11"+ "\1\71\1\72\1\11\1\73\1\74\1\75\1\76\1\77"+ "\1\100\1\101\1\102\1\11\1\103\1\104\1\105\1\106"+ "\2\12\2\11\15\107\1\110\3\107\1\111\2\107\1\112"+ "\32\107\1\113\10\107\1\114\35\107\15\115\1\116\3\115"+ "\1\117\2\115\1\120\22\115\1\121\7\115\1\122\10\115"+ "\1\123\5\115\1\124\1\115\1\125\25\115\15\126\1\127"+ "\3\126\1\130\35\126\1\131\10\126\1\132\35\126\12\133"+ "\1\134\1\135\4\133\1\136\1\137\104\133\10\140\1\141"+ "\1\140\1\142\6\140\1\143\104\140\12\133\1\144\1\145"+ "\4\133\1\136\1\146\104\133\10\10\1\0\2\10\1\0"+ "\2\10\1\0\2\10\4\0\6\10\2\0\6\10\14\0"+ "\17\10\2\0\27\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\2\150\1\151\3\12"+ "\1\150\1\12\1\0\2\150\1\0\1\150\1\152\1\0"+ "\2\150\4\0\1\153\3\150\1\152\1\154\1\0\1\155"+ "\2\150\1\154\1\150\1\153\1\150\14\0\2\150\1\152"+ "\5\150\1\152\6\150\2\0\22\150\2\12\4\150\1\156"+ "\1\157\2\160\1\150\1\160\1\0\2\150\1\0\1\150"+ "\1\152\1\0\2\150\4\0\1\153\2\161\1\162\1\152"+ "\1\154\1\0\1\155\2\150\1\154\1\150\1\153\1\150"+ "\14\0\2\150\1\152\2\150\1\162\2\150\1\152\6\150"+ "\2\0\22\150\2\160\2\150\1\10\7\11\1\0\1\163"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\3\11\1\164\1\165\1\11\14\0\1\166\1\167"+ "\15\11\2\0\1\10\25\11\10\170\1\171\1\170\1\172"+ "\6\170\1\173\104\170\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\5\11\1\174\14\0\17\11\2\0\1\10\25\11\13\0"+ "\1\175\112\0\1\10\7\11\1\0\1\176\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\177\1\200\2\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\3\11\1\201\1\202"+ "\1\11\14\0\1\11\1\203\4\11\1\204\10\11\2\0"+ "\1\10\25\11\150\0\1\24\103\0\12\205\1\206\10\205"+ "\1\207\1\210\23\205\1\211\55\205\50\0\1\53\55\0"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ "\1\212\4\11\1\213\10\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\214\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\3\11\1\215\2\11\14\0"+ "\1\11\1\216\4\11\1\217\5\11\1\220\2\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ "\1\221\4\11\14\0\1\11\1\222\12\11\1\223\2\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\4\11\1\224\1\11\14\0\1\11\1\225\4\11\1\226"+ "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\1\227\1\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\11\1\230\4\11\14\0\5\11\1\231"+ "\1\11\1\232\2\11\1\233\4\11\2\0\1\10\13\11"+ "\1\234\11\11\33\0\1\53\14\0\1\53\60\0\3\155"+ "\1\0\1\155\112\0\2\155\2\0\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\11\1\235\1\236\3\11\14\0\1\237"+ "\1\240\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\241\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\1\242\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\3\11\1\243\1\244\1\11\14\0\5\11\1\245\4\11"+ "\1\246\4\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\1\247\1\11\1\0\1\10\1\11"+ "\4\0\2\11\1\250\3\11\2\0\5\11\1\251\14\0"+ "\2\11\1\252\14\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\1\11\1\253\15\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\254\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\255\1\11\1\256\1\11\1\257\1\11\14\0\1\260"+ "\2\11\1\261\5\11\1\262\2\11\1\263\2\11\2\0"+ "\1\10\25\11\23\0\1\264\150\0\1\53\1\0\1\53"+ "\124\0\1\265\1\53\120\0\1\53\4\0\1\53\125\0"+ "\1\53\1\0\1\266\123\0\1\53\4\0\1\53\50\0"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\3\11\1\267\2\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\270\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\271\3\11\14\0\1\11\1\272"+ "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\273"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\11\1\274\1\11\1\275\2\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\3\11\1\276\1\277\1\11\14\0\1\300\1\301\15\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\1\302\1\303\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\304\4\11\1\305\14\0\2\11\1\306\4\11"+ "\1\307\7\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\310\3\11\14\0\6\11\1\311"+ "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\312"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\2\11\1\313\1\314\2\11\14\0\1\11\1\315"+ "\4\11\1\316\10\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\1\317\5\11\1\320"+ "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\1\11\1\321\15\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\322"+ "\1\323\3\11\14\0\1\11\1\324\15\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\325\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\326"+ "\1\327\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\2\330\3\10\1\330\1\10\1\0\1\330\1\10\1\0"+ "\2\330\1\0\1\10\1\330\4\0\6\330\2\0\6\330"+ "\14\0\17\330\2\0\1\10\21\330\2\10\2\330\1\10"+ "\7\11\1\0\1\331\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\2\11\1\332\3\11\2\0\1\11\1\333"+ "\3\11\1\334\14\0\3\11\1\335\13\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\336\1\11"+ "\1\337\3\11\14\0\1\340\1\341\1\11\1\342\1\343"+ "\1\11\1\344\5\11\1\345\2\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\1\346\1\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\347\3\11"+ "\1\350\1\11\14\0\2\11\1\351\14\11\2\0\1\10"+ "\13\11\1\352\11\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\11\1\353\4\11\14\0\1\354\1\355\4\11\1\356"+ "\5\11\1\357\2\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\1\360\1\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\5\11\1\361\1\362\16\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\3\11\1\363\2\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\364\3\11\14\0\1\11\1\365\4\11\1\366\10\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\3\11\1\367\2\11\14\0\6\11\1\370\10\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\371\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\372\1\373\2\11\14\0\1\11\1\374\15\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\375\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\2\11\1\376\3\11"+ "\2\0\6\11\14\0\3\11\1\377\13\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\u0100\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u0101"+ "\1\11\1\u0102\2\11\14\0\6\11\1\u0103\10\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ "\1\u0104\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\11\1\u0105\1\u0106\3\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\u0107\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ "\15\107\1\0\3\107\1\0\2\107\1\0\32\107\1\0"+ "\10\107\1\0\35\107\35\0\1\u0108\27\0\1\u0109\63\0"+ "\1\u010a\137\0\1\u010b\160\0\1\u010c\35\0\15\115\1\0"+ "\3\115\1\0\2\115\1\0\22\115\1\0\7\115\1\0"+ "\10\115\1\0\5\115\1\0\1\115\1\0\25\115\35\0"+ "\1\u010d\27\0\1\u010e\63\0\1\u010f\103\0\1\u0110\4\0"+ "\1\u0110\2\0\1\u0110\2\0\2\u0110\5\0\1\u0111\1\0"+ "\6\u0110\2\0\6\u0110\7\0\1\u0112\4\0\17\u0110\3\0"+ "\21\u0110\2\0\2\u0110\35\0\1\u0113\160\0\1\u0114\135\0"+ "\1\u0115\62\0\1\u0116\1\u0117\1\u0118\1\u0119\1\0\1\u011a"+ "\15\0\1\u011b\1\u011c\1\u011d\1\u011e\1\0\1\u011f\3\0"+ "\1\u0120\34\0\15\126\1\0\3\126\1\0\35\126\1\0"+ "\10\126\1\0\35\126\35\0\1\u0121\27\0\1\u0122\75\0"+ "\1\u0123\160\0\1\u0124\35\0\12\133\2\0\4\133\2\0"+ "\104\133\21\u0125\1\0\104\u0125\13\0\1\u0126\113\0\2\u0127"+ "\3\0\1\u0127\2\0\1\u0127\2\0\2\u0127\2\0\1\u0127"+ "\4\0\6\u0127\2\0\6\u0127\14\0\17\u0127\1\u0128\2\0"+ "\21\u0127\2\0\2\u0127\10\140\1\0\1\140\1\0\6\140"+ "\1\0\104\140\10\0\1\u0129\115\0\21\u012a\1\0\104\u012a"+ "\21\u012b\1\0\104\u012b\10\10\1\0\1\u012c\1\10\1\0"+ "\2\10\1\0\2\10\4\0\6\10\2\0\6\10\14\0"+ "\17\10\2\0\26\10\10\150\1\0\2\150\1\0\2\150"+ "\1\0\2\150\4\0\6\150\2\0\6\150\14\0\17\150"+ "\2\0\30\150\1\151\3\u012d\1\150\1\u012d\1\0\2\150"+ "\1\0\2\150\1\0\2\150\4\0\6\150\2\0\6\150"+ "\14\0\17\150\2\0\22\150\2\u012d\5\150\3\u012e\1\150"+ "\1\u012e\1\0\2\150\1\0\2\150\1\0\2\150\4\0"+ "\6\150\1\u012f\1\0\6\150\3\0\1\u012f\10\0\17\150"+ "\2\0\22\150\2\u012e\5\150\3\155\1\150\1\155\1\0"+ "\2\150\1\0\1\150\1\152\1\0\2\150\4\0\4\150"+ "\1\152\1\154\2\0\2\150\1\154\3\150\14\0\2\150"+ "\1\152\5\150\1\152\6\150\2\0\22\150\2\155\4\150"+ "\1\156\1\150\2\u0130\1\150\1\u0130\1\0\2\150\1\0"+ "\2\150\1\0\2\150\4\0\6\150\2\0\6\150\14\0"+ "\17\150\2\0\22\150\2\u0130\5\150\3\157\1\150\1\157"+ "\1\0\2\150\1\0\1\150\1\152\1\0\2\150\4\0"+ "\4\150\1\152\1\154\1\0\1\155\2\150\1\154\3\150"+ "\14\0\2\150\1\152\5\150\1\152\6\150\2\0\22\150"+ "\2\157\4\150\1\156\1\157\2\160\1\150\1\160\1\0"+ "\2\150\1\0\1\150\1\152\1\0\2\150\4\0\1\u0131"+ "\3\150\1\152\1\154\1\0\1\155\2\150\1\154\1\150"+ "\1\u0131\1\150\14\0\2\150\1\152\5\150\1\152\6\150"+ "\2\0\22\150\2\160\6\150\2\u0132\2\150\1\0\2\150"+ "\1\0\2\150\1\0\2\150\4\0\6\150\2\0\6\150"+ "\14\0\17\150\2\0\31\150\5\u0133\1\0\2\150\1\0"+ "\1\150\1\u0133\1\0\2\150\4\0\1\150\2\u0133\1\150"+ "\2\u0133\2\0\2\150\2\u0133\2\150\14\0\2\150\1\u0133"+ "\1\150\1\u0133\3\150\1\u0133\6\150\2\0\2\150\1\u0133"+ "\17\150\2\u0133\2\150\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\11\1\u0134\4\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\4\11\1\u0135\1\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\3\11\1\u0136\2\11\14\0\1\11\1\u0137"+ "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\3\11\1\u0138\2\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0139"+ "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ "\1\u013a\1\11\14\0\7\11\1\u013b\7\11\2\0\1\10"+ "\25\11\10\170\1\u013c\1\170\1\172\6\170\1\173\104\170"+ "\10\0\1\u013d\115\0\4\u013e\2\170\1\u013e\1\170\1\u013f"+ "\1\u0140\4\170\3\u013e\1\0\5\u013e\1\170\5\u013e\2\170"+ "\63\u013e\2\170\2\u013e\10\173\1\u013c\1\173\1\u0141\113\173"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0142\3\11"+ "\14\0\6\11\1\u0143\10\11\2\0\1\10\25\11\13\0"+ "\1\u0144\112\0\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ "\1\u0145\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\11\11\1\303"+ "\5\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\u0146\5\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\4\11\1\u0147\1\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\1\11\1\u0148\15\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ "\1\303\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\1\u0149\1\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\25\11\12\205\1\206\10\205\1\u014a\123\205"+ "\1\0\104\205\24\0\1\u014b\101\0\1\10\7\11\1\0"+ "\1\11\1\147\1\0\1\u014c\1\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\4\11\1\u014d\12\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\1\u014e\1\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\5\11\1\u014f\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\1\11\1\u0150"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\5\11\1\u0151\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ "\1\u0152\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\u0153\5\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0154\5\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\u0155\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\1\11\1\u0156\15\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\u0157\5\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\u0158\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\1\11\1\u0159\15\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\11\1\u015a\4\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\4\11\1\u015b\1\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\u015c\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\11\1\u015d\4\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u015e"+ "\5\11\14\0\4\11\1\u015f\12\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\3\11"+ "\1\u0160\13\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\u0161\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\4\11\1\u0162\1\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\u0163\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\3\11\1\u0164\2\11\14\0"+ "\14\11\1\303\2\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\5\11\1\u0165\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ "\1\u0166\4\11\14\0\6\11\1\u0167\10\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\2\11\1\u0168\22\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\u0169\4\11\1\u016a\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\u016b\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\4\11\1\u016c\12\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\5\11\1\u016d\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\u016e\5\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\2\11\1\u016f\3\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\14\11"+ "\1\u0142\2\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\5\11\1\u0170\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\1\11\1\u0171\4\11\2\0"+ "\5\11\1\u0172\14\0\17\11\2\0\1\10\5\11\1\u0173"+ "\17\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\2\11\1\u0174\14\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\1\u0175\1\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\3\11\1\u0176\13\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\11\1\u0177\1\11\1\u0178"+ "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\u0179\5\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\322\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u017a"+ "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\11\1\u017b\2\11\1\u017c\1\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\6\11\1\u017d\10\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\1\u017e\1\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\12\205\1\206\10\205\2\0"+ "\101\205\50\0\1\53\1\0\1\26\53\0\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\5\11\1\u017f\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\7\11\1\u0180\7\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\1\11\1\u0181\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\u0182\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\2\11\1\u0183\3\11\2\0\1\u0184\5\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\1\11\1\u0185\4\11\1\u0186\10\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\4\11\1\u0187\12\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\u0188\4\11\1\u016d"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\3\11\1\u0189\2\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ "\1\u018a\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\1\u018b\1\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\4\11\1\u018c\1\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\u018d\4\11\1\u018e\14\0\12\11\1\u018f"+ "\4\11\2\0\1\10\14\11\1\u0190\10\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\2\11\1\u0191\3\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\5\11\1\u0192\1\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0193\3\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\3\11\1\u0194\13\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u0195"+ "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\5\11\1\u0196\11\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\3\11\1\u0197\13\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\3\11\1\u0198\21\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\u0199\5\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\u019a\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\4\11\1\u019b\12\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\6\11\1\u019c\10\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\u019d\5\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ "\1\u019e\1\11\14\0\6\11\1\u019f\10\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u0180"+ "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\u01a0\5\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u01a1"+ "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\1\u01a2\1\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ "\1\u01a3\1\11\1\u01a4\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\1\u01a5\1\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\330\1\0\1\330"+ "\1\u01a6\1\0\2\330\1\0\1\10\1\330\4\0\6\330"+ "\2\0\6\330\14\0\17\330\2\0\1\10\25\330\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\u01a7\5\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\5\11\1\u01a8\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\11\1\u01a9\4\11\14\0"+ "\6\11\1\u01aa\10\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\5\11\1\u01ab\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\3\11\1\u01ac\13\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\11\1\u01ad\1\11\1\u01ae"+ "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\u0142\1\u01af\4\11\14\0\4\11"+ "\1\u01b0\12\11\2\0\1\10\3\11\1\u01b1\21\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u01b2"+ "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\11\1\u01b3\4\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\4\11\1\u01b4"+ "\1\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\3\11\1\u01b5\2\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\7\11\1\u01b6\7\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\1\u01b7\1\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\5\11\1\u01b8"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\u01b9\4\11\1\u01ba\14\0\1\u01bb\1\11"+ "\1\u01bc\1\u01bd\1\u01be\5\11\1\u01bf\4\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u01c0"+ "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\4\11\1\u01c1\1\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\2\11\1\u01c2\3\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\5\11\1\u01c3\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\2\11\1\u01c4\3\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u01c5"+ "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\1\11\1\u01c6\15\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\7\11\1\u01c7\7\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\3\11"+ "\1\u01c8\13\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\5\11\1\u01c9\14\0\4\11\1\u01ca\11\11"+ "\1\u01cb\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\4\11"+ "\1\u01cc\1\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\4\11\1\u01cd\20\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\5\11\1\u01ce\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ "\1\u01cf\4\11\14\0\4\11\1\u01d0\12\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\6\11\1\u01d1\10\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\11\1\u01d2\4\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\u019d\5\11\14\0\3\11\1\u01d3\13\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\5\11\1\u01d4"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\4\11\1\u01d5\1\11\14\0\7\11\1\u01d6"+ "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\13\11\1\u01d7\3\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\12\11\1\u01d8\4\11\2\0\1\10\25\11\1\10\5\11"+ "\1\u01d9\1\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\u01da\5\11\14\0"+ "\17\11\2\0\1\10\2\11\1\u01db\22\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\u01dc\5\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\5\11"+ "\1\u01dd\14\0\17\11\2\0\1\10\14\11\1\u01de\10\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\u01df\5\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\5\11\1\u01e0\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ "\1\u01e1\4\11\1\u01e2\10\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\4\11\1\u01e3"+ "\12\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\3\11\1\u01e4\13\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u01e5"+ "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\6\11\1\u01e6\10\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\3\11\1\u01e7\2\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0198\3\11"+ "\14\0\17\11\2\0\1\10\25\11\62\0\1\u01e8\104\0"+ "\1\u01e9\121\0\1\u01ea\160\0\1\u01eb\117\0\1\u01ec\104\0"+ "\1\u01ed\64\0\52\u0110\1\u0112\53\u0110\1\0\1\u0110\4\0"+ "\1\u0110\2\0\1\u0110\2\0\2\u0110\7\0\6\u0110\2\0"+ "\6\u0110\7\0\1\u0112\4\0\17\u0110\3\0\21\u0110\2\0"+ "\2\u0110\35\0\1\u01ee\160\0\1\u01ef\76\0\1\u01f0\17\0"+ "\1\u01f1\1\0\1\u01f2\1\0\1\u01f3\3\0\1\u01f4\45\0"+ "\1\u01f5\45\0\1\u01f6\1\u01f7\104\0\1\u01f8\152\0\1\u01f9"+ "\52\0\1\u01fa\153\0\1\u01fb\25\0\1\u01fc\67\0\1\u01fd"+ "\135\0\1\u01fe\126\0\1\u01ff\125\0\1\u0200\101\0\1\u0201"+ "\150\0\1\u0202\150\0\1\u0203\104\0\1\u0204\121\0\1\u0205"+ "\160\0\1\u0206\50\0\1\u0207\113\0\7\u0127\1\0\1\u0127"+ "\1\u0208\1\0\2\u0127\2\0\1\u0127\4\0\6\u0127\2\0"+ "\6\u0127\14\0\17\u0127\3\0\25\u0127\77\u0209\1\0\26\u0209"+ "\10\0\1\u020a\115\0\3\10\5\u020b\1\0\2\10\1\0"+ "\1\10\1\u020b\1\0\2\10\4\0\1\10\2\u020b\1\10"+ "\2\u020b\2\0\2\10\2\u020b\2\10\14\0\2\10\1\u020b"+ "\1\10\1\u020b\3\10\1\u020b\6\10\2\0\2\10\1\u020b"+ "\17\10\2\u020b\2\10\2\150\1\151\3\u012d\1\150\1\u012d"+ "\1\0\2\150\1\0\2\150\1\0\2\150\4\0\1\153"+ "\5\150\2\0\4\150\1\153\1\150\14\0\17\150\2\0"+ "\22\150\2\u012d\5\150\3\u012e\1\150\1\u012e\1\0\2\150"+ "\1\0\1\150\1\152\1\0\2\150\4\0\4\150\1\152"+ "\1\150\2\0\6\150\14\0\2\150\1\152\5\150\1\152"+ "\6\150\2\0\22\150\2\u012e\2\150\3\0\3\u012e\1\0"+ "\1\u012e\112\0\2\u012e\2\0\2\150\1\156\1\150\2\u0130"+ "\1\150\1\u0130\1\0\2\150\1\0\2\150\1\0\2\150"+ "\4\0\1\u0131\5\150\2\0\4\150\1\u0131\1\150\14\0"+ "\17\150\2\0\22\150\2\u0130\4\150\1\u020c\1\150\2\u0132"+ "\2\150\1\0\2\150\1\0\2\150\1\0\2\150\4\0"+ "\6\150\2\0\6\150\14\0\17\150\2\0\30\150\1\u020d"+ "\5\u0133\1\0\2\150\1\0\1\150\1\u0133\1\0\2\150"+ "\4\0\1\u0131\2\u0133\1\150\2\u0133\2\0\2\150\2\u0133"+ "\1\u0131\1\150\14\0\2\150\1\u0133\1\150\1\u0133\3\150"+ "\1\u0133\6\150\2\0\2\150\1\u0133\17\150\2\u0133\2\150"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\11\1\u020e\4\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\u020f\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\5\11"+ "\1\u0210\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\1\u0211\1\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\5\11\1\u0212\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\11\1\u0213\4\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\5\11\1\u0214\14\0"+ "\4\11\1\u0215\12\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\4\11\1\u0216\1\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\3\11\1\u0217\13\11\2\0\1\10\25\11"+ "\10\u013e\1\u0218\10\u013e\1\0\107\u013e\5\u0219\1\u0218\4\u013e"+ "\1\u0219\3\u013e\1\0\4\u013e\2\u0219\1\u013e\2\u0219\4\u013e"+ "\2\u0219\20\u013e\1\u0219\1\u013e\1\u0219\3\u013e\1\u0219\12\u013e"+ "\1\u0219\17\u013e\2\u0219\2\u013e\4\0\2\173\1\0\2\173"+ "\1\u021a\4\173\11\0\1\173\5\0\2\173\63\0\2\173"+ "\2\0\1\10\7\11\1\0\1\11\1\147\1\0\1\u021b"+ "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\4\11\1\303\1\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\6\11\1\u021c\10\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\5\11\1\u0163\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\3\11\1\u021d\2\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\3\11\1\u021e\2\11"+ "\14\0\2\11\1\u021f\14\11\2\0\1\10\25\11\23\0"+ "\1\u0220\102\0\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\13\11\1\u0221\3\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\3\11\1\u0222\2\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\2\11\1\u0223\3\11\14\0\16\11\1\u0224\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u0225"+ "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\1\11\1\u0226\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\u0227\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\u0228\3\11\1\u0229\1\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\2\11"+ "\1\u022a\22\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\u022b\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\3\11\1\u022c\2\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\4\11\1\u022d\1\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u022e"+ "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\5\11\1\u022f\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ "\1\u0230\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u0231"+ "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\u0232\1\11\1\u0233\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\7\11\1\u0234\7\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u0235"+ "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\2\11\1\u0236\3\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u0237"+ "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\u0238\5\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\1\u0239\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\5\11\1\u023a\2\0\6\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\u023b\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\1\u023c\1\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\303\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u023d"+ "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\5\11\1\303\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\u023e\5\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\u023f"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\3\11\1\u0240"+ "\13\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\7\11\1\303\7\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\1\u0241\16\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\303\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\u0242\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\11\1\247\4\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\u0243\5\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ "\1\u0244\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\u0245\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\14\11\1\u0246\2\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\2\11\1\u0247\22\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\13\11\1\u022e\3\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\203"+ "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\6\11\1\u0248\10\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\u0249\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\11\11\1\u024a\13\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\11\1\u021d\4\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\6\11\1\u024b\10\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\6\11\1\u0230\10\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\u0188\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\4\11\1\u024c"+ "\12\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\15\11\1\u024d"+ "\7\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\3\11\1\u0142\13\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\3\11\1\u024e\2\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\2\11\1\u024f"+ "\3\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\4\11\1\u0249\1\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\1\11"+ "\1\u0230\23\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u0250"+ "\5\11\14\0\3\11\1\u0251\13\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\1\u0252\1\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\12\11\1\u0253\4\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\16\11\1\u0254\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\4\11\1\u0255\12\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\5\11\1\u0167\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\11\1\u022e\4\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\u0256\4\11\1\u0165"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\4\11\1\u0190\1\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\u0257\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\u0258\5\11\14\0\3\11"+ "\1\u0190\13\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\1\11\1\u0259\15\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\u025a\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\11\1\u025b\4\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\3\11\1\u025c\2\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u025d"+ "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\4\11\1\u025e\1\11\14\0\1\11\1\u0245"+ "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\3\11\1\u025f\2\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\6\11\1\u0260\10\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\4\11\1\u0261\1\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\u0262\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\2\11\1\u0142\1\u0263\2\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\2\11"+ "\1\u0264\3\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0265\5\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\4\11\1\u016d\1\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\1\u0142\16\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\3\11\1\u0266\2\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\2\11\1\303\14\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\1\11\1\u0230\7\11\1\u0267\3\11\1\u0268"+ "\7\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\1\11\1\303\15\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\1\u0269\1\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\u026a\5\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\2\11\1\u026b\14\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ "\1\u026c\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\2\11\1\u026d\14\11\2\0"+ "\1\10\25\11\10\10\1\0\1\u026e\1\10\1\0\2\10"+ "\1\0\2\10\4\0\6\10\2\0\6\10\14\0\17\10"+ "\2\0\27\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\1\11\1\u026f\15\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\u0270\5\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ "\1\u0271\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\u0272\5\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\2\11\1\u0273\3\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0274\3\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\u0275\3\11\14\0\6\11\1\u0276"+ "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\4\11\1\u0277\12\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\6\11\1\u0278\3\11\1\u0279\4\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\u027a\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\u027b\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\11\1\u0230\4\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\u027c\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u027d"+ "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\1\u027e\1\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\3\11"+ "\1\u027f\13\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\4\11\1\u0280\12\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u0281"+ "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\2\11\1\u0282\3\11\14\0\17\11"+ "\2\0\1\10\2\11\1\u0283\22\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\u0284\5\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u0285"+ "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\2\11\1\u0286\3\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\u0287\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\1\11\1\u0288\15\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\3\11\1\u0289\2\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\11\1\u028a\4\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\1\11\1\u028b\1\0\1\10\1\11"+ "\4\0\6\11\2\0\2\11\1\u028c\3\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\1\u028d\1\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\11\1\230\4\11\14\0"+ "\5\11\1\u028e\11\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\2\11\1\u028f\3\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\2\11\1\u0290\3\11\14\0\1\11\1\u0291\15\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\11\11\1\u0292\13\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\2\11\1\u0293\3\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\2\11\1\u0294\3\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\u0295\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u0296"+ "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\1\u0297\16\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\1\u0298\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\10\11\1\u0299\6\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\10\11\1\u0142\6\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\u029a"+ "\16\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\6\11\1\u029b\10\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\u015d\5\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\2\11\1\u0142\14\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u029c"+ "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\1\0\1\u029d\6\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\5\11"+ "\1\u029e\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\4\11\1\u029f\1\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\2\11\1\u02a0"+ "\3\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\3\11\1\u02a1\2\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\6\11\1\u02a2\10\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ "\1\u02a3\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\1\11\1\u02a4\1\u02a5\22\11\1\10\7\11\1\0"+ "\1\u02a6\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\3\11"+ "\1\u02a7\13\11\2\0\1\10\13\11\1\u02a8\11\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\2\11\1\u02a9\3\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\2\11\1\u02aa\3\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\6\11\1\u02ab\10\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\1\u02ac\16\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\3\11\1\u02ad\1\u02ae\12\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\1\u02af\1\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\1\11\1\u02b0\5\11\1\u02b1\7\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\16\11"+ "\1\u02b2\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\2\11\1\u02b3\3\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\13\11\1\u02b4\3\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\u02b5\5\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\16\11\1\u02b6\2\0\1\10\25\11\56\0\1\u02b7"+ "\106\0\1\u01e8\150\0\1\u02b8\77\0\1\u02b9\147\0\1\u02ba"+ "\106\0\1\u01ec\150\0\1\u02bb\77\0\1\u02bc\156\0\1\u02bd"+ "\120\0\1\u02be\125\0\1\u02bf\61\0\1\u02c0\151\0\1\u02c1"+ "\122\0\1\u02c2\126\0\1\u02c3\150\0\1\u02c4\101\0\1\u02c5"+ "\130\0\1\u02c6\22\0\1\u02c7\77\0\1\u02c8\126\0\1\u02c9"+ "\1\u02ca\102\0\1\u02cb\153\0\1\u02cc\145\0\1\u02cd\101\0"+ "\1\u02ce\124\0\1\u02cf\125\0\1\u02d0\23\0\1\u02d1\102\0"+ "\1\u02d2\145\0\1\u02d3\106\0\1\u0203\150\0\1\u02d4\77\0"+ "\1\u02d5\102\0\1\u02d6\114\0\77\u0209\1\u02d7\26\u0209\3\10"+ "\5\u02d8\1\0\2\10\1\0\1\10\1\u02d8\1\0\2\10"+ "\4\0\1\10\2\u02d8\1\10\2\u02d8\2\0\2\10\2\u02d8"+ "\2\10\14\0\2\10\1\u02d8\1\10\1\u02d8\3\10\1\u02d8"+ "\6\10\2\0\2\10\1\u02d8\17\10\2\u02d8\2\10\2\150"+ "\1\u020d\5\u0133\1\0\2\150\1\0\1\150\1\u0133\1\0"+ "\2\150\4\0\1\150\2\u0133\1\150\2\u0133\2\0\2\150"+ "\2\u0133\2\150\14\0\2\150\1\u0133\1\150\1\u0133\3\150"+ "\1\u0133\6\150\2\0\2\150\1\u0133\17\150\2\u0133\2\150"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\2\11\1\u02d9\3\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\1\u02da\1\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\5\11\1\u02db"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\u02dc\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\u0269\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\5\11\1\u02dd\1\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u02de"+ "\2\11\14\0\17\11\2\0\1\10\1\11\1\u02df\1\u02e0"+ "\22\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\1\11\1\u02e1\15\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\u02e2\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u02e3"+ "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\3\11\1\u01c0\2\11\14\0\6\11"+ "\1\u02e4\10\11\2\0\1\10\25\11\3\u013e\5\u02e5\1\u0218"+ "\4\u013e\1\u02e5\3\u013e\1\0\4\u013e\2\u02e5\1\u013e\2\u02e5"+ "\4\u013e\2\u02e5\20\u013e\1\u02e5\1\u013e\1\u02e5\3\u013e\1\u02e5"+ "\12\u013e\1\u02e5\17\u013e\2\u02e5\2\u013e\3\0\5\u02e6\5\0"+ "\1\u02e6\10\0\2\u02e6\1\0\2\u02e6\4\0\2\u02e6\20\0"+ "\1\u02e6\1\0\1\u02e6\3\0\1\u02e6\12\0\1\u02e6\17\0"+ "\2\u02e6\2\0\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\13\11\1\303\3\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\12\11\1\u016d"+ "\4\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\u022e\5\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\4\11\1\u02e7\1\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\1\u02e8\5\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\1\11\1\u02e9\2\11\1\u02ea\20\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\2\11"+ "\1\u0283\22\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ "\1\u02eb\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\12\11\1\u02ec\12\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\2\11\1\u02ed\1\u02ee\2\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\15\11\1\u02ef\1\11\2\0\1\10\4\11\1\u02f0"+ "\20\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u02f1"+ "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\21\11\1\u02f2\3\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\5\11\1\u02f3\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\2\11\1\u02f4\3\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\2\11\1\u0230\3\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\1\11\1\u02f5\23\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\16\11\1\303\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\u02f6\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\1\u0269\16\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\u0142\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\3\11\1\u02f7\2\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\2\11\1\u02f8\3\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u02f9"+ "\1\11\1\0\1\10\1\11\4\0\4\11\1\u02fa\1\11"+ "\2\0\6\11\14\0\10\11\1\u02fb\4\11\1\u02fc\1\11"+ "\2\0\1\10\4\11\1\u02fd\5\11\1\u02fe\1\u02ff\1\11"+ "\1\u0300\1\11\1\u0301\5\11\1\10\5\11\1\u0302\1\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\2\11\1\u0303\3\11\14\0\17\11"+ "\2\0\1\10\2\11\1\u022a\6\11\1\u0304\13\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\11\1\u0142\4\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\11\1\u0305\4\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\3\11\1\u0306\13\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\14\11\1\u0307\2\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\u0308\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\5\11\1\u028e"+ "\11\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\5\11\1\u0309\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\11\11"+ "\1\u030a\5\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\11\1\u030b\4\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ "\1\u030c\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u030d"+ "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\17\11\1\u030e"+ "\5\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u030f"+ "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\11\1\u0310\4\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\1\11\1\u0311\15\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\11\1\u0165\4\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\3\11\1\u0262\13\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\1\u0312\16\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\4\11\1\u0313\12\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\6\11\1\u0314\10\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\2\11\1\310\3\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\1\u0315\1\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\u0316"+ "\16\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\11\1\u0317\4\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\u0318\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\4\11\1\u0157\1\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u0319"+ "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\2\11\1\u031a\3\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\u031b\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\3\11\1\u031c\2\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\3\11\1\u031d\2\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\1\303\16\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\6\11\1\u031e\10\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ "\1\u031f\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\3\11\1\u0320\2\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\16\11\1\u0321\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ "\1\u0230\12\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\3\11\1\u01d0\2\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\5\11"+ "\1\u0262\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\u0322\5\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\u0323\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\5\11\1\u0324\1\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\1\303\1\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ "\1\u0325\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\u0142\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\4\11\1\u0326\6\11\1\u0327"+ "\11\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\4\11\1\u0328"+ "\1\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\6\11\1\u0329\10\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\317\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\2\11\1\u032a\3\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\11\1\u032b\4\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u032c"+ "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\6\11\1\u032d\10\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\2\11\1\u0235\1\u032c\2\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\u032e\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\1\11\1\u032f\15\11\2\0\1\10"+ "\25\11\3\10\5\u0330\1\0\2\10\1\0\1\10\1\u0330"+ "\1\0\2\10\4\0\1\10\2\u0330\1\10\2\u0330\2\0"+ "\2\10\2\u0330\2\10\14\0\2\10\1\u0330\1\10\1\u0330"+ "\3\10\1\u0330\6\10\2\0\2\10\1\u0330\17\10\2\u0330"+ "\3\10\5\11\1\u0331\1\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\11\1\u0332\4\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\14\11\1\u0333\2\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\1\u0334\16\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\11\1\u0335\4\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\1\u0336\1\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\3\11\1\u0337\2\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0338"+ "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\4\11\1\u0339\12\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\16\11\1\u033a"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\3\11\1\u033b\2\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ "\1\u033c\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\11\1\u033d\4\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\u033e\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\2\11\1\u033f\3\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\u0340\5\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\1\u0341\1\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\4\11\1\u0342\1\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\4\11\1\u0343\1\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\2\11\1\u0344\3\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\11\1\u0345\4\11\14\0\13\11\1\u0341\3\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\u0346\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\3\11\1\u0347\2\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ "\1\u0348\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\5\11\1\u0349"+ "\11\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\u034a\5\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\7\11"+ "\1\u034b\7\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\4\11\1\u034c\1\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ "\1\u034d\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u034e"+ "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\13\11\1\u034f\3\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0350\5\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\4\11\1\u0351\12\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\2\11\1\u022a\6\11\1\u0304"+ "\13\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u0352"+ "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\11\11\1\u0269\5\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\3\11\1\u0353\2\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\11\1\u0354\4\11"+ "\14\0\17\11\2\0\1\10\23\11\1\u0355\1\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\12\11\1\u0356\12\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\3\11\1\u0357\13\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0358\5\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\u0359\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\1\11\1\u035a\15\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\3\11\1\u035b\2\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\u0269\5\11\14\0\17\11\2\0\1\10\2\11"+ "\1\u022a\6\11\1\u0304\13\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\1\11\1\u035c\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\u035d\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\25\11\32\0\1\u035e\73\0\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\6\11\1\u035f\10\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\15\11\1\u0360\7\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0361\3\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\u0362\5\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\13\11\1\u0363\3\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\3\11\1\u0364\2\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\4\11\1\u0365\12\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0366\3\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\4\11\1\u0367\12\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\u0368\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\1\11\1\u0369\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u036a"+ "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\4\11\1\u036b\12\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\1\11\1\u036c\15\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\2\11\1\u036d\3\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\u036e\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\u036f\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\u0370\5\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\11\1\u0371\4\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ "\1\u0372\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\3\11\1\u0373\2\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\2\11\1\u0374\14\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u0375"+ "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\2\11\1\u0376\3\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\7\11\1\u0377\15\11\23\0\1\u0378"+ "\144\0\1\u01e8\13\0\1\u02b7\50\0\1\u02b9\1\u0379\5\u02b9"+ "\1\u0379\1\u02b9\2\0\2\u02b9\1\0\1\u0379\1\u02b9\2\0"+ "\1\u02b9\1\u0379\6\u02b9\2\u0379\6\u02b9\4\u0379\1\0\1\u0379"+ "\2\0\4\u0379\17\u02b9\2\0\1\u0379\25\u02b9\23\0\1\u037a"+ "\144\0\1\u01ec\13\0\1\u02ba\50\0\1\u02bc\1\u037b\5\u02bc"+ "\1\u037b\1\u02bc\2\0\2\u02bc\1\0\1\u037b\1\u02bc\2\0"+ "\1\u02bc\1\u037b\6\u02bc\2\u037b\6\u02bc\4\u037b\1\0\1\u037b"+ "\2\0\4\u037b\17\u02bc\2\0\1\u037b\25\u02bc\14\0\1\u037c"+ "\20\0\1\u037d\153\0\1\u037e\123\0\1\u037f\123\0\1\u0380"+ "\107\0\1\u0381\144\0\1\u0382\104\0\1\u0383\20\0\1\u0384"+ "\125\0\1\u02ca\56\0\1\u0385\202\0\1\u0386\76\0\1\u0387"+ "\1\0\1\u0388\143\0\1\u0389\133\0\1\u038a\123\0\1\u038b"+ "\122\0\1\u038c\103\0\1\u038d\127\0\1\u038e\124\0\1\u038f"+ "\125\0\1\u0390\125\0\1\u0391\130\0\1\u0392\106\0\1\u0393"+ "\144\0\1\u0203\13\0\1\u02d3\50\0\1\u02d5\1\u0394\5\u02d5"+ "\1\u0394\1\u02d5\2\0\2\u02d5\1\0\1\u0394\1\u02d5\2\0"+ "\1\u02d5\1\u0394\6\u02d5\2\u0394\6\u02d5\4\u0394\1\0\1\u0394"+ "\2\0\4\u0394\17\u02d5\2\0\1\u0394\25\u02d5\3\0\5\u0395"+ "\5\0\1\u0395\10\0\2\u0395\1\0\2\u0395\4\0\2\u0395"+ "\20\0\1\u0395\1\0\1\u0395\3\0\1\u0395\12\0\1\u0395"+ "\17\0\2\u0395\2\0\3\10\5\u0396\1\0\2\10\1\0"+ "\1\10\1\u0396\1\0\2\10\4\0\1\10\2\u0396\1\10"+ "\2\u0396\2\0\2\10\2\u0396\2\10\14\0\2\10\1\u0396"+ "\1\10\1\u0396\3\10\1\u0396\6\10\2\0\2\10\1\u0396"+ "\17\10\2\u0396\3\10\7\11\1\0\1\11\1\147\1\0"+ "\1\u0397\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\2\11\1\u0398\14\11"+ "\2\0\1\10\25\11\1\10\5\11\1\u0399\1\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\1\u039a\3\11\1\u039b\1\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\10\11\1\u039c\1\11\1\u02fe\12\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\3\11\1\u032c\2\11\14\0"+ "\17\11\2\0\1\10\12\11\1\u039d\12\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\1\11\1\u039e\15\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\4\11\1\u039f\12\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\11\1\u03a0\4\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\u03a1\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ "\1\u0262\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\11\1\u03a2\4\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\4\11\1\u03a3\12\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\4\11\1\u0341"+ "\1\11\14\0\17\11\2\0\1\10\25\11\3\u013e\5\u03a4"+ "\1\u0218\4\u013e\1\u03a4\3\u013e\1\0\4\u013e\2\u03a4\1\u013e"+ "\2\u03a4\4\u013e\2\u03a4\20\u013e\1\u03a4\1\u013e\1\u03a4\3\u013e"+ "\1\u03a4\12\u013e\1\u03a4\17\u013e\2\u03a4\2\u013e\3\0\5\u03a5"+ "\5\0\1\u03a5\10\0\2\u03a5\1\0\2\u03a5\4\0\2\u03a5"+ "\20\0\1\u03a5\1\0\1\u03a5\3\0\1\u03a5\12\0\1\u03a5"+ "\17\0\2\u03a5\2\0\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\4\11\1\u03a6\1\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\3\11\1\u03a7\2\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\4\11\1\u03a8\1\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\1\u03a9\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\2\11\1\u03aa\3\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\u03ab\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\2\11\1\u03ac\14\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\13\11\1\u03ad\3\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\2\11\1\u03ae\3\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\u03af\5\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u01e4"+ "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\22\11\1\u03b0\2\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\u03b1\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\3\11\1\u03b2\2\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\11\1\u03b3\4\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u03b4"+ "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\u03b5\5\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ "\1\u0374\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\3\11\1\u03b6\2\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\6\11\1\u03b7\10\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u03b8"+ "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\2\11\1\u03b9\3\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\1\u03ba\1\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u03bb"+ "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\u03bc"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\2\11\1\u03bd\3\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\11\1\u03be\4\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\1\11\1\u03bf\15\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\11\1\u03c0\4\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\3\11\1\u0180\2\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\1\u03c1\1\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\u03c2\5\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\2\11\1\u03c3\22\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\1\u03c4\5\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\13\11\1\u03c5\11\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\6\11\1\u03c6\10\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ "\1\u03c7\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\1\u03c8\1\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u03c9"+ "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\6\11\1\u03ca\10\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\2\11\1\u0167\14\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\3\11\1\u03cb\2\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\4\11\1\u0229\1\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\u03cc\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\u03cd\5\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ "\1\303\12\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\u03ce\5\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u03cf"+ "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\1\11\1\u03d0\15\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\4\11\1\u0165\1\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ "\1\u03d1\12\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\11\1\u03d2\4\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\1\11\1\u0142\1\0\1\10\1\11\4\0\6\11\2\0"+ "\4\11\1\u03b2\1\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\u016d\5\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\13\11\1\u016d\3\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u03d3"+ "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\1\11\1\u03d4\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u03d5"+ "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\u03d6\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\6\11\1\u03d7\10\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u03d8"+ "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\4\11\1\u03d9\1\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\4\11\1\u03da\12\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\1\u03db\1\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\u03dc\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\u0221\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\1\11\1\u03dd\15\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\u03de\5\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\1\11\1\u03df\15\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\2\11\1\u02e1\3\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\7\11\1\u03e0\7\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ "\1\u03e1\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u03e2"+ "\7\11\2\0\1\10\25\11\3\10\5\u03e3\1\0\2\10"+ "\1\0\1\10\1\u03e3\1\0\2\10\4\0\1\10\2\u03e3"+ "\1\10\2\u03e3\2\0\2\10\2\u03e3\2\10\14\0\2\10"+ "\1\u03e3\1\10\1\u03e3\3\10\1\u03e3\6\10\2\0\2\10"+ "\1\u03e3\17\10\2\u03e3\3\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\4\11\1\u03e4\1\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\3\11\1\u03e5\2\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\1\u03e6\5\11\2\0\5\11\1\u0142\14\0\10\11\1\u03e7"+ "\6\11\2\0\1\10\2\11\1\u03e8\1\11\1\u03e9\20\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\7\11"+ "\1\u03ea\7\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\u03eb\5\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\2\11\1\u0269\14\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\7\11\1\u03ec\7\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\13\11\1\u03ed\3\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\u03ee\5\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\5\11\1\u03ef"+ "\5\11\1\u03f0\11\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\4\11\1\u03f1\1\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ "\1\u03f2\12\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\6\11\1\u03f3\10\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\1\u03f4\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\2\11\1\u028f\14\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\2\11\1\u03f5\3\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0235\3\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\u03f6\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ "\1\u03f7\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u0142"+ "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\1\u03f8\1\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\11\1\u03f9\4\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\7\11\1\u03fa\7\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\1\u03fb\1\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\6\11\1\u03fc\10\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\13\11\1\u03fd\11\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\2\11"+ "\1\u03fe\6\11\1\u03ff\13\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\3\11\1\u0400\13\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\6\11\1\u0401\10\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\2\11\1\u02e1\3\11\2\0\1\u015d\5\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\11\1\u0402\4\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u0403"+ "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\6\11\1\u0404\10\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\2\11\1\u0405\3\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\2\11"+ "\1\u0406\14\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\1\u0407\1\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\5\11\1\u0408\17\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\1\11\1\u0409\15\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\1\11\1\u040a\15\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\3\11"+ "\1\u040b\13\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\6\11\1\u040c\10\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\4\11\1\u040d\12\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\11\11\1\u040e"+ "\5\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\u040f\5\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\14\11"+ "\1\u0410\2\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\3\11\1\u0411\2\11\14\0\17\11\2\0"+ "\1\10\25\11\14\0\1\u0412\111\0\1\10\7\11\1\0"+ "\1\11\1\147\1\0\1\u0413\1\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\1\11\1\u0414\15\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\11\1\u0415\4\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\6\11\1\u0416\10\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\3\11\1\u0417\2\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\5\11\1\u0418\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0419\5\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\11\1\u041a\4\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\1\u041b\16\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\u041c\5\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\11\11\1\u041d\13\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\12\11\1\u026b"+ "\4\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\u041e\5\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\1\u041f\1\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\3\11\1\u0420\2\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u0421"+ "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\5\11\1\u0422\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\2\11\1\u0423\14\11\1\u0301"+ "\5\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\6\11\1\u0424\10\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\u0425\5\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\13\11\1\u0262\3\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\15\11\1\u02fc"+ "\1\11\2\0\1\10\4\11\1\u02fd\6\11\1\u02ff\3\11"+ "\1\u0301\5\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ "\1\u0426\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\11\1\u0142\4\11\14\0"+ "\17\11\2\0\1\10\1\11\1\u0427\23\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\3\11\1\u0428\2\11\14\0\17\11"+ "\2\0\1\10\25\11\23\0\1\u02b9\125\0\1\u02bc\177\0"+ "\1\u0429\67\0\1\u042a\162\0\1\u042b\70\0\1\u0429\125\0"+ "\1\u042c\77\0\1\u037f\152\0\1\u042d\127\0\1\u042e\155\0"+ "\1\u042f\73\0\1\u0430\151\0\1\u0431\125\0\1\u0432\54\0"+ "\1\u0433\174\0\1\u0434\105\0\1\u0435\124\0\1\u02ca\127\0"+ "\1\u0436\123\0\1\u0437\154\0\1\u02ca\131\0\1\u0438\71\0"+ "\1\u0439\153\0\1\u02ca\126\0\1\u043a\63\0\1\u02d5\105\0"+ "\5\u043b\5\0\1\u043b\10\0\2\u043b\1\0\2\u043b\4\0"+ "\2\u043b\20\0\1\u043b\1\0\1\u043b\3\0\1\u043b\12\0"+ "\1\u043b\17\0\2\u043b\2\0\3\10\5\11\1\0\2\10"+ "\1\0\1\10\1\11\1\0\2\10\4\0\1\10\2\11"+ "\1\10\2\11\2\0\2\10\2\11\2\10\14\0\2\10"+ "\1\11\1\10\1\11\3\10\1\11\6\10\2\0\2\10"+ "\1\11\17\10\2\11\3\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\4\11\1\247\12\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\3\11\1\u043c\2\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\3\11\1\u043d\2\11\14\0\6\11\1\u043e"+ "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\1\11\1\u03b9\15\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\1\11\1\u043f\15\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\3\11\1\u0440\2\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\1\11\1\u0441\15\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\1\u0442\1\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\u0443\5\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\11\1\u0444\4\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\3\11"+ "\1\u0445\21\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ "\1\u0446\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\u0447\5\11\14\0\17\11"+ "\2\0\1\10\25\11\3\u013e\5\170\1\u0218\4\u013e\1\170"+ "\3\u013e\1\0\4\u013e\2\170\1\u013e\2\170\4\u013e\2\170"+ "\20\u013e\1\170\1\u013e\1\170\3\u013e\1\170\12\u013e\1\170"+ "\17\u013e\2\170\2\u013e\3\0\5\u0448\5\0\1\u0448\10\0"+ "\2\u0448\1\0\2\u0448\4\0\2\u0448\20\0\1\u0448\1\0"+ "\1\u0448\3\0\1\u0448\12\0\1\u0448\17\0\2\u0448\2\0"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\14\11"+ "\1\303\2\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\5\11\1\u0449\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\4\11\1\u0142"+ "\1\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\2\11\1\u044a\14\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\1\0"+ "\1\u044b\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u044c"+ "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\1\u03e6"+ "\5\11\2\0\6\11\14\0\17\11\2\0\1\10\7\11"+ "\1\u044d\15\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\u0410\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\5\11\1\u044e\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\1\0"+ "\1\u044f\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\11\1\u0450\4\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\1\u0142\1\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\11\1\u0451\4\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\1\u022e\1\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\4\11\1\u0452\1\11\2\0"+ "\1\u0453\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u0454"+ "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\4\11\1\u0455\1\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\5\11\1\u0456"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\3\11\1\u0457\2\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\3\11\1\u0458\13\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\u0459\5\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\u03ba\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\11\1\u045a\4\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\6\11\1\u0455\10\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u045b"+ "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\3\11\1\u045c\2\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ "\1\u045d\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u045e"+ "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\u045f\5\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ "\1\u0460\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\2\11\1\u0461\3\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\u0462\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\1\u0463\1\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\2\11\1\u0464\14\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\u0465\5\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\4\11\1\u0165\12\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0466\5\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\1\11\1\u0467\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\11"+ "\1\u0142\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\1\11\1\u0468\15\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\3\11\1\u0469\13\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\u046a\5\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\u03a6\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\u016d\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ "\1\u046b\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\4\11\1\u046c"+ "\12\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\11\11\1\u046d"+ "\13\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\247\5\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\u046e\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ "\1\u046f\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\3\11\1\u0470\2\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\3\11\1\u0471\13\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\u03db\5\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\1\u0472\1\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u0473"+ "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\3\11\1\u0474\13\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\2\11\1\u0475\3\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ "\1\u0476\12\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\1\11"+ "\1\u0477\23\11\3\10\5\u0478\1\0\2\10\1\0\1\10"+ "\1\u0478\1\0\2\10\4\0\1\10\2\u0478\1\10\2\u0478"+ "\2\0\2\10\2\u0478\2\10\14\0\2\10\1\u0478\1\10"+ "\1\u0478\3\10\1\u0478\6\10\2\0\2\10\1\u0478\17\10"+ "\2\u0478\3\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\1\11\1\u0479\15\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\4\11\1\u047a\12\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\6\11\1\u047b\10\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\2\11\1\313\3\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\u047c\5\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u047d"+ "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\u047e\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\6\11\1\u047f\10\11\2\0\1\10\25\11\1\10"+ "\5\11\1\u0480\1\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\5\11\1\u0481\17\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\1\11\1\u0482\4\11\2\0\6\11\14\0\15\11"+ "\1\u02fc\1\11\2\0\1\10\4\11\1\u03e9\1\u0481\11\11"+ "\1\u0301\4\11\1\u0483\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\11\11\1\u0484\13\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\11\1\u0485\4\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\12\11\1\u0486\4\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\6\11\1\u0487\10\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\2\11\1\u0488\3\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\u0489\5\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ "\1\u048a\12\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\11\1\u048b\4\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\5\11\1\u048c\17\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u048d"+ "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\3\11\1\u048e\2\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\u048f\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\7\11\1\u0490\7\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0491\5\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\u0492\5\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\u0493\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\u0494\5\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ "\1\u0495\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\3\11\1\u0496\2\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\2\11\1\u0497\14\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u0498"+ "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\4\11\1\u0499\1\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\u049a\5\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\3\11\1\u045c\13\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\1\u049b\5\11\1\0"+ "\1\u049c\6\11\14\0\10\11\1\u049d\6\11\2\0\1\10"+ "\16\11\1\u049e\6\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\14\11\1\u049f\2\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\3\11\1\u04a0\2\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\1\u0262\1\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\u04a1\5\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\1\11\1\u04a2\15\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\5\11"+ "\1\u04a3\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\16\11\1\u04a4\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\1\u04a5\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\3\11\1\u04a6\2\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\5\11\1\u04a7"+ "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\4\11\1\u04a8\1\11\14\0"+ "\17\11\2\0\1\10\25\11\35\0\1\u04a9\70\0\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\13\11\1\u04aa"+ "\3\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\6\11\1\u04ab\10\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\4\11\1\u04ac\1\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\12\11\1\u04ad\4\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\2\11\1\u04ae"+ "\3\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\5\11\1\u04af\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\6\11\1\u04b0\10\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\6\11\1\u04b1\10\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\4\11\1\u04b2\1\u04b3\2\0\6\11\14\0\17\11"+ "\2\0\1\10\11\11\1\u04b4\13\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\2\11"+ "\1\u04b5\22\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\u04b6\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\5\11\1\u0142\14\0\17\11"+ "\2\0\1\10\2\11\1\u04b7\1\11\1\u04b8\6\11\1\u04b9"+ "\11\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u04ba"+ "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\4\11\1\u04bb\12\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\u04bc\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\5\11\1\u04bd\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\u04be\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\u04bf\5\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\6\11\1\u04c0\10\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ "\1\u04c1\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\2\11\1\u04c2\3\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\5\11"+ "\1\u04c3\14\0\17\11\2\0\1\10\25\11\77\u0429\1\u02ca"+ "\26\u0429\36\0\1\u04c4\147\0\1\u04c5\103\0\1\u04c6\154\0"+ "\1\u04c7\121\0\1\u04c8\106\0\1\u02ca\77\0\1\u02ca\152\0"+ "\1\u038b\121\0\1\u0392\151\0\1\u038b\102\0\1\u02ca\130\0"+ "\1\u04c9\123\0\1\u04ca\151\0\1\u04cb\122\0\1\u04cc\61\0"+ "\1\u04c7\171\0\1\u0430\50\0\5\u04cd\5\0\1\u04cd\10\0"+ "\2\u04cd\1\0\2\u04cd\4\0\2\u04cd\20\0\1\u04cd\1\0"+ "\1\u04cd\3\0\1\u04cd\12\0\1\u04cd\17\0\2\u04cd\2\0"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\11\1\u04ce\4\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\5\11\1\u04cf\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u04d0"+ "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\11\1\u04d1\4\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\4\11\1\u0198\1\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\u04d2\5\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\12\11\1\u04d3\4\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u04d4"+ "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\3\11\1\u04d5\2\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\u04d6\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\2\11\1\u04d7\3\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\6\11\1\u04d8\10\11\2\0\1\10\25\11"+ "\3\0\5\173\5\0\1\173\10\0\2\173\1\0\2\173"+ "\4\0\2\173\20\0\1\173\1\0\1\173\3\0\1\173"+ "\12\0\1\173\17\0\2\173\2\0\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\u04d9\5\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u04da"+ "\3\11\14\0\17\11\2\0\1\10\25\11\6\0\1\u04db"+ "\16\0\1\u04dc\1\u04dd\2\0\1\u04de\74\0\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\2\11\1\u04df\3\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\3\11\1\u04e0\2\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ "\1\u04e1\15\11\2\0\1\10\25\11\32\0\1\u04e2\34\0"+ "\1\u04e3\36\0\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ "\1\u04e4\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\3\11\1\u04e5\2\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\4\11\1\u04e6\1\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u04e7"+ "\1\u04e8\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\2\11\1\u04e9\3\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\u0341\5\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ "\1\u04ea\12\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\2\11\1\u0341\14\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\u04eb\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\4\11\1\u04ec\1\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\7\11\1\u04ed\7\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\5\11\1\u04ee\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\u04ef\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\4\11\1\u04f0\1\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\1\11\1\u04f1\15\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u04f2"+ "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\5\11\1\u04f3\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\14\11\1\u0190\10\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\1\u0165\1\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\13\11\1\u0142\3\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\5\11\1\u04f4\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\1\u04f5\16\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\2\11"+ "\1\u04f6\14\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\3\11\1\303\13\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\1\u04f7\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\2\11\1\u04f8\3\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\2\11\1\u019f\3\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ "\1\u016d\12\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\u04f9\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\u04fa\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\1\u04fb\1\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\5\11\1\u04fc\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\u04fd\5\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\u04fe\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\3\11\1\u016f\2\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\5\11\1\u0324\1\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\15\11"+ "\1\u04ff\7\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\u0500\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\5\11\1\u023a\2\0\6\11\14\0\17\11"+ "\2\0\1\10\15\11\1\u0300\7\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\u0501\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\4\11\1\u0502\12\11\2\0\1\10\25\11\3\10"+ "\5\330\1\0\2\10\1\0\1\10\1\330\1\0\2\10"+ "\4\0\1\10\2\330\1\10\2\330\2\0\2\10\2\330"+ "\2\10\14\0\2\10\1\330\1\10\1\330\3\10\1\330"+ "\6\10\2\0\2\10\1\330\17\10\2\330\3\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\5\11\1\u0212\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u0503"+ "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\5\11\1\u0230\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\1\11\1\u0504\15\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\2\11\1\u01bc"+ "\14\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\u0505\5\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ "\1\u0506\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\1\11\1\u0507\15\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\1\11\1\u0508\15\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\u0509\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\1\11\1\u050a\15\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\3\11\1\320\2\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\3\11\1\u050b\2\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u050c"+ "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\1\u050d\24\11\1\10\5\11\1\u050e\1\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\1\u039a"+ "\5\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\14\11"+ "\1\u050f\2\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\u0510\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ "\1\u0511\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u0512"+ "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\4\11\1\u0513\1\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\4\11\1\u0410"+ "\1\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\3\11\1\u0514\13\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\3\11\1\u0515\2\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ "\1\u0516\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\3\11\1\u0517\2\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u0518"+ "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\11\1\u0519\4\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\5\11\1\u051a\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\u051b\5\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\5\11\1\u051c\1\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\13\11"+ "\1\u051d\1\11\1\u051e\7\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\2\11\1\u051f\3\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\4\11\1\u0520\1\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\1\11\1\u0521\1\u0522"+ "\2\11\1\u0523\3\11\1\u0524\13\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\14\11\1\u02b6\2\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\1\11\1\u0525\15\11\2\0\1\10\25\11\103\0"+ "\1\u0526\3\0\1\u0527\16\0\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\2\11\1\u0484\3\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u0528"+ "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\1\u0529\5\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\5\11"+ "\1\u052a\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\15\11\1\u052b\7\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\11\1\u052c\4\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\1\11\1\u052d"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\2\11\1\u052e\3\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\4\11\1\u052f\1\u04a7\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\11\1\230\4\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\11\11\1\u0530\13\11"+ "\36\0\1\u0531\67\0\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\4\11\1\u0532"+ "\1\11\2\0\6\11\14\0\15\11\1\u0533\1\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\1\u0534\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\1\11\1\u0535\15\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\2\11\1\u0536\3\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\4\11\1\u01c4\1\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\10\11\1\u0537\6\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\12\11\1\u0538\4\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\3\11\1\u0539\2\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\6\11\1\u053a\10\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\4\11\1\u053b"+ "\1\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\2\11\1\u053c\3\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\u053d\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u053e"+ "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\u053f\5\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\1\u0540\1\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\u0541"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\4\11\1\u0542\1\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\16\11\1\u0543\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ "\1\u0544\5\11\1\u0545\2\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\1\11\1\u0546\4\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\11\1\u0547\4\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\14\11\1\u0548\2\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\12\11\1\u0549\4\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\3\11\1\u054a\2\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ "\1\u054b\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\1\u054c\16\11\2\0\1\10"+ "\25\11\40\0\1\u054d\145\0\1\u054e\132\0\1\u054f\100\0"+ "\1\u0550\127\0\1\u0551\114\0\1\u0552\35\0\1\u0553\73\0"+ "\1\u038b\130\0\1\u0554\123\0\1\u0555\72\0\5\u0127\5\0"+ "\1\u0127\10\0\2\u0127\1\0\2\u0127\4\0\2\u0127\20\0"+ "\1\u0127\1\0\1\u0127\3\0\1\u0127\12\0\1\u0127\17\0"+ "\2\u0127\2\0\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\1\0\1\u0556"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\u0162\5\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\4\11\1\u0557\12\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u0558"+ "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\2\11\1\u0559"+ "\22\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u055a"+ "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\11\1\u055b\4\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\14\11\1\u055c\2\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\2\11\1\u055d\3\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\1\u055e\1\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\1\11\1\u055f\15\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\4\11\1\u0560\20\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\5\11\1\u0561\11\11\2\0\1\10\25\11"+ "\40\0\1\u0562\125\0\1\u0563\76\0\1\u0564\201\0\1\u0565"+ "\40\0\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u0566"+ "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\5\11\1\u0567\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\u0568\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\14\0\1\u0569\150\0"+ "\1\u0569\66\0\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\3\11\1\u056a\13\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\14\11\1\u056b"+ "\2\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\3\11\1\u056c\2\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u056d"+ "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\2\11\1\u056e\3\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\4\11\1\u02fa"+ "\1\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\11\1\u056f\4\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\u0570\5\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\1\11\1\u0571\15\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\6\11\1\u0572\10\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\u0573\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u0574"+ "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\6\11\1\u0575\10\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0576"+ "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\4\11\1\u0577\12\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u0578"+ "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\5\11\1\u0579\17\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\4\11\1\u057a\20\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ "\1\u057b\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\6\11\1\u057c\10\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ "\1\u03d7\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u057d"+ "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\u057e\5\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\u0167\5\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\5\11\1\u0142\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\2\11\1\u057f\3\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\u0580\5\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u0581"+ "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\11\1\u0582\4\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\1\11\1\u0583"+ "\4\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ "\1\u0584\12\11\2\0\1\10\25\11\1\10\5\11\1\u0585"+ "\1\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\1\u03e6\5\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\2\11\1\u0586\6\11\1\u0587\6\11\1\106"+ "\4\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u0538"+ "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\6\11\1\u0588\10\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\1\u0410\1\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\11\1\u0589\4\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\16\11\1\u058a\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\1\11\1\u058b"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\6\11\1\u058c\10\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\6\11\1\u027e\10\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\4\11\1\u058d\12\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\11\1\u058e\4\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\3\11\1\u058f\2\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\1\11\1\u0590\15\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\5\11\1\u023a\2\0\6\11\14\0\17\11"+ "\2\0\1\10\11\11\1\u0591\13\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\4\11"+ "\1\u02fd\20\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u0592"+ "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\7\11\1\u0593\7\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\2\11\1\u0594\3\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\u0595\5\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\11\1\u0596\4\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u0597"+ "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\2\11\1\u0598\3\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\13\11\1\u0599\11\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\2\11\1\u059a\3\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\7\11\1\u059b\7\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\6\11\1\u059c\10\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\4\11\1\u059d\1\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\2\11"+ "\1\u059e\3\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u059f"+ "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\2\11\1\u05a0\14\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\1\11\1\u05a1\15\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\11\1\u05a2\4\11"+ "\14\0\4\11\1\u05a3\12\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\u05a4\5\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\1\u05a5\16\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u05a6"+ "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\4\11\1\u05a7\12\11\2\0\1\10"+ "\25\11\35\0\1\u05a8\104\0\1\u05a9\111\0\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\1\11\1\u05aa\15\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\6\11\1\u05ab\10\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\16\11"+ "\1\u0142\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\11\1\u05ac\4\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\u05ad\5\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\6\11\1\u05ae\10\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\2\11\1\u05af\14\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u05b0"+ "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\3\11\1\u05b1\2\11\14\0\17\11\2\0\1\10"+ "\25\11\73\0\1\u05b2\32\0\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\1\11\1\u05b3\15\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u05b4"+ "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\u05b5\5\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ "\1\u05b6\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\1\11\1\u05b7\23\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\2\11\1\u05b8\3\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u0162"+ "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\4\11\1\u05b9\1\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\2\11\1\u05ba\3\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\2\11\1\u05bb\3\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\u05bc\5\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u05bd"+ "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\1\11\1\u05be\15\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\11\1\u05bf\4\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\3\11"+ "\1\u05c0\13\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\u05c1\5\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\1\u05c2\5\11\2\0\6\11"+ "\14\0\10\11\1\u05c3\6\11\2\0\1\10\4\11\1\u05c4"+ "\20\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\15\11\1\u02fc\1\11\2\0\1\10\4\11\1\u02fd\20\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\2\11\1\u04fc\3\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\15\11\1\u02ef\1\11\2\0"+ "\1\10\15\11\1\u0300\7\11\1\10\7\11\1\0\1\u05c5"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\2\11\1\u05c6\3\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\20\11\1\106"+ "\4\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u05c7"+ "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\1\u05c8\1\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ "\1\u05c9\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\11\11\1\u0304\13\11\41\0\1\u0429\121\0\1\u0429"+ "\125\0\1\u05ca\131\0\1\u02ca\124\0\1\u05cb\152\0\1\u05cc"+ "\100\0\1\u05cd\122\0\1\u05ce\163\0\1\u02ca\60\0\1\u04dd"+ "\77\0\1\10\7\11\1\0\1\u05cf\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\3\11\1\u05d0\2\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\u05d1\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\11\1\u05d2\4\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\1\0\1\u05d3\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\15\11\1\u02fc\1\11\2\0"+ "\1\10\17\11\1\u0301\5\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\1\u05d4\1\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\u05d5\5\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\1\u05d6\1\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\1\u05d7\1\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\10\11\1\u05d8"+ "\2\11\1\u03ce\11\11\35\0\1\u05d9\104\0\1\u05da\176\0"+ "\1\u05db\101\0\1\u05dc\64\0\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\11\1\u0543\4\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\1\u028f\16\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\11\1\u05dd\4\11\14\0\17\11\2\0"+ "\1\10\25\11\63\0\1\u05de\42\0\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\11\11"+ "\1\u05df\13\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\4\11\1\u02fd\6\11\1\u02ff"+ "\11\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\13\11\1\u05e0\3\11\2\0\1\10\25\11\1\10\5\11"+ "\1\u05e1\1\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\1\0\1\u05e2\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\4\11\1\u05e3\1\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\6\11\1\u05e4\10\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\2\11\1\u0423\22\11\1\10\7\11\1\0\1\u05e5\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\5\11\1\u05e6\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ "\1\u05e7\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u03b2"+ "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\1\u0269\24\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\4\11\1\u05e8\20\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\16\11\1\u0162\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u05e9"+ "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\1\11\1\u0142\15\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\1\u05ea\1\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\11\11\1\u05eb"+ "\5\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\1\u046a\24\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\1\11\1\303"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\1\u05ec\16\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\4\11\1\u05ed\1\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\1\11\1\u05ee\15\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u05ef"+ "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\u05f0\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u05f1"+ "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\1\11\1\u05f2\15\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\2\11\1\u05f3\3\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\2\11\1\u05f4\1\u05f5"+ "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\4\11\1\u0162\12\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\11\1\u05f6\4\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\2\11\1\u05f7\3\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\1\11\1\u05f8\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\4\11\1\u0457"+ "\1\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\2\11\1\u05f9\3\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\1\11\1\u05fa\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\2\11\1\u05fb\3\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\1\u05fc\1\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\3\11\1\u05fd\2\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\1\11\1\u05fe\15\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\u05ff\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\2\11\1\u0162"+ "\14\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\2\11\1\u0600\3\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\14\11\1\u0601\2\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\u0602\5\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ "\1\u0603\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\1\11\1\u0604\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\3\11\1\u0605\2\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\3\11\1\u0606\2\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\2\11\1\u0607\3\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ "\1\u0608\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\14\11\1\u0609\10\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\1\11\1\u060a\15\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\1\u060b\5\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\11\1\u060c\4\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\13\11\1\u060d\3\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\4\11\1\u060e"+ "\12\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\3\11\1\u060f\2\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u0610"+ "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\1\u0611\1\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ "\1\u03a8\2\11\14\0\17\11\2\0\1\10\25\11\40\0"+ "\1\u0612\150\0\1\u0613\42\0\1\10\7\11\1\0\1\u0180"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\5\11\1\u0614\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\2\11\1\u0615\3\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0616\3\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\u0617\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\4\11\1\u0618\20\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\11\1\u0619\4\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\4\11\1\u061a\12\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u061b"+ "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\5\11\1\u061c\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\u061d\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u061e"+ "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\11\1\u061f\4\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\11"+ "\1\u0620\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\6\11\1\u0621\10\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ "\1\u0622\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u0623"+ "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\1\u0624\16\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0625\3\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\11\1\u035c\4\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\u0626\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\u0627\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\3\11\1\u0628\13\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u03c7"+ "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\3\11\1\u0629\2\11\14\0\1\11\1\u062a\15\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\1\u0230\1\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u062b"+ "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\3\11\1\u0344\2\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\4\11\1\u062c\20\11\1\10\5\11"+ "\1\u062d\1\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\u0513\5\11\14\0\17\11\2\0\1\10\25\11\67\0"+ "\1\u062e\53\0\1\u062f\147\0\1\u0630\123\0\1\u0631\127\0"+ "\1\u0632\66\0\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ "\1\u0633\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\u0410\5\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\3\11\1\u0634\13\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\5\11\1\u0635\14\0"+ "\17\11\2\0\1\10\25\11\103\0\1\u0636\3\0\1\u0637"+ "\16\0\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\4\11\1\u0262\12\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\11\11\1\u0638\13\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\2\11\1\u0639\14\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\3\11\1\u063a\2\11"+ "\14\0\17\11\2\0\1\10\25\11\37\0\1\u063b\160\0"+ "\1\u063c\74\0\1\u063d\121\0\1\u063e\70\0\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\4\11\1\u063f\12\11"+ "\2\0\1\10\25\11\60\0\1\u063d\45\0\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\2\11\1\u05f4\3\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\5\11\1\u0640\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\4\11\1\u0641\1\11\14\0"+ "\17\11\2\0\1\10\25\11\26\0\1\u0642\77\0\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\2\11\1\u0643\3\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\3\11\1\u01d0\13\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0594"+ "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\5\11\1\u04ef\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0644"+ "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\1\u0645\1\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0646"+ "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\2\11\1\u0647\14\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\1\u0648\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\1\11\1\u01d1\15\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\1\11\1\u0649\15\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\3\11"+ "\1\u064a\13\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\6\11\1\u0544\10\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\1\u064b\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\5\11\1\u064c\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ "\1\u064d\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\u0142\5\11\14\0\17\11"+ "\2\0\1\10\3\11\1\u064e\21\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\u064f\5\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"; private static final String ZZ_TRANS_PACKED_1 = "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\3\11\1\u0650\13\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\u0651\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0652"+ "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\u0653\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\5\11\1\u0654\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\4\11\1\u0655\1\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\4\11\1\u0656\1\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\1\11\1\u0657"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\1\u0658\1\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\11\1\u0659\4\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\23\11"+ "\1\u0355\1\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\2\11\1\u065a\14\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\2\11\1\u065b\22\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\6\11\1\u065c\10\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u065d"+ "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\1\11\1\u065e\4\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\7\11\1\u065f\7\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\u0660\5\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\4\11\1\u0661\1\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\5\11\1\u0662"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\u0663\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\3\11\1\u0664\13\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u0665"+ "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\7\11\1\u0666\7\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\u05bb\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\2\11\1\u0667\3\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0538\5\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\u0668\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\6\11\1\u0669\10\11\2\0\1\10\25\11\35\0"+ "\1\u066a\130\0\1\u066b\65\0\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\u066c\5\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\5\11\1\u0623\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\2\11\1\u066d\14\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\2\11\1\u066e\14\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\13\11\1\u0162\11\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\7\11\1\u066f\7\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\u0670"+ "\16\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\7\11\1\u0671\7\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\1\11\1\u0672\15\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\11\1\u0162\4\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\3\11\1\u04cf\2\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\11\1\u0673\4\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\4\11\1\u0674\1\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\1\u0675\24\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\2\11\1\352\14\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\2\11\1\u0676\3\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ "\1\u0622\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\3\11\1\u0677\2\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ "\1\u0678\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\u0679\5\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\u067a\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\u067b\5\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\u032c\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\4\11\1\u067c\1\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u067d"+ "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\3\11\1\u067e\2\11\14\0\17\11"+ "\2\0\1\10\25\11\60\0\1\u067f\104\0\1\u0680\127\0"+ "\1\u0632\124\0\1\u02ca\146\0\1\u02ca\44\0\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\3\11\1\u0681\2\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\3\11\1\u04c2\13\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ "\1\u0682\10\11\2\0\1\10\25\11\11\0\1\u0683\130\0"+ "\1\u0684\111\0\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\1\11\1\u0685\15\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\2\11\1\u0686\3\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\4\11\1\u0687\1\11\14\0\17\11\2\0\1\10"+ "\25\11\72\0\1\u0688\44\0\1\u0689\175\0\1\u068a\103\0"+ "\1\u068b\66\0\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\u068c\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\5\11\1\u068d\1\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\1\11\1\u068e\15\11\2\0\1\10"+ "\25\11\65\0\1\u068f\40\0\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\4\11"+ "\1\u0690\1\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0294\5\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\4\11"+ "\1\u0691\20\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\u0692\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\2\11\1\u0693\3\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\7\11\1\u0694"+ "\15\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u0695"+ "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\2\11\1\u0696\3\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\2\11\1\u0697\14\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\5\11\1\u0698\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\4\11\1\u0699\1\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\u069a\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\1\u069b\16\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\1\0\1\u069c\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\3\11\1\u05c9\13\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\6\11\1\u069d\10\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\11\1\u069e\4\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\4\11\1\u069f\1\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ "\1\u06a0\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\u06a1\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\6\11\1\u06a2\10\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\3\11\1\u06a3\2\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\1\0\1\u06a4\5\11\1\u06a5\14\0\15\11\1\u06a6\1\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\5\11\1\u023a"+ "\2\0\6\11\14\0\17\11\2\0\1\10\4\11\1\u0618"+ "\20\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\u06a7\5\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\1\11\1\u06a8\15\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\5\11\1\u06a9\17\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u06aa"+ "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\15\11\1\u02fc\1\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\4\11\1\u06ab\12\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\2\11\1\u06ac\3\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\5\11\1\u0162\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\4\11\1\u04cf"+ "\12\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\2\11\1\u06ad\3\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\4\11\1\u06ae\12\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\3\11\1\u06af\2\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\5\11\1\u06b0\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\3\11\1\u06b1\2\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\u06b2\5\11\14\0\17\11\2\0\1\10\25\11"+ "\37\0\1\u05b2\77\0\1\u06b3\114\0\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\u06b4\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\5\11\1\u06b5\1\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\5\11"+ "\1\u06b6\2\0\6\11\14\0\17\11\2\0\1\10\13\11"+ "\1\u06b7\11\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\1\u06b8\5\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\3\11\1\u06b9\2\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\6\11\1\u06ba\10\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\3\11\1\u06bb\2\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\u06bc\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\3\11\1\u06bd\2\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\1\11\1\u06be\15\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ "\1\u06bf\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\1\u04cf\1\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\7\11\1\u06c0\7\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\7\11"+ "\1\u06c1\7\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\2\11"+ "\1\u06c2\5\11\1\u06c3\14\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\u06c4\5\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\3\11\1\u0162\2\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\2\11\1\u06c5\14\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\u06c6\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\4\11\1\u06c7\1\11\14\0"+ "\17\11\2\0\1\10\25\11\63\0\1\u0429\77\0\1\u0555"+ "\70\0\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u06c8"+ "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\1\11\1\u06c9\15\11"+ "\2\0\1\10\25\11\27\0\1\u06ca\163\0\1\u06cb\40\0"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\2\11"+ "\1\u06cc\14\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\5\11\1\u06cd\11\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\u0544\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\60\0\1\u04a9\105\0"+ "\1\u06ce\124\0\1\u06cf\124\0\1\u06d0\67\0\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\1\11\1\u06d1\4\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\1\11\1\u06d2\15\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\5\11\1\u0513\14\0"+ "\17\11\2\0\1\10\25\11\72\0\1\u06d3\33\0\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\4\11\1\u06d4\1\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\1\u06d5\1\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\11\1\u06d6\4\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\5\11\1\u0142\11\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\1\11\1\u06d7\15\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u06d8"+ "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\11\1\u06d9\4\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\4\11\1\u06da"+ "\1\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\4\11\1\u06db\1\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\2\11\1\u06dc\3\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\2\11\1\u06dd\3\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\1\11\1\u06de\15\11\2\0"+ "\1\10\25\11\103\0\1\u06df\22\0\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\1\u0341"+ "\24\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u06e0"+ "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\11\11\1\u0410\5\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\15\11\1\u0300\7\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\13\11"+ "\1\u06e1\3\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\13\11\1\u0341\3\11\2\0"+ "\1\10\25\11\114\0\1\u06e2\11\0\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\1\0\1\u06e3\6\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u06e4"+ "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\3\11\1\u06e5\2\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\1\352\1\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\1\u06e6\16\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\u06e7\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\1\u0162\16\11\2\0"+ "\1\10\25\11\1\10\5\11\1\u06e8\1\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\11\1\u06e9\4\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\3\11\1\u06ea\2\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\u06eb\5\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\5\11\1\352\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\2\11\1\u06ec\14\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\1\11\1\u06ed\15\11"+ "\2\0\1\10\25\11\72\0\1\u06ee\33\0\1\10\7\11"+ "\1\0\1\11\1\147\1\0\1\u06ef\1\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ "\1\u06f0\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\1\u06f1\1\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\3\11\1\u06f2\13\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ "\1\u06f3\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\u06f4\5\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u03ad"+ "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\u06f5\5\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u06f6"+ "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\14\11\1\u06f7\2\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\u06f8\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\2\11\1\u06ea\3\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\17\11\1\u0301\5\11"+ "\1\10\5\11\1\u06f9\1\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\4\11\1\u06fa\1\u023a"+ "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\u06fb\5\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\3\11\1\u06fc\2\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\2\11\1\u06fd\22\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\u06fe\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ "\1\u06ff\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\2\11\1\u0700\3\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\6\11\1\u0701\10\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0162"+ "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\42\0\1\u0702\146\0"+ "\1\u0703\42\0\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\6\11\1\u0704\10\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\13\11\1\u03ce\11\11\72\0\1\u0705\71\0\1\u05b2"+ "\154\0\1\u0706\40\0\1\10\7\11\1\0\1\u0707\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\1\u0708\1\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\25\11\67\0\1\u0709\36\0\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\3\11\1\u070a\2\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\6\11\1\u070b\10\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\15\11\1\u070c\7\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\1\11\1\u052a\15\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u070d"+ "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\u070e\5\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\u070f\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u02e1"+ "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\4\11\1\u045c\12\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0710"+ "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\2\11\1\u0410\14\11\2\0"+ "\1\10\25\11\65\0\1\u0711\40\0\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\7\11\1\u0712\7\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\u0713\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\15\0\1\u0714\212\0"+ "\1\u0715\23\0\1\10\7\11\1\0\1\11\1\147\1\0"+ "\1\u0716\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\u0717\5\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ "\1\u0718\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\1\u0719\1\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\4\11\1\u071a\1\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\u071b\5\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\4\11\1\u0538\1\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\5\11\1\u071c\1\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\4\11\1\u071d"+ "\1\u023a\2\0\6\11\14\0\17\11\2\0\1\10\15\11"+ "\1\u071e\1\11\1\u071f\5\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\2\11\1\u0522"+ "\22\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u06ec"+ "\4\11\14\0\17\11\2\0\1\10\25\11\57\0\1\u0720"+ "\46\0\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u0721"+ "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\3\11\1\u0722\2\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\4\11\1\u0723\12\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0724\3\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\1\u0725\1\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\5\11\1\u02dd\1\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\4\11\1\u071d"+ "\1\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\1\11\1\u0726\15\11\1\u071f\5\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\4\11\1\u0538"+ "\12\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\2\11\1\u0727"+ "\22\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u06de"+ "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\4\11\1\u03d9\1\11\14\0\1\11\1\u0728"+ "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\6\11\1\u0729\10\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u072a"+ "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\4\11\1\u072b\1\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\u072c\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\11\1\u072d\4\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\3\11\1\u072e\2\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u072f"+ "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\u035c\5\11\14\0\17\11\2\0\1\10"+ "\25\11\37\0\1\u0730\146\0\1\u0731\45\0\1\10\7\11"+ "\1\0\1\11\1\147\1\0\1\11\1\u0732\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\25\11\37\0\1\u0733\102\0\1\u0734\111\0\1\10"+ "\7\11\1\0\1\11\1\147\1\0\1\u0735\1\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\12\11\1\u0736\4\11\2\0\1\10\25\11"+ "\37\0\1\u0737\66\0\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\13\11\1\u04fc\3\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\u0738\5\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\11\1\u0739\4\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\u073a\5\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\14\11\1\u073b\2\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\1\0\1\u073c"+ "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\u073d\5\11\14\0\17\11\2\0"+ "\1\10\25\11\66\0\1\u073e\37\0\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\2\11\1\u05c4\3\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ "\1\u073f\4\11\14\0\17\11\2\0\1\10\25\11\25\0"+ "\1\u0740\41\0\1\u0741\15\0\1\u0742\10\0\1\u0743\36\0"+ "\1\u0744\76\0\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\2\11\1\u0745\14\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u0746"+ "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\2\11\1\u0747\3\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\2\11\1\u0662\14\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\3\11\1\u0748\2\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\6\11\1\u0749\10\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ "\1\u074a\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\4\11\1\u074b\1\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ "\1\u074c\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u074d"+ "\10\11\2\0\1\10\25\11\35\0\1\u074e\70\0\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\1\11\1\u0662\4\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\5\11\1\u074f\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ "\1\u0750\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\11\1\u0751\4\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\16\11\1\u0410\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\11\1\u05a2\4\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\6\11\1\u0752\10\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\1\u0753\1\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\2\11\1\u0754\3\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u0755"+ "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\6\11\1\u0756\10\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\11\1\u0757\4\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\1\0\1\u0758\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\1\u0759\5\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\2\11"+ "\1\u075a\14\11\2\0\1\10\25\11\35\0\1\u05b2\151\0"+ "\1\u075b\44\0\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\6\11\1\u075c\10\11\2\0\1\10\25\11\74\0"+ "\1\u075d\123\0\1\u075e\33\0\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\2\11\1\u02e1\14\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u075f"+ "\3\11\14\0\17\11\2\0\1\10\25\11\63\0\1\u0760"+ "\42\0\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\6\11\1\u0761\10\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\1\11\1\u0762\15\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\4\11\1\u071d"+ "\1\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\10\11\1\u05d8\14\11\6\0\1\u0763\117\0"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ "\1\u0764\10\11\2\0\1\10\25\11\62\0\1\u0765\43\0"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\3\11\1\u0335\2\11"+ "\14\0\17\11\2\0\1\10\25\11\60\0\1\u0766\125\0"+ "\1\u0767\61\0\1\u0730\147\0\1\u0768\131\0\1\u0769\63\0"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ "\1\u0344\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\5\11\1\u076a\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u076b"+ "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\5\11\1\u076c\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\u076d\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\1\u0442\1\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\2\11"+ "\1\u076e\14\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\3\11\1\u076f\2\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ "\1\u0770\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\2\11\1\u0771"+ "\14\11\2\0\1\10\25\11\32\0\1\u0772\73\0\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\5\11\1\u0773\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\2\11\1\u0774\14\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\3\11\1\u0775\2\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\1\u0538"+ "\24\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\5\11\1\u0776"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\4\11\1\u01d1\1\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ "\1\u0777\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\2\11\1\u03c0"+ "\14\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\2\11\1\u0778\3\11\14\0\17\11\2\0\1\10"+ "\25\11\74\0\1\u0779\31\0\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\1\11\1\u077a\15\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u0235"+ "\2\11\14\0\17\11\2\0\1\10\25\11\37\0\1\u077b"+ "\66\0\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\4\11\1\u0751\12\11\2\0\1\10\25\11\40\0\1\u077c"+ "\177\0\1\u077d\13\0\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\1\11\1\u077e\4\11\14\0\17\11\2\0\1\10\25\11"+ "\65\0\1\u077f\40\0\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\3\11\1\u0780\2\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\5\11"+ "\1\247\11\11\2\0\1\10\25\11\60\0\1\u0781\45\0"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\3\11\1\u0782\2\11"+ "\14\0\17\11\2\0\1\10\25\11\41\0\1\u0783\100\0"+ "\1\u0784\122\0\1\u0785\201\0\1\u0786\75\0\1\u0787\70\0"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\u0788\5\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\2\11\1\u0789\14\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\5\11\1\u078a"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\5\11\1\u04a6\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u078b"+ "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\13\11\1\u0662\3\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\4\11\1\u078c\12\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\1\u06ab\5\11\14\0"+ "\17\11\2\0\1\10\25\11\64\0\1\u078d\41\0\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ "\1\10\10\11\1\u078e\14\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\6\11\1\u078f\10\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0635\5\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\u0790\5\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\7\11\1\u0791\7\11\2\0\1\10\25\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\3\11\1\u0792\2\11\14\0\17\11"+ "\2\0\1\10\25\11\37\0\1\u0793\66\0\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\11\1\u0794\4\11\14\0\17\11"+ "\2\0\1\10\25\11\26\0\1\u0795\54\0\1\u0796\36\0"+ "\1\u0797\171\0\1\u0798\45\0\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\5\11\1\u0799\14\0\17\11\2\0\1\10\25\11"+ "\66\0\1\u079a\37\0\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\4\11\1\u079b\1\11\14\0\17\11\2\0\1\10\25\11"+ "\14\0\1\u079c\111\0\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\4\11\1\u079d\1\11\14\0\17\11\2\0\1\10\25\11"+ "\37\0\1\u079e\160\0\1\u05b2\62\0\1\u079f\164\0\1\u07a0"+ "\75\0\1\u07a1\67\0\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\6\11\1\u07a2\10\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\1\u049b\5\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\5\11\1\u07a3\1\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\17\11\2\0\1\10\15\11\1\u07a4\7\11\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\6\11\1\u05d2\10\11"+ "\2\0\1\10\25\11\63\0\1\u07a5\42\0\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\2\11\1\u07a6\3\11\14\0\17\11"+ "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ "\1\0\1\u07a7\1\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ "\1\11\4\0\6\11\2\0\3\11\1\u07a8\2\11\14\0"+ "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\1\0\1\u07a9\6\11\14\0\17\11\2\0\1\10\25\11"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\7\11"+ "\1\u07aa\7\11\2\0\1\10\25\11\61\0\1\u07ab\44\0"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\1\0\1\u07ac\6\11\14\0"+ "\17\11\2\0\1\10\25\11\41\0\1\u07ad\147\0\1\u07ae"+ "\134\0\1\u066a\114\0\1\u066a\44\0\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\6\11\1\u07af\10\11\2\0"+ "\1\10\25\11\40\0\1\u07b0\65\0\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\6\11\1\u07b1\10\11\2\0"+ "\1\10\25\11\35\0\1\u07b2\70\0\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\1\u03e6\5\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\25\11\32\0\1\u035e\52\0\1\u07b3\61\0\1\u066a\151\0"+ "\1\u07b4\100\0\1\u07b5\65\0\1\10\7\11\1\0\1\11"+ "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ "\2\0\6\11\14\0\4\11\1\u04fc\12\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ "\1\u07b6\16\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\1\11\1\u07b7\15\11\2\0"+ "\1\10\25\11\37\0\1\u07b8\66\0\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\1\11\1\u07b9\4\11\14\0\17\11\2\0"+ "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ "\14\0\13\11\1\u0162\3\11\2\0\1\10\25\11\1\10"+ "\7\11\1\0\1\11\1\147\1\0\1\u07ba\1\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\25\11\117\0\1\u07bb\6\0\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\1\0\1\u07bc\6\11\14\0\17\11\2\0"+ "\1\10\25\11\65\0\1\u07bd\154\0\1\u07be\71\0\1\u07bf"+ "\103\0\1\u07c0\67\0\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\1\11\1\u07c1\15\11\2\0\1\10\25\11"+ "\41\0\1\u07c2\64\0\1\10\7\11\1\0\1\11\1\147"+ "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\1\u07c3\24\11\36\0"+ "\1\u07c4\155\0\1\u07c5\74\0\1\u07c6\153\0\1\u07c7\42\0"+ "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\3\11\1\u07c8\2\11"+ "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\6\11\14\0\6\11\1\u0676\10\11\2\0"+ "\1\10\25\11\62\0\1\u07c9\43\0\1\10\7\11\1\0"+ "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ "\6\11\2\0\5\11\1\u03eb\14\0\17\11\2\0\1\10"+ "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\1\u04fc\5\11"+ "\14\0\17\11\2\0\1\10\25\11\37\0\1\u07ca\204\0"+ "\1\u07cb\45\0\1\u07cc\104\0\1\u07cd\173\0\1\u07ce\127\0"+ "\1\u07cf\40\0\1\10\7\11\1\0\1\11\1\147\1\0"+ "\1\u07d0\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ "\6\11\14\0\17\11\2\0\1\10\25\11\25\0\1\u07d1"+ "\100\0\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u07d2"+ "\3\11\14\0\17\11\2\0\1\10\25\11\60\0\1\u07d3"+ "\133\0\1\u07d4\124\0\1\u07d5\75\0\1\u07d6\70\0\1\10"+ "\7\11\1\0\1\11\1\147\1\0\1\u02ee\1\11\1\0"+ "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ "\2\0\1\10\25\11\35\0\1\u07d7\125\0\1\u07d8\101\0"+ "\1\u07ca\153\0\1\u07d9\113\0\1\u0740\41\0\1\u0741\15\0"+ "\1\u0742\115\0\1\u05b2\112\0\1\u0730\43\0\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ "\11\11\1\u03ff\13\11\40\0\1\u07da\65\0\1\10\7\11"+ "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ "\4\0\6\11\2\0\1\11\1\u0410\4\11\14\0\17\11"+ "\2\0\1\10\25\11\41\0\1\u05b2\75\0\1\u07db\205\0"+ "\1\u066a\61\0\1\u07dc\41\0\1\u07dd\13\0\1\u07de\1\0"+ "\1\u07df\105\0\1\u07e0\71\0\1\u07e1\157\0\1\u07e2\135\0"+ "\1\u07e3\67\0\1\u07e4\150\0\1\u07e5\125\0\1\u07e6\127\0"+ "\1\u07e7\57\0\1\u07e8\171\0\1\u07e9\132\0\1\u07ea\75\0"+ "\1\u07eb\150\0\1\u07ec\105\0\1\u07ed\101\0\1\u07ee\122\0"+ "\1\u07ef\155\0\1\u07f0\121\0\1\u07f1\104\0\1\u07f2\150\0"+ "\1\u07f3\122\0\1\u07f4\102\0\1\u07f5\143\0\1\u07f6\170\0"+ "\1\u07f1\62\0\1\u07f7\163\0\1\u07f8\143\0\1\u07de\132\0"+ "\1\u07f9\56\0\1\u07fa\172\0\1\u07fb\54\0\1\u07fc\131\0"+ "\1\u07fd\125\0\1\u07fe\121\0\1\u07ff\130\0\1\u0800\146\0"+ "\1\u05b2\137\0\1\u0801\63\0\1\u0802\133\0\1\u029d\125\0"+ "\1\u07f1\125\0\1\u0803\102\0\1\u0804\173\0\1\u066a\123\0"+ "\1\u0805\103\0\1\u0806\150\0\1\u0807\102\0\1\u0808\127\0"+ "\1\u0809\126\0\1\u068a\152\0\1\u05b2\74\0\1\u080a\150\0"+ "\1\u06cf\45\0"; private static int [] zzUnpackTrans() { int [] result = new int[172688]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); offset = zzUnpackTrans(ZZ_TRANS_PACKED_1, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\4\0\2\1\1\0\12\1\2\11\21\1\2\11\4\1"+ "\1\11\35\1\1\11\5\1\1\11\10\1\1\11\6\1"+ "\1\11\3\1\1\11\1\1\2\11\24\1\1\0\1\1"+ "\1\0\7\1\2\0\1\11\54\1\2\0\122\1\2\0"+ "\1\11\4\0\1\11\2\0\1\11\22\0\1\11\1\0"+ "\1\1\2\0\2\11\3\1\1\0\14\1\2\11\3\1"+ "\1\0\2\1\1\11\5\1\1\11\235\1\37\0\1\11"+ "\2\0\1\11\15\1\1\11\1\1\1\0\5\1\1\11"+ "\174\1\1\0\31\1\2\0\1\1\2\0\1\1\15\0"+ "\1\11\12\0\1\1\1\0\1\11\16\1\1\0\167\1"+ "\1\0\31\1\36\0\17\1\1\0\154\1\1\0\26\1"+ "\23\0\14\1\1\0\2\1\1\0\3\1\1\0\114\1"+ "\1\0\14\1\1\0\32\1\5\0\1\1\4\0\15\1"+ "\4\0\3\1\2\0\102\1\2\0\11\1\1\0\33\1"+ "\12\0\13\1\4\0\3\1\1\0\76\1\2\0\10\1"+ "\1\11\27\1\5\0\4\1\1\0\5\1\4\0\1\1"+ "\1\0\3\1\1\0\57\1\2\0\32\1\5\0\3\1"+ "\2\0\3\1\4\0\3\1\1\0\47\1\2\0\23\1"+ "\2\0\2\1\2\0\3\1\4\0\3\1\1\0\14\1"+ "\1\0\7\1\1\0\16\1\1\0\26\1\2\0\2\1"+ "\3\0\2\1\1\0\13\1\1\0\2\1\2\0\12\1"+ "\1\0\23\1\2\0\1\1\2\0\2\1\1\0\7\1"+ "\1\0\2\1\2\0\12\1\1\0\17\1\2\0\1\1"+ "\2\0\2\1\1\0\4\1\1\0\1\1\1\0\1\1"+ "\5\0\11\1\1\0\11\1\1\0\2\1\1\0\1\1"+ "\2\0\1\1\1\0\2\1\1\0\1\1\5\0\10\1"+ "\1\0\6\1\1\0\1\1\3\0\1\1\1\0\1\1"+ "\1\0\1\1\5\0\5\1\1\0\5\1\1\0\1\1"+ "\4\0\1\1\1\0\1\1\1\0\1\1\4\0\3\1"+ "\1\0\3\1\1\0\1\1\4\0\1\1\1\0\1\1"+ "\4\0\2\1\1\0\2\1\6\0\1\1\1\0\1\1"+ "\4\0\1\1\7\0\1\1\1\0\1\1\30\0\1\1"+ "\37\0"; private static int [] zzUnpackAttribute() { int [] result = new int[2058]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public GroovyTokenMaker() { } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.LITERAL_STRING_DOUBLE_QUOTE: state = MULTILINE_STRING_DOUBLE; start = text.offset; break; case Token.LITERAL_CHAR: state = MULTILINE_STRING_SINGLE; start = text.offset; break; case Token.COMMENT_MULTILINE: state = MLC; start = text.offset; break; case Token.COMMENT_DOCUMENTATION: state = DOCCOMMENT; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Returns whether a regular expression token can follow the specified * token. * * @param t The token to check, which may be null. * @return Whether a regular expression token may follow this one. */ private static final boolean regexCanFollow(Token t) { char ch; return t==null || //t.isOperator() || (t.length()==1 && ( (ch=t.charAt(0))=='=' || ch=='(' || ch==',' || ch=='?' || ch==':' || ch=='[' )) || /* Operators "==", "===", "!=", "!==", etc. */ (t.getType()==Token.OPERATOR && ((ch=t.charAt(t.length()-1))=='=' || ch=='~')); } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public GroovyTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public GroovyTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 200) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 21: { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } case 49: break; case 3: { addToken(Token.IDENTIFIER); } case 50: break; case 43: { addToken(Token.LITERAL_BOOLEAN); } case 51: break; case 6: { start = zzMarkedPos-1; yybegin(STRING_DOUBLE); } case 52: break; case 36: { start = zzMarkedPos-3; yybegin(MULTILINE_STRING_DOUBLE); } case 53: break; case 13: { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); return firstToken; } case 54: break; case 35: { addToken(Token.ERROR_CHAR); } case 55: break; case 22: { addToken(Token.ERROR_NUMBER_FORMAT); } case 56: break; case 5: { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; } case 57: break; case 11: { addToken(Token.ANNOTATION); } case 58: break; case 29: { addToken(Token.FUNCTION); } case 59: break; case 34: { start = zzMarkedPos-3; yybegin(MULTILINE_STRING_SINGLE); } case 60: break; case 2: { addToken(Token.ERROR_IDENTIFIER); } case 61: break; case 37: { boolean highlightedAsRegex = false; if (zzBuffer[zzStartRead]=='~' || firstToken==null) { addToken(Token.REGEX); highlightedAsRegex = true; } else { // If this is *likely* to be a regex, based on // the previous token, highlight it as such. Token t = firstToken.getLastNonCommentNonWhitespaceToken(); if (regexCanFollow(t)) { addToken(Token.REGEX); highlightedAsRegex = true; } } // If it doesn't *appear* to be a regex, highlight it as // individual tokens. if (!highlightedAsRegex) { int temp = zzStartRead + 1; addToken(zzStartRead, zzStartRead, Token.OPERATOR); zzStartRead = zzCurrentPos = zzMarkedPos = temp; } } case 62: break; case 41: { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.LITERAL_CHAR); } case 63: break; case 46: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } case 64: break; case 32: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.PREPROCESSOR); start = zzMarkedPos; } case 65: break; case 45: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; } case 66: break; case 15: { /* Skip escaped chars, handles case: '\"""'. */ } case 67: break; case 25: { addToken(Token.LITERAL_CHAR); } case 68: break; case 19: { /* Skip escaped chars. */ } case 69: break; case 40: { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.LITERAL_STRING_DOUBLE_QUOTE); } case 70: break; case 24: { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } case 71: break; case 27: { start = zzMarkedPos-2; yybegin(MLC); } case 72: break; case 8: { addToken(Token.WHITESPACE); } case 73: break; case 31: { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_DOCUMENTATION); } case 74: break; case 39: { addToken(Token.DATA_TYPE); } case 75: break; case 30: { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } case 76: break; case 4: { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } case 77: break; case 33: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } case 78: break; case 20: { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } case 79: break; case 17: { /* Skip escaped chars, handles case: "\'''". */ } case 80: break; case 38: { start = zzMarkedPos-3; yybegin(DOCCOMMENT); } case 81: break; case 28: { addToken(Token.RESERVED_WORD); } case 82: break; case 44: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } case 83: break; case 48: { addToken(Token.RESERVED_WORD_2); } case 84: break; case 14: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } case 85: break; case 10: { addToken(Token.SEPARATOR); } case 86: break; case 7: { addNullToken(); return firstToken; } case 87: break; case 12: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } case 88: break; case 9: { addToken(Token.OPERATOR); } case 89: break; case 18: { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } case 90: break; case 23: { addToken(Token.LITERAL_NUMBER_FLOAT); } case 91: break; case 47: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } case 92: break; case 42: { addToken(Token.COMMENT_MULTILINE); } case 93: break; case 26: { start = zzMarkedPos-2; yybegin(EOL_COMMENT); } case 94: break; case 1: { } case 95: break; case 16: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } case 96: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case EOL_COMMENT: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } case 2059: break; case MULTILINE_STRING_DOUBLE: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } case 2060: break; case DOCCOMMENT: { yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); return firstToken; } case 2061: break; case YYINITIAL: { addNullToken(); return firstToken; } case 2062: break; case MLC: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } case 2063: break; case STRING_DOUBLE: { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); return firstToken; } case 2064: break; case MULTILINE_STRING_SINGLE: { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } case 2065: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HTMLTokenMaker.flex000066400000000000000000001247441257417003700313510ustar00rootroot00000000000000/* * 01/24/2005 * * HTMLTokenMaker.java - Generates tokens for HTML syntax highlighting. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for HTML 5 files. * * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated HTMLTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.9 */ %% %public %class HTMLTokenMaker %extends AbstractMarkupTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Type specific to XMLTokenMaker denoting a line ending with an unclosed * double-quote attribute. */ public static final int INTERNAL_ATTR_DOUBLE = -1; /** * Type specific to XMLTokenMaker denoting a line ending with an unclosed * single-quote attribute. */ public static final int INTERNAL_ATTR_SINGLE = -2; /** * Token type specific to HTMLTokenMaker; this signals that the user has * ended a line with an unclosed HTML tag; thus a new line is beginning * still inside of the tag. */ public static final int INTERNAL_INTAG = -3; /** * Token type specific to HTMLTokenMaker; this signals that the user has * ended a line with an unclosed <script> tag. */ public static final int INTERNAL_INTAG_SCRIPT = -4; /** * Token type specifying we're in a double-qouted attribute in a * script tag. */ public static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -5; /** * Token type specifying we're in a single-qouted attribute in a * script tag. */ public static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -6; /** * Token type specific to HTMLTokenMaker; this signals that the user has * ended a line with an unclosed <style> tag. */ public static final int INTERNAL_INTAG_STYLE = -7; /** * Token type specifying we're in a double-qouted attribute in a * style tag. */ public static final int INTERNAL_ATTR_DOUBLE_QUOTE_STYLE = -8; /** * Token type specifying we're in a single-qouted attribute in a * style tag. */ public static final int INTERNAL_ATTR_SINGLE_QUOTE_STYLE = -9; /** * Token type specifying we're in JavaScript. */ public static final int INTERNAL_IN_JS = -10; /** * Token type specifying we're in a JavaScript multiline comment. */ public static final int INTERNAL_IN_JS_MLC = -11; /** * Token type specifying we're in an invalid multi-line JS string. */ public static final int INTERNAL_IN_JS_STRING_INVALID = -12; /** * Token type specifying we're in a valid multi-line JS string. */ public static final int INTERNAL_IN_JS_STRING_VALID = -13; /** * Token type specifying we're in an invalid multi-line JS single-quoted string. */ public static final int INTERNAL_IN_JS_CHAR_INVALID = -14; /** * Token type specifying we're in a valid multi-line JS single-quoted string. */ public static final int INTERNAL_IN_JS_CHAR_VALID = -15; /** * Internal type denoting a line ending in CSS. */ public static final int INTERNAL_CSS = -16; /** * Internal type denoting a line ending in a CSS property. */ public static final int INTERNAL_CSS_PROPERTY = -17; /** * Internal type denoting a line ending in a CSS property value. */ public static final int INTERNAL_CSS_VALUE = -18; /** * Internal type denoting line ending in a CSS double-quote string. * The state to return to is embedded in the actual end token type. */ public static final int INTERNAL_CSS_STRING = -(1<<11); /** * Internal type denoting line ending in a CSS single-quote string. * The state to return to is embedded in the actual end token type. */ public static final int INTERNAL_CSS_CHAR = -(2<<11); /** * Internal type denoting line ending in a CSS multi-line comment. * The state to return to is embedded in the actual end token type. */ public static final int INTERNAL_CSS_MLC = -(3<<11); /** * The state previous CSS-related state we were in before going into a CSS * string, multi-line comment, etc. */ private int cssPrevState; /** * Whether closing markup tags are automatically completed for HTML. */ private static boolean completeCloseTags; /** * When in the JS_STRING state, whether the current string is valid. */ private boolean validJSString; /** * Language state set on HTML tokens. Must be 0. */ private static final int LANG_INDEX_DEFAULT = 0; /** * Language state set on JavaScript tokens. */ private static final int LANG_INDEX_JS = 1; /** * Language state set on CSS tokens. */ private static final int LANG_INDEX_CSS = 2; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public HTMLTokenMaker() { super(); } /** * Adds the token specified to the current linked list of tokens as an * "end token;" that is, at zzMarkedPos. * * @param tokenType The token's type. */ private void addEndToken(int tokenType) { addToken(zzMarkedPos,zzMarkedPos, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override protected OccurrenceMarker createOccurrenceMarker() { return new HtmlOccurrenceMarker(); } /** * Sets whether markup close tags should be completed. You might not want * this to be the case, since some tags in standard HTML aren't usually * closed. * * @return Whether closing markup tags are completed. * @see #setCompleteCloseTags(boolean) */ @Override public boolean getCompleteCloseTags() { return completeCloseTags; } @Override public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { return languageIndex==LANG_INDEX_CSS || languageIndex==LANG_INDEX_JS; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { switch (languageIndex) { case LANG_INDEX_JS: return new String[] { "//", null }; case LANG_INDEX_CSS: return new String[] { "/*", "*/" }; default: return new String[] { "" }; } } /** * Returns Token.MARKUP_TAG_NAME. * * @param type The token type. * @return Whether tokens of this type should have "mark occurrences" * enabled. */ @Override public boolean getMarkOccurrencesOfTokenType(int type) { return type==Token.MARKUP_TAG_NAME; } /** * Overridden to handle newlines in JS and CSS differently than those in * markup. */ @Override public boolean getShouldIndentNextLineAfter(Token token) { int languageIndex = token==null ? 0 : token.getLanguageIndex(); if (getCurlyBracesDenoteCodeBlocks(languageIndex)) { if (token!=null && token.length()==1) { char ch = token.charAt(0); return ch=='{' || ch=='('; } } return false; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; cssPrevState = CSS; // Shouldn't be necessary int languageIndex = 0; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.MARKUP_COMMENT: state = COMMENT; break; case Token.PREPROCESSOR: state = PI; break; case Token.VARIABLE: state = DTD; break; case INTERNAL_INTAG: state = INTAG; break; case INTERNAL_INTAG_SCRIPT: state = INTAG_SCRIPT; break; case INTERNAL_INTAG_STYLE: state = INTAG_STYLE; break; case INTERNAL_ATTR_DOUBLE: state = INATTR_DOUBLE; break; case INTERNAL_ATTR_SINGLE: state = INATTR_SINGLE; break; case INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT: state = INATTR_DOUBLE_SCRIPT; break; case INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT: state = INATTR_SINGLE_SCRIPT; break; case INTERNAL_ATTR_DOUBLE_QUOTE_STYLE: state = INATTR_DOUBLE_STYLE; break; case INTERNAL_ATTR_SINGLE_QUOTE_STYLE: state = INATTR_SINGLE_STYLE; break; case INTERNAL_IN_JS: state = JAVASCRIPT; languageIndex = LANG_INDEX_JS; break; case INTERNAL_IN_JS_MLC: state = JS_MLC; languageIndex = LANG_INDEX_JS; break; case INTERNAL_IN_JS_STRING_INVALID: state = JS_STRING; validJSString = false; languageIndex = LANG_INDEX_JS; break; case INTERNAL_IN_JS_STRING_VALID: state = JS_STRING; validJSString = true; languageIndex = LANG_INDEX_JS; break; case INTERNAL_IN_JS_CHAR_INVALID: state = JS_CHAR; validJSString = false; languageIndex = LANG_INDEX_JS; break; case INTERNAL_IN_JS_CHAR_VALID: state = JS_CHAR; validJSString = true; languageIndex = LANG_INDEX_JS; break; case INTERNAL_CSS: state = CSS; languageIndex = LANG_INDEX_CSS; break; case INTERNAL_CSS_PROPERTY: state = CSS_PROPERTY; languageIndex = LANG_INDEX_CSS; break; case INTERNAL_CSS_VALUE: state = CSS_VALUE; languageIndex = LANG_INDEX_CSS; break; default: if (initialTokenType<-1024) { int main = -(-initialTokenType & 0xffffff00); switch (main) { default: // Should never happen case INTERNAL_CSS_STRING: state = CSS_STRING; break; case INTERNAL_CSS_CHAR: state = CSS_CHAR_LITERAL; break; case INTERNAL_CSS_MLC: state = CSS_C_STYLE_COMMENT; break; } cssPrevState = -initialTokenType&0xff; languageIndex = LANG_INDEX_CSS; } else { state = Token.NULL; } break; } setLanguageIndex(languageIndex); start = text.offset; s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Sets whether markup close tags should be completed. You might not want * this to be the case, since some tags in standard HTML aren't usually * closed. * * @param complete Whether closing markup tags are completed. * @see #getCompleteCloseTags() */ public static void setCompleteCloseTags(boolean complete) { completeCloseTags = complete; } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} // HTML-specific stuff. Whitespace = ([ \t\f]+) LineTerminator = ([\n]) Identifier = ([^ \t\n<&]+) EntityReference = ([&][^; \t]*[;]?) InTagIdentifier = ([^ \t\n\"\'/=>]+) EndScriptTag = ("") EndStyleTag = ("") // General stuff. Letter = [A-Za-z] NonzeroDigit = [1-9] Digit = ("0"|{NonzeroDigit}) HexDigit = ({Digit}|[A-Fa-f]) OctalDigit = ([0-7]) LetterOrUnderscore = ({Letter}|[_]) LetterOrUnderscoreOrDash = ({LetterOrUnderscore}|[\-]) // JavaScript stuff. EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\") IdentifierStart = ({Letter}|"_"|"$") IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) JS_MLCBegin = "/*" JS_MLCEnd = "*/" JS_LineCommentBegin = "//" JS_IntegerHelper1 = (({NonzeroDigit}{Digit}*)|"0") JS_IntegerHelper2 = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) JS_IntegerLiteral = ({JS_IntegerHelper1}[lL]?) JS_HexLiteral = ({JS_IntegerHelper2}[lL]?) JS_FloatHelper1 = ([fFdD]?) JS_FloatHelper2 = ([eE][+-]?{Digit}+{JS_FloatHelper1}) JS_FloatLiteral1 = ({Digit}+"."({JS_FloatHelper1}|{JS_FloatHelper2}|{Digit}+({JS_FloatHelper1}|{JS_FloatHelper2}))) JS_FloatLiteral2 = ("."{Digit}+({JS_FloatHelper1}|{JS_FloatHelper2})) JS_FloatLiteral3 = ({Digit}+{JS_FloatHelper2}) JS_FloatLiteral = ({JS_FloatLiteral1}|{JS_FloatLiteral2}|{JS_FloatLiteral3}|({Digit}+[fFdD])) JS_ErrorNumberFormat = (({JS_IntegerLiteral}|{JS_HexLiteral}|{JS_FloatLiteral}){NonSeparator}+) JS_Separator = ([\(\)\{\}\[\]\]]) JS_Separator2 = ([\;,.]) JS_NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"||"|"&&"|">>>") JS_AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") JS_Operator = ({JS_NonAssignmentOperator}|{JS_AssignmentOperator}) JS_Identifier = ({IdentifierStart}{IdentifierPart}*) JS_ErrorIdentifier = ({NonSeparator}+) JS_Regex = ("/"([^\*\\/]|\\.)([^/\\]|\\.)*"/"[gim]*) // CSS stuff. CSS_SelectorPiece = (("*"|"."|{LetterOrUnderscoreOrDash})({LetterOrUnderscoreOrDash}|"."|{Digit})*) CSS_PseudoClass = (":"("root"|"nth-child"|"nth-last-child"|"nth-of-type"|"nth-last-of-type"|"first-child"|"last-child"|"first-of-type"|"last-of-type"|"only-child"|"only-of-type"|"empty"|"link"|"visited"|"active"|"hover"|"focus"|"target"|"lang"|"enabled"|"disabled"|"checked"|":first-line"|":first-letter"|":before"|":after"|"not")) CSS_AtKeyword = ("@"{CSS_SelectorPiece}) CSS_Id = ("#"{CSS_SelectorPiece}) CSS_Separator = ([;\(\)\[\]]) CSS_MlcStart = ({JS_MLCBegin}) CSS_MlcEnd = ({JS_MLCEnd}) CSS_Property = ([\*]?{LetterOrUnderscoreOrDash}({LetterOrUnderscoreOrDash}|{Digit})*) CSS_ValueChar = ({LetterOrUnderscoreOrDash}|[\\/]) CSS_Value = ({CSS_ValueChar}*) CSS_Function = ({CSS_Value}\() CSS_Digits = ([\-]?{Digit}+([0-9\.]+)?(pt|pc|in|mm|cm|em|ex|px|ms|s|%)?) CSS_Hex = ("#"[0-9a-fA-F]+) CSS_Number = ({CSS_Digits}|{CSS_Hex}) URLGenDelim = ([:\/\?#\[\]@]) URLSubDelim = ([\!\$&'\(\)\*\+,;=]) URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) URLCharacters = ({URLCharacter}*) URLEndCharacter = ([\/\$]|{Letter}|{Digit}) URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) %state COMMENT %state PI %state DTD %state INTAG %state INTAG_CHECK_TAG_NAME %state INATTR_DOUBLE %state INATTR_SINGLE %state INTAG_SCRIPT %state INATTR_DOUBLE_SCRIPT %state INATTR_SINGLE_SCRIPT %state INTAG_STYLE %state INATTR_DOUBLE_STYLE %state INATTR_SINGLE_STYLE %state JAVASCRIPT %state JS_STRING %state JS_CHAR %state JS_MLC %state JS_EOL_COMMENT %state CSS %state CSS_PROPERTY %state CSS_VALUE %state CSS_STRING %state CSS_CHAR_LITERAL %state CSS_C_STYLE_COMMENT %% { "" { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); } "-" {} <> { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; } } { [^\n\?]+ {} {LineTerminator} { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } "?>" { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.MARKUP_PROCESSING_INSTRUCTION); } "?" {} <> { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } } { [^\n>]+ {} ">" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.MARKUP_DTD); } {LineTerminator} | <> { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } } { [Aa] | [aA][bB][bB][rR] | [aA][cC][rR][oO][nN][yY][mM] | [aA][dD][dD][rR][eE][sS][sS] | [aA][pP][pP][lL][eE][tT] | [aA][rR][eE][aA] | [aA][rR][tT][iI][cC][lL][eE] | [aA][sS][iI][dD][eE] | [aA][uU][dD][iI][oO] | [bB] | [bB][aA][sS][eE] | [bB][aA][sS][eE][fF][oO][nN][tT] | [bB][dD][oO] | [bB][gG][sS][oO][uU][nN][dD] | [bB][iI][gG] | [bB][lL][iI][nN][kK] | [bB][lL][oO][cC][kK][qQ][uU][oO][tT][eE] | [bB][oO][dD][yY] | [bB][rR] | [bB][uU][tT][tT][oO][nN] | [cC][aA][nN][vV][aA][sS] | [cC][aA][pP][tT][iI][oO][nN] | [cC][eE][nN][tT][eE][rR] | [cC][iI][tT][eE] | [cC][oO][dD][eE] | [cC][oO][lL] | [cC][oO][lL][gG][rR][oO][uU][pP] | [cC][oO][mM][mM][aA][nN][dD] | [cC][oO][mM][mM][eE][nN][tT] | [dD][dD] | [dD][aA][tT][aA][gG][rR][iI][dD] | [dD][aA][tT][aA][lL][iI][sS][tT] | [dD][aA][tT][aA][tT][eE][mM][pP][lL][aA][tT][eE] | [dD][eE][lL] | [dD][eE][tT][aA][iI][lL][sS] | [dD][fF][nN] | [dD][iI][aA][lL][oO][gG] | [dD][iI][rR] | [dD][iI][vV] | [dD][lL] | [dD][tT] | [eE][mM] | [eE][mM][bB][eE][dD] | [eE][vV][eE][nN][tT][sS][oO][uU][rR][cC][eE] | [fF][iI][eE][lL][dD][sS][eE][tT] | [fF][iI][gG][uU][rR][eE] | [fF][oO][nN][tT] | [fF][oO][oO][tT][eE][rR] | [fF][oO][rR][mM] | [fF][rR][aA][mM][eE] | [fF][rR][aA][mM][eE][sS][eE][tT] | [hH][123456] | [hH][eE][aA][dD] | [hH][eE][aA][dD][eE][rR] | [hH][rR] | [hH][tT][mM][lL] | [iI] | [iI][fF][rR][aA][mM][eE] | [iI][lL][aA][yY][eE][rR] | [iI][mM][gG] | [iI][nN][pP][uU][tT] | [iI][nN][sS] | [iI][sS][iI][nN][dD][eE][xX] | [kK][bB][dD] | [kK][eE][yY][gG][eE][nN] | [lL][aA][bB][eE][lL] | [lL][aA][yY][eE][rR] | [lL][eE][gG][eE][nN][dD] | [lL][iI] | [lL][iI][nN][kK] | [mM][aA][pP] | [mM][aA][rR][kK] | [mM][aA][rR][qQ][uU][eE][eE] | [mM][eE][nN][uU] | [mM][eE][tT][aA] | [mM][eE][tT][eE][rR] | [mM][uU][lL][tT][iI][cC][oO][lL] | [nN][aA][vV] | [nN][eE][sS][tT] | [nN][oO][bB][rR] | [nN][oO][eE][mM][bB][eE][dD] | [nN][oO][fF][rR][aA][mM][eE][sS] | [nN][oO][lL][aA][yY][eE][rR] | [nN][oO][sS][cC][rR][iI][pP][tT] | [oO][bB][jJ][eE][cC][tT] | [oO][lL] | [oO][pP][tT][gG][rR][oO][uU][pP] | [oO][pP][tT][iI][oO][nN] | [oO][uU][tT][pP][uU][tT] | [pP] | [pP][aA][rR][aA][mM] | [pP][lL][aA][iI][nN][tT][eE][xX][tT] | [pP][rR][eE] | [pP][rR][oO][gG][rR][eE][sS][sS] | [qQ] | [rR][uU][lL][eE] | [sS] | [sS][aA][mM][pP] | [sS][cC][rR][iI][pP][tT] | [sS][eE][cC][tT][iI][oO][nN] | [sS][eE][lL][eE][cC][tT] | [sS][eE][rR][vV][eE][rR] | [sS][mM][aA][lL][lL] | [sS][oO][uU][rR][cC][eE] | [sS][pP][aA][cC][eE][rR] | [sS][pP][aA][nN] | [sS][tT][rR][iI][kK][eE] | [sS][tT][rR][oO][nN][gG] | [sS][tT][yY][lL][eE] | [sS][uU][bB] | [sS][uU][pP] | [tT][aA][bB][lL][eE] | [tT][bB][oO][dD][yY] | [tT][dD] | [tT][eE][xX][tT][aA][rR][eE][aA] | [tT][fF][oO][oO][tT] | [tT][hH] | [tT][hH][eE][aA][dD] | [tT][iI][mM][eE] | [tT][iI][tT][lL][eE] | [tT][rR] | [tT][tT] | [uU] | [uU][lL] | [vV][aA][rR] | [vV][iI][dD][eE][oO] { addToken(Token.MARKUP_TAG_NAME); } {InTagIdentifier} { /* A non-recognized HTML tag name */ yypushback(yylength()); yybegin(INTAG); } . { /* Shouldn't happen */ yypushback(1); yybegin(INTAG); } <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } } { "/" { addToken(Token.MARKUP_TAG_DELIMITER); } {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } {Whitespace} { addToken(Token.WHITESPACE); } "=" { addToken(Token.OPERATOR); } "/>" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } ">" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE); } [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE); } <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } } { [^\"]* {} [\"] { yybegin(INTAG); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; } } { [^\']* {} [\'] { yybegin(INTAG); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; } } { {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } "/>" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } "/" { addToken(Token.MARKUP_TAG_DELIMITER); } // Won't appear in valid HTML. {Whitespace} { addToken(Token.WHITESPACE); } "=" { addToken(Token.OPERATOR); } ">" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(JAVASCRIPT, LANG_INDEX_JS); } [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_SCRIPT); } [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_SCRIPT); } <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_SCRIPT); return firstToken; } } { [^\"]* {} [\"] { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); return firstToken; } } { [^\']* {} [\'] { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); return firstToken; } } { {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } "/>" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } "/" { addToken(Token.MARKUP_TAG_DELIMITER); } // Won't appear in valid HTML. {Whitespace} { addToken(Token.WHITESPACE); } "=" { addToken(Token.OPERATOR); } ">" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(CSS, LANG_INDEX_CSS); } [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_STYLE); } [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_STYLE); } <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_STYLE); return firstToken; } } { [^\"]* {} [\"] { yybegin(INTAG_STYLE); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_STYLE); return firstToken; } } { [^\']* {} [\'] { yybegin(INTAG_STYLE); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_STYLE); return firstToken; } } { {EndScriptTag} { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } // ECMA 3+ keywords. "break" | "continue" | "delete" | "else" | "for" | "function" | "if" | "in" | "new" | "this" | "typeof" | "var" | "void" | "while" | "with" { addToken(Token.RESERVED_WORD); } "return" { addToken(Token.RESERVED_WORD_2); } //JavaScript 1.6 "each" {if(JavaScriptTokenMaker.isJavaScriptCompatible("1.6")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } //JavaScript 1.7 "let" {if(JavaScriptTokenMaker.isJavaScriptCompatible("1.7")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } // Reserved (but not yet used) ECMA keywords. "abstract" { addToken(Token.RESERVED_WORD); } "boolean" { addToken(Token.DATA_TYPE); } "byte" { addToken(Token.DATA_TYPE); } "case" { addToken(Token.RESERVED_WORD); } "catch" { addToken(Token.RESERVED_WORD); } "char" { addToken(Token.DATA_TYPE); } "class" { addToken(Token.RESERVED_WORD); } "const" { addToken(Token.RESERVED_WORD); } "debugger" { addToken(Token.RESERVED_WORD); } "default" { addToken(Token.RESERVED_WORD); } "do" { addToken(Token.RESERVED_WORD); } "double" { addToken(Token.DATA_TYPE); } "enum" { addToken(Token.RESERVED_WORD); } "export" { addToken(Token.RESERVED_WORD); } "extends" { addToken(Token.RESERVED_WORD); } "final" { addToken(Token.RESERVED_WORD); } "finally" { addToken(Token.RESERVED_WORD); } "float" { addToken(Token.DATA_TYPE); } "goto" { addToken(Token.RESERVED_WORD); } "implements" { addToken(Token.RESERVED_WORD); } "import" { addToken(Token.RESERVED_WORD); } "instanceof" { addToken(Token.RESERVED_WORD); } "int" { addToken(Token.DATA_TYPE); } "interface" { addToken(Token.RESERVED_WORD); } "long" { addToken(Token.DATA_TYPE); } "native" { addToken(Token.RESERVED_WORD); } "package" { addToken(Token.RESERVED_WORD); } "private" { addToken(Token.RESERVED_WORD); } "protected" { addToken(Token.RESERVED_WORD); } "public" { addToken(Token.RESERVED_WORD); } "short" { addToken(Token.DATA_TYPE); } "static" { addToken(Token.RESERVED_WORD); } "super" { addToken(Token.RESERVED_WORD); } "switch" { addToken(Token.RESERVED_WORD); } "synchronized" { addToken(Token.RESERVED_WORD); } "throw" { addToken(Token.RESERVED_WORD); } "throws" { addToken(Token.RESERVED_WORD); } "transient" { addToken(Token.RESERVED_WORD); } "try" { addToken(Token.RESERVED_WORD); } "volatile" { addToken(Token.RESERVED_WORD); } "null" { addToken(Token.RESERVED_WORD); } // Literals. "false" | "true" { addToken(Token.LITERAL_BOOLEAN); } "NaN" { addToken(Token.RESERVED_WORD); } "Infinity" { addToken(Token.RESERVED_WORD); } // Functions. "eval" | "parseInt" | "parseFloat" | "escape" | "unescape" | "isNaN" | "isFinite" { addToken(Token.FUNCTION); } {LineTerminator} { addEndToken(INTERNAL_IN_JS); return firstToken; } {JS_Identifier} { addToken(Token.IDENTIFIER); } {Whitespace} { addToken(Token.WHITESPACE); } /* String/Character literals. */ [\'] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); } [\"] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); } /* Comment literals. */ "/**/" { addToken(Token.COMMENT_MULTILINE); } {JS_MLCBegin} { start = zzMarkedPos-2; yybegin(JS_MLC); } {JS_LineCommentBegin} { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); } /* Attempt to identify regular expressions (not foolproof) - do after comments! */ {JS_Regex} { boolean highlightedAsRegex = false; if (firstToken==null) { addToken(Token.REGEX); highlightedAsRegex = true; } else { // If this is *likely* to be a regex, based on // the previous token, highlight it as such. Token t = firstToken.getLastNonCommentNonWhitespaceToken(); if (RSyntaxUtilities.regexCanFollowInJavaScript(t)) { addToken(Token.REGEX); highlightedAsRegex = true; } } // If it doesn't *appear* to be a regex, highlight it as // individual tokens. if (!highlightedAsRegex) { int temp = zzStartRead + 1; addToken(zzStartRead, zzStartRead, Token.OPERATOR); zzStartRead = zzCurrentPos = zzMarkedPos = temp; } } /* Separators. */ {JS_Separator} { addToken(Token.SEPARATOR); } {JS_Separator2} { addToken(Token.IDENTIFIER); } /* Operators. */ {JS_Operator} { addToken(Token.OPERATOR); } /* Numbers */ {JS_IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {JS_HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } {JS_FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } {JS_ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } {JS_ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } /* Ended with a line not in a string or comment. */ <> { addEndToken(INTERNAL_IN_JS); return firstToken; } /* Catch any other (unhandled) characters and flag them as bad. */ . { addToken(Token.ERROR_IDENTIFIER); } } { [^\n\\\"]+ {} \\x{HexDigit}{2} {} \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } \\u{HexDigit}{4} {} \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } \\. { /* Skip all escaped chars. */ } \\ { /* Line ending in '\' => continue to next line. */ if (validJSString) { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_IN_JS_STRING_VALID); } else { addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS_STRING_INVALID); } return firstToken; } \" { int type = validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } \n | <> { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } } { [^\n\\\']+ {} \\x{HexDigit}{2} {} \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } \\u{HexDigit}{4} {} \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } \\. { /* Skip all escaped chars. */ } \\ { /* Line ending in '\' => continue to next line. */ if (validJSString) { addToken(start,zzStartRead, Token.LITERAL_CHAR); addEndToken(INTERNAL_IN_JS_CHAR_VALID); } else { addToken(start,zzStartRead, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS_CHAR_INVALID); } return firstToken; } \' { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } \n | <> { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; } } { // JavaScript MLC's. This state is essentially Java's MLC state. [^hwf<\n\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } [hwf] {} {EndScriptTag} { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); int temp = zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } "<" {} {JS_MLCEnd} { yybegin(JAVASCRIPT); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } \* {} \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } } { [^hwf<\n]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } [hwf] {} {EndScriptTag} { int temp = zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); yybegin(YYINITIAL, LANG_INDEX_DEFAULT); addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } "<" {} \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } } { {EndStyleTag} { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } {CSS_SelectorPiece} { addToken(Token.DATA_TYPE); } {CSS_PseudoClass} { addToken(Token.RESERVED_WORD); } ":" { /* Unknown pseudo class */ addToken(Token.DATA_TYPE); } {CSS_AtKeyword} { addToken(Token.REGEX); } {CSS_Id} { addToken(Token.VARIABLE); } "{" { addToken(Token.SEPARATOR); yybegin(CSS_PROPERTY); } [,] { addToken(Token.IDENTIFIER); } \" { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } \' { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } [+>~\^$\|=] { addToken(Token.OPERATOR); } {CSS_Separator} { addToken(Token.SEPARATOR); } {Whitespace} { addToken(Token.WHITESPACE); } {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } . { /*System.out.println("CSS: " + yytext());*/ addToken(Token.IDENTIFIER); } "\n" | <> { addEndToken(INTERNAL_CSS); return firstToken; } } { {EndStyleTag} { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } {CSS_Property} { addToken(Token.RESERVED_WORD); } "}" { addToken(Token.SEPARATOR); yybegin(CSS); } ":" { addToken(Token.OPERATOR); yybegin(CSS_VALUE); } {Whitespace} { addToken(Token.WHITESPACE); } {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } . { /*System.out.println("css_property: " + yytext());*/ addToken(Token.IDENTIFIER); } "\n" | <> { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; } } { {EndStyleTag} { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } {CSS_Value} { addToken(Token.IDENTIFIER); } "!important" { addToken(Token.ANNOTATION); } {CSS_Function} { int temp = zzMarkedPos - 2; addToken(zzStartRead, temp, Token.FUNCTION); addToken(zzMarkedPos-1, zzMarkedPos-1, Token.SEPARATOR); zzStartRead = zzCurrentPos = zzMarkedPos; } {CSS_Number} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } \" { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } \' { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } ")" { /* End of a function */ addToken(Token.SEPARATOR); } [;] { addToken(Token.OPERATOR); yybegin(CSS_PROPERTY); } [,\.] { addToken(Token.IDENTIFIER); } "}" { addToken(Token.SEPARATOR); yybegin(CSS); } {Whitespace} { addToken(Token.WHITESPACE); } {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } . { /*System.out.println("css_value: " + yytext());*/ addToken(Token.IDENTIFIER); } "\n" | <> { addEndToken(INTERNAL_CSS_VALUE); return firstToken; } } { [^\n\\\"]+ {} \\.? { /* Skip escaped chars. */ } \" { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(cssPrevState); } \n | <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; } } { [^\n\\\']+ {} \\.? { /* Skip escaped chars. */ } \' { addToken(start,zzStartRead, Token.LITERAL_CHAR); yybegin(cssPrevState); } \n | <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; } } { [^hwf\n\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } [hwf] {} {CSS_MlcEnd} { addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(cssPrevState); } \* {} \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HTMLTokenMaker.java000066400000000000000000004007351257417003700313310ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 6/20/15 6:54 PM */ /* * 01/24/2005 * * HTMLTokenMaker.java - Generates tokens for HTML syntax highlighting. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for HTML 5 files. * * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated HTMLTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.9 */ public class HTMLTokenMaker extends AbstractMarkupTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int INATTR_SINGLE_SCRIPT = 10; public static final int JS_CHAR = 16; public static final int CSS_STRING = 22; public static final int JS_MLC = 17; public static final int CSS_CHAR_LITERAL = 23; public static final int INTAG_SCRIPT = 8; public static final int CSS_PROPERTY = 20; public static final int CSS_C_STYLE_COMMENT = 24; public static final int CSS = 19; public static final int CSS_VALUE = 21; public static final int COMMENT = 1; public static final int INATTR_DOUBLE_SCRIPT = 9; public static final int PI = 2; public static final int JAVASCRIPT = 14; public static final int INTAG = 4; public static final int INTAG_CHECK_TAG_NAME = 5; public static final int INATTR_SINGLE_STYLE = 13; public static final int DTD = 3; public static final int JS_EOL_COMMENT = 18; public static final int INATTR_DOUBLE_STYLE = 12; public static final int INATTR_SINGLE = 7; public static final int YYINITIAL = 0; public static final int INATTR_DOUBLE = 6; public static final int JS_STRING = 15; public static final int INTAG_STYLE = 11; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\4\1\2\1\0\1\1\1\33\22\0\1\4\1\51\1\7"+ "\1\34\1\36\1\50\1\5\1\107\1\104\1\103\1\37\1\42\1\45"+ "\1\31\1\43\1\10\1\25\6\124\1\27\2\24\1\53\1\6\1\3"+ "\1\46\1\17\1\52\1\102\1\111\1\26\1\12\1\115\1\22\1\41"+ "\1\117\1\123\1\14\1\125\1\120\1\21\1\114\1\113\1\112\1\15"+ "\1\121\1\13\1\11\1\16\1\116\1\122\1\23\1\40\1\20\1\23"+ "\1\106\1\35\1\106\1\47\1\30\1\0\1\70\1\101\1\65\1\67"+ "\1\75\1\72\1\57\1\64\1\56\1\125\1\77\1\66\1\76\1\63"+ "\1\61\1\74\1\121\1\60\1\71\1\62\1\32\1\100\1\110\1\105"+ "\1\73\1\126\1\127\1\55\1\44\1\54\uff81\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\6\0\2\1\1\0\2\1\1\0\2\1\7\0\1\2"+ "\3\0\2\2\1\3\1\4\1\5\1\6\1\1\1\7"+ "\5\1\1\10\2\1\1\11\1\12\2\13\1\14\1\15"+ "\1\16\1\17\1\20\1\21\1\22\1\23\2\21\2\23"+ "\3\21\2\23\5\21\1\23\3\21\1\23\1\1\1\24"+ "\1\1\1\25\1\15\1\26\1\27\1\30\1\31\1\32"+ "\1\33\1\34\1\35\1\36\2\17\1\2\1\37\1\17"+ "\2\2\1\17\2\40\1\17\1\2\1\35\2\17\1\2"+ "\1\41\1\35\17\2\1\42\2\2\1\1\1\43\1\44"+ "\1\45\1\1\1\46\1\47\1\50\1\1\1\51\6\1"+ "\1\52\4\1\1\53\1\54\1\53\1\55\1\53\1\56"+ "\1\53\1\57\1\53\1\60\1\61\1\62\1\63\2\62"+ "\1\64\1\62\1\65\1\66\1\67\1\70\1\67\1\71"+ "\2\2\1\40\1\2\2\67\1\72\1\73\1\74\1\75"+ "\1\76\1\77\1\100\1\1\1\101\1\1\1\4\2\102"+ "\1\103\1\104\1\6\5\0\1\105\31\21\1\23\1\21"+ "\1\23\2\21\1\23\44\21\1\106\3\0\1\107\1\0"+ "\1\110\1\17\1\35\1\2\1\17\1\111\1\40\1\111"+ "\2\112\1\111\1\113\1\111\1\2\1\64\1\2\1\64"+ "\17\2\1\64\34\2\1\114\1\115\1\116\1\0\1\117"+ "\12\0\1\120\1\121\15\0\1\122\1\40\5\0\1\40"+ "\1\0\1\76\1\123\1\124\2\102\1\0\1\125\4\0"+ "\13\21\1\23\64\21\1\0\1\126\1\0\1\35\1\2"+ "\1\112\1\0\2\113\1\2\1\56\23\2\1\127\40\2"+ "\41\0\2\102\1\130\2\0\1\131\22\21\1\23\5\21"+ "\1\23\12\21\1\0\1\132\1\35\10\2\1\133\6\2"+ "\1\56\16\2\1\134\1\2\1\135\4\2\1\0\1\1"+ "\3\0\1\136\3\0\1\137\6\0\1\64\15\0\2\102"+ "\2\0\11\21\1\23\12\21\1\0\1\35\7\2\1\64"+ "\10\2\1\64\6\2\24\0\1\102\1\140\12\21\1\0"+ "\1\35\5\2\1\141\12\2\14\0\1\142\3\21\1\0"+ "\10\2\10\0\1\21\1\0\3\2\2\0\1\143\4\0"+ "\1\21\1\144\1\2\1\145\1\146\6\0\1\147"; private static int [] zzUnpackAction() { int [] result = new int[805]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\130\0\260\0\u0108\0\u0160\0\u01b8\0\u0210\0\u0268"+ "\0\u02c0\0\u0318\0\u0370\0\u03c8\0\u0420\0\u0478\0\u04d0\0\u0528"+ "\0\u0580\0\u05d8\0\u0630\0\u0688\0\u06e0\0\u0738\0\u0790\0\u07e8"+ "\0\u0840\0\u0898\0\u08f0\0\u0948\0\u09a0\0\u09f8\0\u0a50\0\u0aa8"+ "\0\u0948\0\u0b00\0\u0b58\0\u0bb0\0\u0c08\0\u0c60\0\u0948\0\u0cb8"+ "\0\u0d10\0\u0948\0\u0948\0\u0d68\0\u0dc0\0\u0948\0\u0e18\0\u0948"+ "\0\u0948\0\u0948\0\u0e70\0\u0948\0\u0ec8\0\u0f20\0\u0f78\0\u0fd0"+ "\0\u1028\0\u1080\0\u10d8\0\u1130\0\u1188\0\u11e0\0\u1238\0\u1290"+ "\0\u12e8\0\u1340\0\u1398\0\u13f0\0\u1448\0\u14a0\0\u14f8\0\u0e70"+ "\0\u1550\0\u0948\0\u15a8\0\u0948\0\u1600\0\u0948\0\u0948\0\u0948"+ "\0\u0948\0\u0948\0\u0948\0\u0948\0\u1658\0\u0948\0\u16b0\0\u1708"+ "\0\u0948\0\u0948\0\u1760\0\u17b8\0\u1810\0\u1868\0\u18c0\0\u1918"+ "\0\u1970\0\u19c8\0\u0948\0\u1a20\0\u1a78\0\u1ad0\0\u0948\0\u1b28"+ "\0\u1b80\0\u1bd8\0\u1c30\0\u1c88\0\u1ce0\0\u1d38\0\u1d90\0\u1de8"+ "\0\u1e40\0\u1e98\0\u1ef0\0\u1f48\0\u1fa0\0\u1ff8\0\u2050\0\u0948"+ "\0\u20a8\0\u2100\0\u2158\0\u0948\0\u0948\0\u21b0\0\u2208\0\u0948"+ "\0\u21b0\0\u0948\0\u2260\0\u0948\0\u22b8\0\u2310\0\u2368\0\u23c0"+ "\0\u2418\0\u2470\0\u0948\0\u24c8\0\u2520\0\u2578\0\u25d0\0\u0948"+ "\0\u0948\0\u2628\0\u0948\0\u2680\0\u26d8\0\u2730\0\u2788\0\u27e0"+ "\0\u0948\0\u0948\0\u0948\0\u0948\0\u2628\0\u2680\0\u2838\0\u2890"+ "\0\u0948\0\u0948\0\u0948\0\u0948\0\u2628\0\u0948\0\u28e8\0\u2940"+ "\0\u2998\0\u29f0\0\u2a48\0\u2aa0\0\u0948\0\u0948\0\u0948\0\u0948"+ "\0\u2af8\0\u0948\0\u0948\0\u2b50\0\u0948\0\u2ba8\0\u2c00\0\u2c58"+ "\0\u2cb0\0\u2d08\0\u0948\0\u0948\0\u2d60\0\u2db8\0\u2e10\0\u2e68"+ "\0\u2ec0\0\u0948\0\u2f18\0\u2f70\0\u2fc8\0\u3020\0\u3078\0\u30d0"+ "\0\u3128\0\u3180\0\u31d8\0\u3230\0\u3288\0\u32e0\0\u3338\0\u3390"+ "\0\u33e8\0\u3440\0\u3498\0\u34f0\0\u3548\0\u35a0\0\u35f8\0\u3650"+ "\0\u36a8\0\u3700\0\u3758\0\u37b0\0\u3808\0\u3860\0\u38b8\0\u3910"+ "\0\u3968\0\u39c0\0\u3a18\0\u3a70\0\u3ac8\0\u3b20\0\u3b78\0\u3bd0"+ "\0\u3c28\0\u3c80\0\u3cd8\0\u3d30\0\u3d88\0\u3de0\0\u3e38\0\u3e90"+ "\0\u3ee8\0\u3f40\0\u3f98\0\u3ff0\0\u4048\0\u40a0\0\u40f8\0\u4150"+ "\0\u41a8\0\u4200\0\u4258\0\u42b0\0\u4308\0\u4360\0\u43b8\0\u4410"+ "\0\u4468\0\u44c0\0\u4518\0\u4570\0\u45c8\0\u0948\0\u1a20\0\u4620"+ "\0\u4678\0\u0948\0\u46d0\0\u4728\0\u4678\0\u4780\0\u47d8\0\u4830"+ "\0\u4888\0\u4888\0\u48e0\0\u4888\0\u4938\0\u4990\0\u49e8\0\u4a40"+ "\0\u4a98\0\u4af0\0\u4b48\0\u17b8\0\u4ba0\0\u4bf8\0\u4c50\0\u4ca8"+ "\0\u4d00\0\u4d58\0\u4db0\0\u4e08\0\u4e60\0\u4eb8\0\u4f10\0\u4f68"+ "\0\u4fc0\0\u5018\0\u5070\0\u50c8\0\u5120\0\u5178\0\u51d0\0\u5228"+ "\0\u5280\0\u52d8\0\u5330\0\u5388\0\u53e0\0\u5438\0\u5490\0\u54e8"+ "\0\u5540\0\u5598\0\u55f0\0\u5648\0\u56a0\0\u56f8\0\u5750\0\u57a8"+ "\0\u5800\0\u5858\0\u58b0\0\u5908\0\u5960\0\u59b8\0\u5a10\0\u5a68"+ "\0\u0948\0\u5ac0\0\u5b18\0\u5b70\0\u0948\0\u5bc8\0\u5c20\0\u5c78"+ "\0\u5cd0\0\u5d28\0\u5d80\0\u5dd8\0\u5e30\0\u5e88\0\u5ee0\0\u0948"+ "\0\u5f38\0\u5f90\0\u5fe8\0\u6040\0\u6098\0\u60f0\0\u6148\0\u61a0"+ "\0\u61f8\0\u6250\0\u62a8\0\u6300\0\u6358\0\u63b0\0\u6408\0\u0948"+ "\0\u6460\0\u64b8\0\u6510\0\u6568\0\u65c0\0\u2a48\0\u6618\0\u0948"+ "\0\u0948\0\u2c00\0\u6670\0\u66c8\0\u6720\0\u0948\0\u6778\0\u67d0"+ "\0\u6828\0\u6880\0\u68d8\0\u6930\0\u6988\0\u69e0\0\u6a38\0\u6a90"+ "\0\u6ae8\0\u6b40\0\u6b98\0\u6bf0\0\u6c48\0\u6ca0\0\u6cf8\0\u6d50"+ "\0\u6da8\0\u6e00\0\u6e58\0\u6eb0\0\u6f08\0\u6f60\0\u6fb8\0\u7010"+ "\0\u7068\0\u70c0\0\u7118\0\u7170\0\u71c8\0\u7220\0\u7278\0\u72d0"+ "\0\u3860\0\u7328\0\u7380\0\u73d8\0\u7430\0\u7488\0\u74e0\0\u7538"+ "\0\u7590\0\u75e8\0\u7640\0\u7698\0\u76f0\0\u7748\0\u77a0\0\u77f8"+ "\0\u11e0\0\u7850\0\u78a8\0\u7900\0\u7958\0\u79b0\0\u7a08\0\u7a60"+ "\0\u7ab8\0\u7b10\0\u7b68\0\u7bc0\0\u7c18\0\u7c70\0\u7cc8\0\u7d20"+ "\0\u7d78\0\u7dd0\0\u7e28\0\u7e80\0\u7ed8\0\u7f30\0\u7f88\0\u7fe0"+ "\0\u8038\0\u4888\0\u8090\0\u80e8\0\u8140\0\u8198\0\u81f0\0\u8248"+ "\0\u82a0\0\u82f8\0\u8350\0\u83a8\0\u8400\0\u8458\0\u84b0\0\u8508"+ "\0\u8560\0\u85b8\0\u8610\0\u8668\0\u86c0\0\u8718\0\u8770\0\u87c8"+ "\0\u17b8\0\u8820\0\u8878\0\u88d0\0\u8928\0\u8980\0\u89d8\0\u8a30"+ "\0\u8a88\0\u8ae0\0\u8b38\0\u8b90\0\u8be8\0\u8c40\0\u8c98\0\u8cf0"+ "\0\u8d48\0\u8da0\0\u8df8\0\u8e50\0\u8ea8\0\u8f00\0\u8f58\0\u8fb0"+ "\0\u9008\0\u9060\0\u90b8\0\u9110\0\u9168\0\u91c0\0\u9218\0\u9270"+ "\0\u92c8\0\u9320\0\u9378\0\u93d0\0\u9428\0\u9480\0\u94d8\0\u9530"+ "\0\u9588\0\u95e0\0\u9638\0\u9690\0\u96e8\0\u9740\0\u9798\0\u97f0"+ "\0\u9848\0\u98a0\0\u98f8\0\u9950\0\u99a8\0\u9a00\0\u9a58\0\u9ab0"+ "\0\u9b08\0\u9b60\0\u9bb8\0\u9c10\0\u9c68\0\u9cc0\0\u9d18\0\u9d70"+ "\0\u9dc8\0\u9e20\0\u9e78\0\u9ed0\0\u0948\0\u9f28\0\u9f80\0\u9fd8"+ "\0\ua030\0\ua088\0\ua0e0\0\ua138\0\ua190\0\ua1e8\0\ua240\0\ua298"+ "\0\ua2f0\0\ua348\0\ua3a0\0\ua3f8\0\ua450\0\ua4a8\0\ua500\0\ua558"+ "\0\ua5b0\0\ua608\0\ua660\0\ua6b8\0\ua710\0\ua768\0\u3968\0\ua7c0"+ "\0\u71c8\0\ua818\0\ua870\0\ua8c8\0\ua920\0\ua978\0\ua9d0\0\uaa28"+ "\0\uaa80\0\uaad8\0\uab30\0\uab88\0\u0948\0\uabe0\0\uac38\0\uac90"+ "\0\uace8\0\uad40\0\uad98\0\uadf0\0\uae48\0\uaea0\0\u17b8\0\uaef8"+ "\0\uaf50\0\uafa8\0\ub000\0\ub058\0\ub0b0\0\u17b8\0\ub108\0\ub160"+ "\0\ub1b8\0\ub210\0\ub268\0\ub2c0\0\ub318\0\ub370\0\ub3c8\0\ub420"+ "\0\ub478\0\ub4d0\0\ub528\0\ub580\0\u17b8\0\ub5d8\0\u17b8\0\ub630"+ "\0\ub688\0\ub6e0\0\ub738\0\u5b18\0\u0948\0\ub790\0\ub7e8\0\ub840"+ "\0\ub898\0\ub8f0\0\ub948\0\ub9a0\0\ub9f8\0\uba50\0\ubaa8\0\ubb00"+ "\0\ubb58\0\ubbb0\0\ubc08\0\u0948\0\ubc60\0\ubcb8\0\ubd10\0\ubd68"+ "\0\ubdc0\0\ube18\0\ube70\0\ubec8\0\ubf20\0\ubf78\0\ubfd0\0\uc028"+ "\0\uc080\0\uc0d8\0\uc130\0\uc188\0\u9fd8\0\uc1e0\0\uc238\0\uc290"+ "\0\uc2e8\0\uc340\0\uc398\0\uc3f0\0\uc448\0\uc4a0\0\uc4f8\0\uc4f8"+ "\0\uc550\0\uc5a8\0\uc600\0\uc658\0\uc6b0\0\uc708\0\uc760\0\uc7b8"+ "\0\uc810\0\uc868\0\uc8c0\0\uc918\0\uc970\0\uc9c8\0\uca20\0\uca78"+ "\0\ucad0\0\ucb28\0\u8458\0\ucb80\0\ucbd8\0\ucc30\0\ucc88\0\ucce0"+ "\0\ucd38\0\ucd90\0\ucde8\0\uce40\0\uce98\0\ucef0\0\ucf48\0\ucfa0"+ "\0\ucff8\0\ud050\0\ud0a8\0\ud100\0\ub898\0\ud158\0\ud1b0\0\ub9f8"+ "\0\ud208\0\ud260\0\ud2b8\0\ud310\0\ud368\0\ud3c0\0\ud418\0\ud470"+ "\0\ud4c8\0\ud520\0\ud578\0\ud5d0\0\ud628\0\ud680\0\ud6d8\0\u2cb0"+ "\0\ud730\0\ud788\0\ud7e0\0\ud838\0\ud890\0\ud8e8\0\ud940\0\ud998"+ "\0\ud9f0\0\uda48\0\udaa0\0\udaf8\0\udb50\0\udba8\0\udc00\0\udc58"+ "\0\udcb0\0\u17b8\0\udd08\0\udd60\0\uddb8\0\ude10\0\ude68\0\udec0"+ "\0\udf18\0\udf70\0\udfc8\0\ue020\0\ue078\0\ue0d0\0\ue128\0\ue180"+ "\0\ue1d8\0\ue230\0\ue288\0\ue2e0\0\ue338\0\ue390\0\ue3e8\0\ue440"+ "\0\u2cb0\0\ue498\0\ue4f0\0\ue548\0\ue5a0\0\ue5f8\0\ue650\0\ue6a8"+ "\0\ue700\0\ue758\0\ue7b0\0\ue808\0\ue860\0\ue8b8\0\ue910\0\ue968"+ "\0\ue9c0\0\uea18\0\uea70\0\ueac8\0\ueb20\0\ueb78\0\uebd0\0\uec28"+ "\0\uec80\0\uecd8\0\ued30\0\ued88\0\u0948\0\uede0\0\uee38\0\uee90"+ "\0\ueee8\0\uef40\0\u0948\0\uef98\0\u0948\0\u0948\0\ueff0\0\uf048"+ "\0\uf0a0\0\uf0f8\0\uf150\0\uf1a8\0\u0948"; private static int [] zzUnpackRowMap() { int [] result = new int[805]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\32\1\33\1\34\1\35\1\36\1\37\122\32\2\40"+ "\1\41\26\40\1\42\32\40\1\43\5\40\1\44\15\40"+ "\1\45\17\40\2\46\1\47\47\46\1\50\55\46\2\51"+ "\1\52\14\51\1\53\110\51\1\54\1\55\1\0\1\54"+ "\1\36\2\54\1\56\1\57\6\54\1\60\26\54\1\61"+ "\40\54\1\62\20\54\2\63\1\0\1\63\1\64\2\63"+ "\2\64\1\65\1\66\1\67\1\70\1\71\1\72\1\64"+ "\1\63\1\73\1\74\3\63\1\75\3\63\1\76\6\63"+ "\1\77\4\63\1\64\7\63\1\70\1\63\1\67\1\100"+ "\1\72\1\101\1\102\1\66\1\73\1\103\1\104\1\65"+ "\1\77\1\63\1\71\1\74\1\105\1\106\1\107\1\75"+ "\5\63\1\64\1\63\1\104\1\100\1\101\1\105\1\103"+ "\1\76\1\63\1\106\1\110\1\107\1\102\4\63\7\111"+ "\1\112\120\111\107\113\1\112\20\113\1\54\1\55\1\0"+ "\1\54\1\36\2\54\1\114\1\115\6\54\1\116\26\54"+ "\1\61\40\54\1\117\20\54\7\111\1\120\120\111\107\113"+ "\1\120\20\113\1\54\1\55\1\0\1\54\1\36\2\54"+ "\1\121\1\115\6\54\1\122\26\54\1\61\40\54\1\123"+ "\20\54\7\111\1\124\120\111\107\113\1\124\20\113\1\125"+ "\1\36\1\126\1\127\1\36\1\130\1\131\1\132\1\133"+ "\3\134\1\135\2\134\1\136\4\134\1\137\1\140\1\134"+ "\1\137\1\134\1\141\1\142\1\143\2\125\1\134\1\144"+ "\2\134\1\145\1\146\1\147\1\131\4\144\3\61\1\150"+ "\1\151\1\152\1\153\1\134\1\154\1\155\1\134\1\156"+ "\1\157\1\160\1\161\1\162\1\163\1\134\1\164\1\165"+ "\2\134\1\166\1\167\1\125\2\147\1\134\1\147\1\170"+ "\1\171\2\134\1\172\10\134\1\137\2\134\1\147\2\173"+ "\1\174\4\173\1\175\25\173\1\176\72\173\2\177\1\200"+ "\32\177\1\201\51\177\1\202\20\177\2\203\1\204\1\205"+ "\33\203\1\206\24\203\1\207\5\203\1\210\15\203\1\211"+ "\17\203\2\212\1\213\1\214\60\212\1\215\5\212\1\216"+ "\15\212\1\217\17\212\1\220\1\36\1\221\1\222\1\36"+ "\1\220\1\147\1\223\1\224\6\225\1\61\4\225\2\220"+ "\1\225\1\220\3\225\1\220\1\226\1\220\1\61\3\225"+ "\1\61\1\225\1\220\1\131\2\61\3\220\1\227\2\61"+ "\24\225\1\230\2\147\1\225\1\147\1\231\14\225\1\220"+ "\2\225\1\232\1\233\1\36\1\234\1\235\1\36\3\233"+ "\1\236\6\237\1\233\4\237\2\233\1\237\1\233\3\237"+ "\4\233\1\240\2\237\2\233\1\241\6\233\1\242\2\233"+ "\24\237\3\233\1\237\2\233\14\237\1\233\2\237\1\233"+ "\1\243\1\36\1\244\1\245\1\36\1\243\1\246\1\223"+ "\1\247\6\250\1\243\4\250\2\251\1\250\1\251\1\250"+ "\1\252\1\250\1\243\1\253\1\250\2\243\2\250\1\243"+ "\1\131\1\241\1\131\3\243\1\254\4\243\24\250\1\243"+ "\1\255\1\256\1\250\1\243\1\231\14\250\1\251\2\250"+ "\1\243\2\173\1\257\4\173\1\260\25\173\1\261\72\173"+ "\2\177\1\262\32\177\1\261\51\177\1\263\20\177\2\264"+ "\1\265\34\264\1\266\24\264\1\207\5\264\1\210\15\264"+ "\1\211\17\264\2\32\4\0\123\32\1\33\2\0\1\36"+ "\1\0\122\32\140\0\1\267\1\270\5\271\1\0\10\271"+ "\2\0\1\271\5\0\2\271\7\0\1\272\1\273\3\0"+ "\13\271\1\270\10\271\3\0\1\271\2\0\17\271\2\0"+ "\1\36\2\0\1\36\123\0\4\37\1\0\1\37\1\274"+ "\121\37\2\40\1\0\26\40\1\0\32\40\1\0\5\40"+ "\1\0\15\40\1\0\17\40\31\0\1\275\160\0\1\276"+ "\123\0\1\277\3\0\1\300\155\0\1\301\17\0\2\46"+ "\1\0\47\46\1\0\55\46\17\0\1\302\110\0\2\51"+ "\1\0\14\51\1\0\110\51\2\54\1\0\1\54\1\0"+ "\2\54\2\0\6\54\1\0\26\54\1\0\40\54\1\0"+ "\21\54\1\55\1\0\1\54\1\36\2\54\2\0\6\54"+ "\1\0\26\54\1\0\40\54\1\0\20\54\17\0\1\60"+ "\110\0\2\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\26\63\1\0\40\63\1\0\22\63\1\0\1\63"+ "\1\0\2\63\2\0\1\63\1\303\2\63\1\304\1\305"+ "\1\0\2\63\1\306\7\63\1\307\13\63\1\0\12\63"+ "\1\310\1\305\2\63\1\303\2\63\1\311\3\63\1\304"+ "\1\306\1\312\10\63\1\0\1\63\1\311\1\310\1\63"+ "\1\312\1\63\1\307\13\63\1\0\1\63\1\0\2\63"+ "\2\0\3\63\1\313\2\63\1\0\2\63\1\314\23\63"+ "\1\0\7\63\1\313\2\63\1\315\6\63\1\316\4\63"+ "\1\314\11\63\1\0\1\63\1\316\1\315\17\63\1\0"+ "\1\63\1\0\2\63\2\0\6\63\1\0\12\63\1\317"+ "\13\63\1\0\40\63\1\0\6\63\1\317\13\63\1\0"+ "\1\63\1\0\2\63\2\0\1\320\5\63\1\0\1\63"+ "\1\321\17\63\1\322\4\63\1\0\14\63\1\323\2\63"+ "\1\321\2\63\1\320\1\322\3\63\1\324\10\63\1\0"+ "\3\63\1\323\1\324\15\63\1\0\1\63\1\0\2\63"+ "\2\0\2\63\1\325\3\63\1\0\1\63\1\326\24\63"+ "\1\0\11\63\1\325\5\63\1\326\1\63\1\327\16\63"+ "\1\0\1\63\1\327\20\63\1\0\1\63\1\0\2\63"+ "\2\0\2\63\1\110\1\330\1\63\1\110\1\0\2\63"+ "\1\331\3\63\1\332\12\63\1\333\4\63\1\0\7\63"+ "\1\330\1\63\1\110\1\63\1\110\1\63\1\334\2\63"+ "\1\110\1\335\1\63\1\333\2\63\1\331\3\63\1\332"+ "\5\63\1\0\1\63\1\335\3\63\1\110\5\63\1\334"+ "\6\63\1\0\1\63\1\0\2\63\2\0\3\63\1\336"+ "\2\63\1\0\2\63\1\337\23\63\1\0\7\63\1\336"+ "\11\63\1\340\4\63\1\337\11\63\1\0\1\63\1\340"+ "\20\63\1\0\1\63\1\0\2\63\2\0\6\63\1\0"+ "\26\63\1\0\27\63\1\341\1\63\1\342\6\63\1\0"+ "\4\63\1\341\5\63\1\342\7\63\1\0\1\63\1\0"+ "\2\63\2\0\2\63\1\110\1\324\2\63\1\0\1\63"+ "\1\343\10\63\1\344\13\63\1\0\7\63\1\324\1\345"+ "\1\110\1\346\4\63\1\343\1\347\1\350\16\63\1\0"+ "\1\63\1\350\1\346\2\63\1\347\1\344\1\345\12\63"+ "\1\0\1\63\1\0\2\63\2\0\6\63\1\0\1\63"+ "\1\110\24\63\1\0\17\63\1\110\20\63\1\0\22\63"+ "\1\0\1\63\1\0\2\63\2\0\2\63\1\351\1\352"+ "\2\63\1\0\26\63\1\0\7\63\1\352\1\63\1\351"+ "\1\353\25\63\1\0\2\63\1\353\17\63\1\0\1\63"+ "\1\0\2\63\2\0\4\63\1\354\1\63\1\0\1\63"+ "\1\110\4\63\1\355\3\63\1\356\13\63\1\0\17\63"+ "\1\110\5\63\1\354\4\63\1\355\5\63\1\0\6\63"+ "\1\356\13\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\2\63\1\357\23\63\1\0\12\63\1\360\6\63"+ "\1\361\4\63\1\357\11\63\1\0\1\63\1\361\1\360"+ "\17\63\1\0\1\63\1\0\2\63\2\0\2\63\1\110"+ "\2\63\1\362\1\0\2\63\1\363\23\63\1\0\11\63"+ "\1\110\1\63\1\362\12\63\1\363\11\63\1\0\14\63"+ "\1\110\5\63\1\0\1\63\1\0\2\63\2\0\3\63"+ "\1\364\1\63\1\110\1\0\1\63\1\110\1\365\16\63"+ "\1\366\4\63\1\0\7\63\1\364\3\63\1\110\3\63"+ "\2\110\1\367\1\63\1\366\2\63\1\365\11\63\1\0"+ "\1\63\1\367\3\63\1\110\14\63\1\0\1\63\1\0"+ "\2\63\2\0\1\370\1\371\1\372\1\63\1\373\1\63"+ "\1\0\6\63\1\374\3\63\1\375\13\63\1\0\11\63"+ "\1\372\4\63\1\371\1\63\1\376\1\63\1\370\2\63"+ "\1\373\4\63\1\374\5\63\1\0\5\63\1\376\1\375"+ "\13\63\1\0\1\63\1\0\2\63\2\0\6\63\1\0"+ "\2\63\1\377\7\63\1\u0100\13\63\1\0\21\63\1\u0101"+ "\4\63\1\377\11\63\1\0\1\63\1\u0101\4\63\1\u0100"+ "\13\63\1\0\1\63\1\0\2\63\2\0\6\63\1\0"+ "\2\63\1\u0102\3\63\1\u0103\17\63\1\0\26\63\1\u0102"+ "\3\63\1\u0103\5\63\1\0\22\63\1\0\1\63\1\0"+ "\2\63\2\0\3\63\1\u0104\2\63\1\0\26\63\1\0"+ "\7\63\1\u0104\11\63\1\u0105\16\63\1\0\1\63\1\u0105"+ "\16\63\7\111\1\0\120\111\107\113\1\0\20\113\17\0"+ "\1\u0106\110\0\1\125\10\0\6\125\1\0\11\125\1\0"+ "\1\125\1\0\3\125\1\0\2\125\14\0\25\125\2\0"+ "\1\125\2\0\17\125\4\0\1\u0107\4\0\1\u0108\35\0"+ "\1\61\66\0\1\61\40\0\1\61\61\0\10\u0109\1\u010a"+ "\24\u0109\1\u010b\1\u0109\1\u010c\6\u0109\1\u010d\61\u0109\1\125"+ "\10\0\6\134\1\0\11\134\1\0\1\134\1\0\1\125"+ "\1\u010e\1\134\1\0\2\134\14\0\24\134\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\5\134\1\u010f\16\134\1\125\2\0\1\134"+ "\2\0\17\134\20\0\1\u0110\26\0\1\61\61\0\1\u0111"+ "\10\0\6\u0111\1\0\1\u0111\1\u0112\1\u0113\1\u0111\2\137"+ "\1\u0111\1\137\1\u0111\1\0\1\u0111\1\0\3\u0111\1\0"+ "\1\u0111\1\u0114\1\0\1\u0115\12\0\10\u0111\1\u0112\1\u0114"+ "\2\u0111\1\u0114\2\u0111\1\u0113\5\u0111\2\0\1\u0111\2\0"+ "\5\u0111\1\u0114\6\u0111\1\137\2\u0111\1\0\1\u0111\10\0"+ "\6\u0111\1\0\1\u0111\1\u0112\1\u0113\1\u0111\1\u0116\1\u0117"+ "\1\u0111\1\u0117\1\u0111\1\0\1\u0111\1\0\3\u0111\1\0"+ "\1\u0118\1\u0114\1\0\1\u0115\12\0\10\u0111\1\u0112\1\u0114"+ "\2\u0111\1\u0114\2\u0111\1\u0113\5\u0111\2\0\1\u0118\2\0"+ "\5\u0111\1\u0114\6\u0111\1\u0117\2\u0111\32\0\1\61\14\0"+ "\1\61\61\0\1\125\10\0\6\134\1\0\11\134\1\0"+ "\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0"+ "\5\134\1\u0119\16\134\1\125\2\0\1\134\2\0\17\134"+ "\47\0\1\61\123\0\1\61\3\0\1\61\105\0\2\u0115"+ "\1\0\1\u0115\74\0\1\u0115\51\0\1\61\6\0\1\61"+ "\52\0\1\125\10\0\6\134\1\0\11\134\1\0\1\134"+ "\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0\5\134"+ "\1\u011a\5\134\1\u011b\1\u011c\3\134\1\u011d\3\134\1\125"+ "\2\0\1\134\2\0\17\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\3\134\1\u011e\20\134\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\17\134\1\u011f\4\134\1\125\2\0\1\134"+ "\2\0\17\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\2\134\1\u0120\3\134\1\u0121\6\134\1\u0122\6\134"+ "\1\125\2\0\1\134\2\0\17\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\u0123\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\12\134\1\u0124\4\134\1\u0125"+ "\4\134\1\125\2\0\1\134\2\0\17\134\1\0\1\125"+ "\10\0\6\134\1\0\11\134\1\0\1\134\1\0\1\125"+ "\1\u010e\1\134\1\0\2\134\14\0\3\134\1\u0126\2\134"+ "\1\u0127\1\134\1\u0128\1\134\1\u0129\11\134\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\3\134\1\u012a\13\134\1\u012b\4\134\1\125"+ "\2\0\1\134\2\0\17\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\3\134\1\u012c\13\134\1\u012d\4\134"+ "\1\125\2\0\1\134\2\0\17\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\23\134\1\u012e\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\u012f\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\4\134\1\u0130\1\134\1\u0131\6\134\1\u0132"+ "\6\134\1\125\2\0\1\134\2\0\1\u0133\16\134\1\0"+ "\1\125\10\0\6\134\1\0\11\134\1\0\1\u0134\1\0"+ "\1\125\1\u010e\1\134\1\0\2\134\14\0\1\u0135\2\134"+ "\1\u0136\4\134\1\u0137\1\134\1\u0138\11\134\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\u0139\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\2\134\1\u013a\7\134\1\u013b\11\134\1\125"+ "\2\0\1\134\2\0\17\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\5\134\1\u013c\2\134\1\u013d\1\134"+ "\1\u013e\1\u013f\6\134\1\u0140\1\134\1\125\2\0\1\u0141"+ "\2\0\17\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\3\134\1\u0142\6\134\1\u0136\11\134\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\2\134\1\u0143\1\u0144\11\134\1\u0145\6\134"+ "\1\125\2\0\1\134\2\0\17\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\1\u0146\5\134\1\u0147\15\134"+ "\1\125\2\0\1\134\2\0\17\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\12\134\1\u0148\11\134\1\125"+ "\2\0\1\134\2\0\17\134\1\0\2\173\1\0\4\173"+ "\1\0\25\173\1\0\72\173\2\u0149\1\0\27\u0149\1\u014a"+ "\52\u0149\1\u014b\22\u0149\2\177\1\0\32\177\1\0\51\177"+ "\1\0\20\177\2\203\2\0\33\203\1\0\24\203\1\0"+ "\5\203\1\0\15\203\1\0\17\203\10\0\1\u014c\127\0"+ "\1\u014d\201\0\1\u014e\123\0\1\u014f\3\0\1\u0150\155\0"+ "\1\u0151\17\0\2\212\2\0\60\212\1\0\5\212\1\0"+ "\15\212\1\0\17\212\10\0\1\u0152\201\0\1\u0153\123\0"+ "\1\u0154\3\0\1\u0155\155\0\1\u0156\27\0\1\u0157\156\0"+ "\1\u0158\101\0\6\225\1\0\13\225\5\0\2\225\1\0"+ "\1\225\12\0\24\225\3\0\1\225\2\0\17\225\12\0"+ "\6\u0159\1\0\4\u0159\2\0\1\u0159\1\0\3\u0159\4\0"+ "\3\u0159\1\0\1\u0159\12\0\24\u0159\3\0\1\u0159\2\0"+ "\14\u0159\1\0\2\u0159\54\0\1\u015a\4\0\1\u015b\1\u015c"+ "\1\u015d\1\u015e\1\u015f\1\u0160\1\u0161\1\u0162\1\u0163\1\0"+ "\1\u0164\2\0\1\u0165\2\0\1\u0166\40\0\6\u0167\1\0"+ "\4\u0167\2\0\1\u0167\1\0\3\u0167\4\0\3\u0167\1\0"+ "\1\u0167\12\0\24\u0167\3\0\1\u0167\2\0\14\u0167\1\0"+ "\2\u0167\12\0\6\237\1\0\13\237\5\0\2\237\14\0"+ "\24\237\3\0\1\237\2\0\17\237\12\0\6\237\1\0"+ "\4\237\2\0\1\237\1\0\3\237\5\0\2\237\14\0"+ "\24\237\3\0\1\237\2\0\14\237\1\0\2\237\11\0"+ "\7\250\1\0\4\250\2\0\1\250\1\0\3\250\2\0"+ "\1\250\1\0\1\u0158\2\250\14\0\24\250\2\0\1\256"+ "\1\250\2\0\14\250\1\0\2\250\11\0\7\250\1\0"+ "\4\250\2\0\1\250\1\0\3\250\2\0\1\250\2\0"+ "\2\250\14\0\24\250\2\0\1\256\1\250\2\0\14\250"+ "\1\0\2\250\25\0\2\251\1\0\1\251\13\0\1\251"+ "\4\0\1\u0168\5\0\1\u0169\6\0\1\u016a\3\0\1\u0168"+ "\2\0\1\u016b\1\u016c\1\u016d\25\0\1\251\13\0\7\250"+ "\1\0\4\250\2\251\1\250\1\251\3\250\2\0\1\250"+ "\2\0\2\250\14\0\24\250\2\0\1\256\1\250\2\0"+ "\14\250\1\251\2\250\13\0\1\u016e\7\0\1\u016e\1\0"+ "\4\u016e\11\0\1\u016e\23\0\1\u016e\1\0\2\u016e\1\0"+ "\1\u016e\2\0\1\u016e\3\0\1\u016e\7\0\1\u016e\3\0"+ "\1\u016e\6\0\1\u016e\61\0\1\u016f\51\0\2\u0170\1\0"+ "\125\u0170\2\264\1\0\34\264\1\0\24\264\1\0\5\264"+ "\1\0\15\264\1\0\17\264\10\0\1\u0171\130\0\6\u0172"+ "\1\0\10\u0172\2\0\1\u0172\5\0\2\u0172\14\0\24\u0172"+ "\3\0\1\u0172\2\0\17\u0172\12\0\1\271\1\u0173\3\271"+ "\1\u0174\1\0\10\271\2\0\1\271\5\0\2\271\14\0"+ "\4\271\1\u0174\2\271\1\u0173\14\271\3\0\1\271\2\0"+ "\17\271\12\0\6\271\1\0\10\271\2\0\1\271\5\0"+ "\2\271\14\0\24\271\3\0\1\271\2\0\17\271\32\0"+ "\1\u0175\115\0\1\u0176\172\0\1\u0177\133\0\1\u0178\135\0"+ "\1\u0179\143\0\1\u017a\17\0\2\63\1\0\1\63\1\0"+ "\2\63\2\0\2\63\1\u017b\3\63\1\0\26\63\1\0"+ "\11\63\1\u017b\26\63\1\0\22\63\1\0\1\63\1\0"+ "\2\63\2\0\6\63\1\0\26\63\1\0\21\63\1\u017c"+ "\16\63\1\0\1\63\1\u017c\20\63\1\0\1\63\1\0"+ "\2\63\2\0\2\63\1\u017d\3\63\1\0\1\317\25\63"+ "\1\0\11\63\1\u017d\12\63\1\317\13\63\1\0\22\63"+ "\1\0\1\63\1\0\2\63\2\0\1\63\1\u017e\1\u017f"+ "\3\63\1\0\1\63\1\u0180\24\63\1\0\11\63\1\u017f"+ "\4\63\1\u017e\1\u0180\20\63\1\0\22\63\1\0\1\63"+ "\1\0\2\63\2\0\4\63\1\110\1\63\1\0\6\63"+ "\1\110\17\63\1\0\25\63\1\110\4\63\1\110\5\63"+ "\1\0\22\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\12\63\1\u0181\13\63\1\0\40\63\1\0\6\63"+ "\1\u0181\13\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\26\63\1\0\27\63\1\u0182\10\63\1\0\4\63"+ "\1\u0182\15\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\26\63\1\0\21\63\1\u0183\16\63\1\0\1\63"+ "\1\u0183\20\63\1\0\1\63\1\0\2\63\2\0\5\63"+ "\1\u0184\1\0\26\63\1\0\13\63\1\u0184\24\63\1\0"+ "\22\63\1\0\1\63\1\0\2\63\2\0\6\63\1\0"+ "\26\63\1\0\14\63\1\u0185\23\63\1\0\3\63\1\u0185"+ "\16\63\1\0\1\63\1\0\2\63\2\0\6\63\1\0"+ "\1\63\1\u0186\24\63\1\0\17\63\1\u0186\1\u0184\6\63"+ "\1\u0187\10\63\1\0\4\63\1\u0187\1\u0184\14\63\1\0"+ "\1\63\1\0\2\63\2\0\4\63\1\u017e\1\63\1\0"+ "\26\63\1\0\14\63\1\u0188\10\63\1\u017e\12\63\1\0"+ "\3\63\1\u0188\16\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\1\63\1\u0184\24\63\1\0\17\63\1\u0184"+ "\20\63\1\0\22\63\1\0\1\63\1\0\2\63\2\0"+ "\3\63\1\u0189\2\63\1\0\26\63\1\0\7\63\1\u0189"+ "\30\63\1\0\22\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\26\63\1\0\21\63\1\u018a\16\63\1\0"+ "\1\63\1\u018a\20\63\1\0\1\63\1\0\2\63\2\0"+ "\2\63\1\u018b\3\63\1\0\26\63\1\0\11\63\1\u018b"+ "\26\63\1\0\22\63\1\0\1\63\1\0\2\63\2\0"+ "\1\110\3\63\1\u018c\1\63\1\0\26\63\1\0\22\63"+ "\1\110\2\63\1\u018c\12\63\1\0\22\63\1\0\1\63"+ "\1\0\2\63\2\0\6\63\1\0\26\63\1\0\10\63"+ "\1\110\27\63\1\0\7\63\1\110\12\63\1\0\1\63"+ "\1\0\2\63\2\0\6\63\1\0\2\63\1\110\23\63"+ "\1\0\12\63\1\u018d\13\63\1\110\11\63\1\0\2\63"+ "\1\u018d\17\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\26\63\1\0\21\63\1\u018e\16\63\1\0\1\63"+ "\1\u018e\20\63\1\0\1\63\1\0\2\63\2\0\2\63"+ "\1\u018f\3\63\1\0\26\63\1\0\11\63\1\u018f\26\63"+ "\1\0\22\63\1\0\1\63\1\0\2\63\2\0\5\63"+ "\1\317\1\0\26\63\1\0\13\63\1\317\13\63\1\u0184"+ "\10\63\1\0\4\63\1\u0184\15\63\1\0\1\63\1\0"+ "\2\63\2\0\6\63\1\0\20\63\1\u0190\5\63\1\0"+ "\36\63\1\u0190\1\63\1\0\22\63\1\0\1\63\1\0"+ "\2\63\2\0\6\63\1\0\26\63\1\0\12\63\1\346"+ "\25\63\1\0\2\63\1\346\17\63\1\0\1\63\1\0"+ "\2\63\2\0\6\63\1\0\26\63\1\0\12\63\1\u0191"+ "\25\63\1\0\2\63\1\u0191\17\63\1\0\1\63\1\0"+ "\2\63\2\0\6\63\1\0\2\63\1\u0192\23\63\1\0"+ "\26\63\1\u0192\11\63\1\0\22\63\1\0\1\63\1\0"+ "\2\63\2\0\6\63\1\0\6\63\1\317\17\63\1\0"+ "\32\63\1\317\5\63\1\0\22\63\1\0\1\63\1\0"+ "\2\63\2\0\6\63\1\0\26\63\1\0\14\63\1\u0193"+ "\23\63\1\0\3\63\1\u0193\16\63\1\0\1\63\1\0"+ "\2\63\2\0\6\63\1\0\26\63\1\0\10\63\1\u0194"+ "\27\63\1\0\7\63\1\u0194\12\63\1\0\1\63\1\0"+ "\2\63\2\0\6\63\1\0\1\u0195\5\63\1\u0196\17\63"+ "\1\0\24\63\1\u0195\5\63\1\u0196\5\63\1\0\22\63"+ "\1\0\1\63\1\0\2\63\2\0\6\63\1\0\6\63"+ "\1\u0197\17\63\1\0\32\63\1\u0197\5\63\1\0\22\63"+ "\1\0\1\63\1\0\2\63\2\0\6\63\1\0\2\63"+ "\1\u0198\23\63\1\0\26\63\1\u0198\11\63\1\0\22\63"+ "\1\0\1\63\1\0\2\63\2\0\3\63\1\u0199\2\63"+ "\1\0\26\63\1\0\7\63\1\u0199\2\63\1\u019a\25\63"+ "\1\0\2\63\1\u019a\17\63\1\0\1\63\1\0\2\63"+ "\2\0\5\63\1\u019b\1\0\26\63\1\0\13\63\1\u019b"+ "\24\63\1\0\22\63\1\0\1\63\1\0\2\63\2\0"+ "\1\u019c\5\63\1\0\26\63\1\0\22\63\1\u019c\15\63"+ "\1\0\22\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\26\63\1\0\20\63\1\u019d\17\63\1\0\5\63"+ "\1\u019d\14\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\26\63\1\0\12\63\1\110\25\63\1\0\2\63"+ "\1\110\17\63\1\0\1\63\1\0\2\63\2\0\1\u019e"+ "\5\63\1\0\26\63\1\0\22\63\1\u019e\15\63\1\0"+ "\22\63\1\0\1\63\1\0\2\63\2\0\6\63\1\0"+ "\26\63\1\0\21\63\1\u019f\16\63\1\0\1\63\1\u019f"+ "\20\63\1\0\1\63\1\0\2\63\2\0\6\63\1\0"+ "\2\63\1\u01a0\23\63\1\0\10\63\1\u01a1\15\63\1\u01a0"+ "\11\63\1\0\7\63\1\u01a1\12\63\1\0\1\63\1\0"+ "\2\63\2\0\2\63\1\u01a2\3\63\1\0\26\63\1\0"+ "\11\63\1\u01a2\1\u0185\1\63\1\u01a3\23\63\1\0\2\63"+ "\1\u0185\1\u01a3\16\63\1\0\1\63\1\0\2\63\2\0"+ "\5\63\1\u01a4\1\0\26\63\1\0\13\63\1\u01a4\24\63"+ "\1\0\22\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\26\63\1\0\40\63\1\0\15\63\1\u0180\4\63"+ "\1\0\1\63\1\0\2\63\2\0\5\63\1\u01a5\1\0"+ "\26\63\1\0\13\63\1\u01a5\24\63\1\0\22\63\1\0"+ "\1\63\1\0\2\63\2\0\1\u01a3\5\63\1\0\26\63"+ "\1\0\22\63\1\u01a3\15\63\1\0\22\63\1\0\1\63"+ "\1\0\2\63\2\0\1\u01a6\5\63\1\0\1\63\1\321"+ "\1\u01a7\3\63\1\u0105\12\63\1\u01a8\4\63\1\0\17\63"+ "\1\321\2\63\1\u01a6\1\u01a8\2\63\1\u01a7\3\63\1\u0105"+ "\5\63\1\0\22\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\26\63\1\0\31\63\1\110\6\63\1\0"+ "\12\63\1\110\7\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\26\63\1\0\27\63\1\u01a9\10\63\1\0"+ "\4\63\1\u01a9\15\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\26\63\1\0\21\63\1\u01aa\16\63\1\0"+ "\1\63\1\u01aa\20\63\1\0\1\63\1\0\2\63\2\0"+ "\2\63\1\110\3\63\1\0\26\63\1\0\11\63\1\110"+ "\7\63\1\u01ab\7\63\1\110\6\63\1\0\1\63\1\u01ab"+ "\10\63\1\110\7\63\1\0\1\63\1\0\2\63\2\0"+ "\5\63\1\u01ac\1\0\1\63\1\110\24\63\1\0\13\63"+ "\1\u01ac\3\63\1\110\20\63\1\0\22\63\1\0\1\63"+ "\1\0\2\63\2\0\6\63\1\0\26\63\1\0\14\63"+ "\1\110\23\63\1\0\3\63\1\110\16\63\1\0\1\63"+ "\1\0\2\63\2\0\5\63\1\u01ad\1\0\26\63\1\0"+ "\13\63\1\u01ad\24\63\1\0\22\63\1\0\1\63\1\0"+ "\2\63\2\0\3\63\1\u01ae\2\63\1\0\26\63\1\0"+ "\7\63\1\u01ae\30\63\1\0\22\63\1\0\1\63\1\0"+ "\2\63\2\0\2\63\1\u01af\3\63\1\0\26\63\1\0"+ "\11\63\1\u01af\26\63\1\0\22\63\1\0\1\63\1\0"+ "\2\63\2\0\5\63\1\u01b0\1\0\2\63\1\u01b1\23\63"+ "\1\0\13\63\1\u01b0\12\63\1\u01b1\11\63\1\0\22\63"+ "\1\0\1\63\1\0\2\63\2\0\4\63\1\u01b2\1\63"+ "\1\0\26\63\1\0\25\63\1\u01b2\12\63\1\0\22\63"+ "\1\0\1\63\1\0\2\63\2\0\6\63\1\0\6\63"+ "\1\u0105\17\63\1\0\32\63\1\u0105\5\63\1\0\22\63"+ "\1\0\1\63\1\0\2\63\2\0\6\63\1\0\26\63"+ "\1\0\20\63\1\u01b3\17\63\1\0\5\63\1\u01b3\14\63"+ "\1\0\1\63\1\0\2\63\2\0\6\63\1\0\26\63"+ "\1\0\20\63\1\u01b4\17\63\1\0\5\63\1\u01b4\14\63"+ "\1\0\1\63\1\0\2\63\2\0\5\63\1\u01b5\1\0"+ "\26\63\1\0\13\63\1\u01b5\1\u01b6\23\63\1\0\3\63"+ "\1\u01b6\16\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\1\63\1\u01b7\24\63\1\0\17\63\1\u01b7\20\63"+ "\1\0\22\63\1\0\1\63\1\0\2\63\2\0\2\63"+ "\1\u01b8\1\63\1\110\1\63\1\0\26\63\1\0\11\63"+ "\1\u01b8\13\63\1\110\12\63\1\0\22\63\1\0\1\63"+ "\1\0\2\63\2\0\6\63\1\0\1\u01b9\25\63\1\0"+ "\24\63\1\u01b9\13\63\1\0\22\63\1\0\1\63\1\0"+ "\2\63\2\0\6\63\1\0\26\63\1\0\20\63\1\110"+ "\17\63\1\0\5\63\1\110\14\63\1\0\1\63\1\0"+ "\2\63\2\0\6\63\1\0\26\63\1\0\20\63\1\u01ba"+ "\17\63\1\0\5\63\1\u01ba\14\63\1\0\1\63\1\0"+ "\2\63\2\0\2\63\1\110\3\63\1\0\26\63\1\0"+ "\11\63\1\110\26\63\1\0\20\63\11\0\1\u01bb\57\0"+ "\1\u01bb\36\0\10\u0109\1\u01bc\24\u0109\1\u010b\74\u0109\1\0"+ "\125\u0109\37\0\1\u01bd\70\0\1\125\10\0\6\125\1\0"+ "\11\125\1\0\1\u01be\1\0\3\125\1\0\2\125\14\0"+ "\25\125\2\0\1\125\2\0\17\125\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\14\134\1\u01bf\7\134\1\125"+ "\2\0\1\134\2\0\17\134\20\0\1\144\26\0\1\61"+ "\61\0\1\u0111\10\0\6\u0111\1\0\11\u0111\1\0\1\u0111"+ "\1\0\3\u0111\1\0\2\u0111\14\0\25\u0111\2\0\1\u0111"+ "\2\0\17\u0111\1\0\1\u0111\10\0\6\u0111\1\0\4\u0111"+ "\2\u01c0\1\u0111\1\u01c0\1\u0111\1\u01c1\1\u0111\1\0\3\u0111"+ "\1\0\2\u0111\1\u01c1\13\0\25\u0111\2\0\1\u0111\2\0"+ "\14\u0111\1\u01c0\2\u0111\1\0\1\u0111\10\0\6\u0111\1\0"+ "\2\u0111\1\u0113\1\u0111\2\u0115\1\u0111\1\u0115\1\u0111\1\0"+ "\1\u0111\1\0\3\u0111\1\0\1\u0111\1\u0114\14\0\11\u0111"+ "\1\u0114\2\u0111\1\u0114\2\u0111\1\u0113\5\u0111\2\0\1\u0111"+ "\2\0\5\u0111\1\u0114\6\u0111\1\u0115\2\u0111\1\0\1\u0111"+ "\10\0\6\u0111\1\0\2\u0111\1\u0113\1\u0111\2\u0116\1\u0111"+ "\1\u0116\1\u0111\1\0\1\u0111\1\0\3\u0111\1\0\1\u0111"+ "\1\u0114\1\0\1\u0115\12\0\11\u0111\1\u0114\2\u0111\1\u0114"+ "\2\u0111\1\u0113\5\u0111\2\0\1\u0111\2\0\5\u0111\1\u0114"+ "\6\u0111\1\u0116\2\u0111\1\0\1\u0111\10\0\6\u0111\1\0"+ "\1\u0111\1\u01c2\1\u0113\1\u0111\1\u0116\1\u0117\1\u0111\1\u0117"+ "\1\u0111\1\0\1\u0111\1\0\3\u0111\1\0\1\u0111\1\u0114"+ "\1\0\1\u0115\12\0\10\u0111\1\u01c2\1\u0114\2\u0111\1\u0114"+ "\2\u0111\1\u0113\5\u0111\2\0\1\u0111\2\0\5\u0111\1\u0114"+ "\6\u0111\1\u0117\2\u0111\1\0\1\u0111\10\0\1\u0111\1\u01c3"+ "\4\u0111\1\0\2\u0111\1\u01c3\1\u0111\4\u01c3\1\u0111\1\0"+ "\1\u0111\1\0\3\u0111\1\0\1\u0111\1\u01c3\14\0\7\u0111"+ "\1\u01c3\1\u0111\2\u01c3\1\u0111\1\u01c3\2\u0111\1\u01c3\3\u0111"+ "\1\u01c3\1\u0111\2\0\1\u0111\2\0\1\u0111\1\u01c3\3\u0111"+ "\1\u01c3\6\u0111\1\u01c3\2\u0111\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\17\134\1\u01c4\4\134\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\4\134\1\u01c5\6\134\1\u01c6\10\134\1\125"+ "\2\0\1\134\2\0\17\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\1\134\1\u01c7\14\0\24\134\1\125\2\0\1\134"+ "\2\0\3\134\1\u01c8\13\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\16\134\1\u01c9\5\134\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\4\134\1\u01ca\17\134\1\125\2\0\1\134"+ "\2\0\17\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\4\134\1\u01cb\17\134\1\125\2\0\1\134\2\0"+ "\17\134\1\0\1\125\10\0\6\134\1\0\11\134\1\0"+ "\1\u01cc\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0"+ "\12\134\1\u01cd\2\134\1\u011c\6\134\1\125\2\0\1\134"+ "\2\0\17\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\1\u01ce\1\134\1\u01cf\21\134\1\125\2\0\1\134"+ "\2\0\17\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\16\134\1\u01d0\5\134\1\125\2\0\1\134\2\0"+ "\17\134\1\0\1\125\10\0\6\134\1\0\11\134\1\0"+ "\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0"+ "\10\134\1\u01d1\13\134\1\125\2\0\1\134\2\0\17\134"+ "\1\0\1\125\10\0\6\134\1\0\11\134\1\0\1\134"+ "\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0\4\134"+ "\1\u01d2\17\134\1\125\2\0\1\134\2\0\17\134\1\0"+ "\1\125\10\0\6\134\1\0\11\134\1\0\1\134\1\0"+ "\1\125\1\u010e\1\134\1\0\2\134\14\0\24\134\1\125"+ "\2\0\1\134\2\0\1\u011c\16\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\5\134\1\u01d3\16\134\1\125"+ "\2\0\1\134\2\0\17\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\12\134\1\u01d4\11\134\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\12\134\1\u01d5\11\134\1\125\2\0\1\134"+ "\2\0\17\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\4\134\1\u01d6\6\134\1\u01d7\10\134\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\5\134\1\u01d8\16\134\1\125\2\0\1\134"+ "\2\0\17\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\4\134\1\u01d9\17\134\1\125\2\0\1\134\2\0"+ "\17\134\1\0\1\125\10\0\6\134\1\0\11\134\1\0"+ "\1\u01da\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0"+ "\24\134\1\125\2\0\1\134\2\0\17\134\1\0\1\125"+ "\10\0\6\134\1\0\11\134\1\0\1\134\1\0\1\125"+ "\1\u010e\1\134\1\0\2\134\14\0\10\134\1\u01db\3\134"+ "\1\u01dc\6\134\1\u01dd\1\125\2\0\1\134\2\0\17\134"+ "\1\0\1\125\10\0\6\134\1\0\11\134\1\0\1\134"+ "\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0\13\134"+ "\1\u01de\10\134\1\125\2\0\1\134\2\0\17\134\1\0"+ "\1\125\10\0\6\134\1\0\11\134\1\0\1\134\1\0"+ "\1\125\1\u010e\1\134\1\0\2\134\14\0\16\134\1\u01df"+ "\5\134\1\125\2\0\1\134\2\0\17\134\1\0\1\125"+ "\10\0\6\134\1\0\11\134\1\0\1\134\1\0\1\125"+ "\1\u010e\1\134\1\0\2\134\14\0\12\134\1\u01e0\11\134"+ "\1\125\2\0\1\134\2\0\17\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\3\134\1\u01e1\20\134\1\125"+ "\2\0\1\134\2\0\17\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\5\134\1\u01e2\16\134\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\1\u01e3\23\134\1\125\2\0\1\134\2\0"+ "\17\134\1\0\1\125\10\0\6\134\1\0\11\134\1\0"+ "\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0"+ "\5\134\1\u01e4\16\134\1\125\2\0\1\134\2\0\17\134"+ "\1\0\1\125\10\0\6\134\1\0\11\134\1\0\1\134"+ "\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0\5\134"+ "\1\u01e5\16\134\1\125\2\0\1\134\2\0\17\134\1\0"+ "\1\125\10\0\6\134\1\0\11\134\1\0\1\134\1\0"+ "\1\125\1\u010e\1\134\1\0\2\134\14\0\2\134\1\u011c"+ "\21\134\1\125\2\0\1\134\2\0\17\134\1\0\1\125"+ "\10\0\6\134\1\0\11\134\1\0\1\134\1\0\1\125"+ "\1\u010e\1\134\1\0\2\134\14\0\3\134\1\u01e6\20\134"+ "\1\125\2\0\1\134\2\0\17\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\10\134\1\u01e7\13\134\1\125"+ "\2\0\1\134\2\0\17\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\23\134\1\u01e8\1\125\2\0\1\134"+ "\2\0\17\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\1\u01e9\2\134\1\u01ea\20\134\1\125\2\0\1\134"+ "\2\0\17\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\2\134\1\u01eb\4\134\1\u01ec\14\134\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\u01ed\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\24\134\1\125\2\0\1\134\2\0\17\134"+ "\1\0\1\125\10\0\6\134\1\0\11\134\1\0\1\134"+ "\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0\13\134"+ "\1\u01d7\10\134\1\125\2\0\1\134\2\0\17\134\1\0"+ "\1\125\10\0\6\134\1\0\11\134\1\0\1\134\1\0"+ "\1\125\1\u010e\1\134\1\0\2\134\14\0\7\134\1\u01ee"+ "\14\134\1\125\2\0\1\134\2\0\17\134\1\0\1\125"+ "\10\0\6\134\1\0\11\134\1\0\1\134\1\0\1\125"+ "\1\u010e\1\134\1\0\2\134\14\0\7\134\1\u01ef\14\134"+ "\1\125\2\0\1\134\2\0\17\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\12\134\1\u01f0\11\134\1\125"+ "\2\0\1\134\2\0\17\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\4\134\1\u01f1\11\134\1\u01f2\5\134"+ "\1\125\2\0\1\134\2\0\17\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\1\u01f3\7\134\1\u01f4\13\134"+ "\1\125\2\0\1\134\2\0\17\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\17\134\1\u01f5\4\134\1\125"+ "\2\0\1\134\2\0\17\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\3\134\1\u01f6\20\134\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\4\134\1\u01f7\17\134\1\125\2\0\1\134"+ "\2\0\17\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\4\134\1\u01f8\17\134\1\125\2\0\1\134\2\0"+ "\17\134\1\0\1\125\10\0\6\134\1\0\11\134\1\0"+ "\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0"+ "\1\u01f9\23\134\1\125\2\0\1\134\2\0\17\134\1\0"+ "\1\125\10\0\6\134\1\0\11\134\1\0\1\134\1\0"+ "\1\125\1\u010e\1\134\1\0\2\134\14\0\24\134\1\125"+ "\2\0\1\134\2\0\3\134\1\u011c\13\134\13\0\1\u01fa"+ "\7\0\1\u01fa\1\0\4\u01fa\11\0\1\u01fa\23\0\1\u01fa"+ "\1\0\2\u01fa\1\0\1\u01fa\2\0\1\u01fa\3\0\1\u01fa"+ "\7\0\1\u01fa\3\0\1\u01fa\6\0\1\u01fa\15\0\1\u01fb"+ "\7\0\1\u01fb\1\0\4\u01fb\11\0\1\u01fb\23\0\1\u01fb"+ "\1\0\2\u01fb\1\0\1\u01fb\2\0\1\u01fb\3\0\1\u01fb"+ "\7\0\1\u01fb\3\0\1\u01fb\6\0\1\u01fb\14\0\1\u01fc"+ "\57\0\1\u01fc\120\0\1\u01fd\133\0\1\u01fe\135\0\1\u01ff"+ "\143\0\1\u0200\30\0\1\u0201\57\0\1\u0201\120\0\1\u0202"+ "\133\0\1\u0203\135\0\1\u0204\143\0\1\u0205\30\0\1\u0206"+ "\57\0\1\u0206\47\0\6\u0159\1\0\13\u0159\5\0\2\u0159"+ "\1\0\1\u0159\12\0\24\u0159\3\0\1\u0159\2\0\17\u0159"+ "\71\0\1\u0207\1\0\1\u0208\6\0\1\u0209\107\0\1\u020a"+ "\131\0\1\u020b\134\0\1\u020c\120\0\1\u020d\1\u020e\126\0"+ "\1\u020f\132\0\1\u0210\121\0\1\u0211\11\0\1\u0212\115\0"+ "\1\u0213\136\0\1\u0214\120\0\1\u0215\2\0\1\u0216\131\0"+ "\1\u0217\12\0\1\u0218\107\0\1\u0219\62\0\6\u0167\1\0"+ "\13\u0167\5\0\2\u0167\1\0\1\u0167\12\0\24\u0167\3\0"+ "\1\u0167\2\0\17\u0167\64\0\1\u0168\142\0\1\u0168\113\0"+ "\1\u0168\2\0\1\u0168\17\0\1\u0168\120\0\1\u0168\6\0"+ "\1\u0168\113\0\1\u0168\4\0\1\u0168\127\0\1\u021a\42\0"+ "\2\271\1\u021b\3\271\1\0\10\271\2\0\1\271\5\0"+ "\2\271\14\0\2\271\1\u021b\21\271\3\0\1\271\2\0"+ "\17\271\12\0\6\271\1\0\1\u021c\7\271\2\0\1\271"+ "\5\0\2\271\14\0\15\271\1\u021c\6\271\3\0\1\271"+ "\2\0\17\271\32\0\1\u021d\172\0\1\u021e\130\0\1\u0179"+ "\105\0\1\u021f\117\0\1\u0220\64\0\2\63\1\0\1\63"+ "\1\0\2\63\2\0\3\63\1\u0221\2\63\1\0\26\63"+ "\1\0\7\63\1\u0221\30\63\1\0\22\63\1\0\1\63"+ "\1\0\2\63\2\0\1\63\1\u0195\4\63\1\0\26\63"+ "\1\0\14\63\1\110\1\63\1\u0195\21\63\1\0\3\63"+ "\1\110\16\63\1\0\1\63\1\0\2\63\2\0\3\63"+ "\1\u0222\2\63\1\0\26\63\1\0\7\63\1\u0222\2\63"+ "\1\u0223\25\63\1\0\2\63\1\u0223\17\63\1\0\1\63"+ "\1\0\2\63\2\0\5\63\1\u0224\1\0\26\63\1\0"+ "\13\63\1\u0224\24\63\1\0\22\63\1\0\1\63\1\0"+ "\2\63\2\0\6\63\1\0\26\63\1\0\31\63\1\u0195"+ "\6\63\1\0\12\63\1\u0195\7\63\1\0\1\63\1\0"+ "\2\63\2\0\6\63\1\0\2\63\1\u0225\23\63\1\0"+ "\26\63\1\u0225\11\63\1\0\22\63\1\0\1\63\1\0"+ "\2\63\2\0\2\63\1\u0226\3\63\1\0\26\63\1\0"+ "\11\63\1\u0226\26\63\1\0\22\63\1\0\1\63\1\0"+ "\2\63\2\0\4\63\1\110\1\63\1\0\26\63\1\0"+ "\25\63\1\110\12\63\1\0\22\63\1\0\1\63\1\0"+ "\2\63\2\0\6\63\1\0\1\63\1\u01a9\24\63\1\0"+ "\17\63\1\u01a9\20\63\1\0\22\63\1\0\1\63\1\0"+ "\2\63\2\0\6\63\1\0\2\63\1\110\23\63\1\0"+ "\26\63\1\110\11\63\1\0\22\63\1\0\1\63\1\0"+ "\2\63\2\0\5\63\1\u0195\1\0\26\63\1\0\13\63"+ "\1\u0195\24\63\1\0\22\63\1\0\1\63\1\0\2\63"+ "\2\0\6\63\1\0\26\63\1\0\10\63\1\u0227\27\63"+ "\1\0\7\63\1\u0227\12\63\1\0\1\63\1\0\2\63"+ "\2\0\6\63\1\0\26\63\1\0\27\63\1\u0228\10\63"+ "\1\0\4\63\1\u0228\15\63\1\0\1\63\1\0\2\63"+ "\2\0\6\63\1\0\26\63\1\0\31\63\1\u0229\6\63"+ "\1\0\12\63\1\u0229\7\63\1\0\1\63\1\0\2\63"+ "\2\0\6\63\1\0\26\63\1\0\14\63\1\u022a\23\63"+ "\1\0\3\63\1\u022a\16\63\1\0\1\63\1\0\2\63"+ "\2\0\6\63\1\0\1\u0195\25\63\1\0\24\63\1\u0195"+ "\13\63\1\0\22\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\26\63\1\0\21\63\1\u022b\16\63\1\0"+ "\1\63\1\u022b\20\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\12\63\1\u01a3\13\63\1\0\40\63\1\0"+ "\6\63\1\u01a3\13\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\26\63\1\0\10\63\1\u01b4\27\63\1\0"+ "\7\63\1\u01b4\12\63\1\0\1\63\1\0\2\63\2\0"+ "\3\63\1\u022c\2\63\1\0\26\63\1\0\7\63\1\u022c"+ "\30\63\1\0\22\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\26\63\1\0\21\63\1\u01a2\16\63\1\0"+ "\1\63\1\u01a2\20\63\1\0\1\63\1\0\2\63\2\0"+ "\5\63\1\u022d\1\0\26\63\1\0\13\63\1\u022d\24\63"+ "\1\0\22\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\26\63\1\0\12\63\1\u01a3\25\63\1\0\2\63"+ "\1\u01a3\17\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\26\63\1\0\21\63\1\u0103\16\63\1\0\1\63"+ "\1\u0103\20\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\26\63\1\0\30\63\1\110\7\63\1\0\10\63"+ "\1\110\11\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\2\63\1\u022e\23\63\1\0\26\63\1\u022e\11\63"+ "\1\0\22\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\2\63\1\u0105\23\63\1\0\26\63\1\u0105\11\63"+ "\1\0\22\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\2\63\1\u01a9\23\63\1\0\26\63\1\u01a9\11\63"+ "\1\0\22\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\2\63\1\u0103\23\63\1\0\26\63\1\u0103\11\63"+ "\1\0\22\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\26\63\1\0\14\63\1\u022f\23\63\1\0\3\63"+ "\1\u022f\16\63\1\0\1\63\1\0\2\63\2\0\1\63"+ "\1\u0230\4\63\1\0\26\63\1\0\16\63\1\u0230\21\63"+ "\1\0\22\63\1\0\1\63\1\0\2\63\2\0\5\63"+ "\1\u0231\1\0\26\63\1\0\13\63\1\u0231\24\63\1\0"+ "\22\63\1\0\1\63\1\0\2\63\2\0\6\63\1\0"+ "\26\63\1\0\12\63\1\u0232\25\63\1\0\2\63\1\u0232"+ "\17\63\1\0\1\63\1\0\2\63\2\0\6\63\1\0"+ "\1\110\25\63\1\0\24\63\1\110\13\63\1\0\22\63"+ "\1\0\1\63\1\0\2\63\2\0\6\63\1\0\2\63"+ "\1\u0233\23\63\1\0\26\63\1\u0233\11\63\1\0\22\63"+ "\1\0\1\63\1\0\2\63\2\0\6\63\1\0\26\63"+ "\1\0\27\63\1\u0234\10\63\1\0\4\63\1\u0234\15\63"+ "\1\0\1\63\1\0\2\63\2\0\6\63\1\0\1\63"+ "\1\u0235\24\63\1\0\17\63\1\u0235\20\63\1\0\22\63"+ "\1\0\1\63\1\0\2\63\2\0\6\63\1\0\12\63"+ "\1\u0236\13\63\1\0\40\63\1\0\6\63\1\u0236\13\63"+ "\1\0\1\63\1\0\2\63\2\0\6\63\1\0\26\63"+ "\1\0\27\63\1\110\10\63\1\0\4\63\1\110\15\63"+ "\1\0\1\63\1\0\2\63\2\0\5\63\1\110\1\0"+ "\26\63\1\0\13\63\1\110\24\63\1\0\22\63\1\0"+ "\1\63\1\0\2\63\2\0\3\63\1\u0231\2\63\1\0"+ "\26\63\1\0\7\63\1\u0231\1\u0227\27\63\1\0\7\63"+ "\1\u0227\12\63\1\0\1\63\1\0\2\63\2\0\4\63"+ "\1\u018c\1\63\1\0\26\63\1\0\25\63\1\u018c\12\63"+ "\1\0\22\63\1\0\1\63\1\0\2\63\2\0\1\63"+ "\1\303\4\63\1\0\26\63\1\0\16\63\1\303\21\63"+ "\1\0\22\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\26\63\1\0\27\63\1\u0237\10\63\1\0\4\63"+ "\1\u0237\15\63\1\0\1\63\1\0\2\63\2\0\2\63"+ "\1\u0238\3\63\1\0\26\63\1\0\11\63\1\u0238\26\63"+ "\1\0\22\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\26\63\1\0\20\63\1\u0239\17\63\1\0\5\63"+ "\1\u0239\14\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\1\63\1\u023a\24\63\1\0\17\63\1\u023a\20\63"+ "\1\0\22\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\26\63\1\0\21\63\1\u023b\16\63\1\0\1\63"+ "\1\u023b\20\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\26\63\1\0\21\63\1\u023c\16\63\1\0\1\63"+ "\1\u023c\20\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\26\63\1\0\20\63\1\u0184\17\63\1\0\5\63"+ "\1\u0184\14\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\26\63\1\0\12\63\1\u023d\25\63\1\0\2\63"+ "\1\u023d\17\63\1\0\1\63\1\0\2\63\2\0\3\63"+ "\1\u023e\2\63\1\0\26\63\1\0\7\63\1\u023e\30\63"+ "\1\0\22\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\26\63\1\0\21\63\1\110\16\63\1\0\1\63"+ "\1\110\20\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\1\63\1\u023f\24\63\1\0\17\63\1\u023f\20\63"+ "\1\0\22\63\1\0\1\63\1\0\2\63\2\0\3\63"+ "\1\347\2\63\1\0\26\63\1\0\7\63\1\347\30\63"+ "\1\0\22\63\1\0\1\63\1\0\2\63\2\0\2\63"+ "\1\u0240\3\63\1\0\26\63\1\0\11\63\1\u0240\26\63"+ "\1\0\22\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\2\63\1\u0105\23\63\1\0\21\63\1\110\4\63"+ "\1\u0105\11\63\1\0\1\63\1\110\20\63\1\0\1\63"+ "\1\0\2\63\2\0\6\63\1\0\12\63\1\110\13\63"+ "\1\0\40\63\1\0\6\63\1\110\13\63\1\0\1\63"+ "\1\0\2\63\2\0\5\63\1\u0241\1\0\26\63\1\0"+ "\13\63\1\u0241\24\63\1\0\22\63\1\0\1\63\1\0"+ "\2\63\2\0\6\63\1\0\26\63\1\0\30\63\1\110"+ "\7\63\1\0\10\63\1\110\1\u0242\10\63\1\0\1\63"+ "\1\0\2\63\2\0\6\63\1\0\26\63\1\0\10\63"+ "\1\u0243\27\63\1\0\7\63\1\u0243\12\63\1\0\1\63"+ "\1\0\2\63\2\0\6\63\1\0\2\63\1\347\23\63"+ "\1\0\26\63\1\347\11\63\1\0\20\63\12\0\1\u0244"+ "\52\0\1\u0244\120\0\2\u01bc\16\0\1\u01bc\41\0\1\u0245"+ "\117\0\1\125\10\0\1\125\1\u0246\4\125\1\0\2\125"+ "\1\u0246\1\125\4\u0246\1\125\1\0\1\125\1\0\3\125"+ "\1\0\1\125\1\u0246\14\0\7\125\1\u0246\1\125\2\u0246"+ "\1\125\1\u0246\2\125\1\u0246\3\125\1\u0246\1\125\2\0"+ "\1\125\2\0\1\125\1\u0246\3\125\1\u0246\6\125\1\u0246"+ "\2\125\1\0\1\125\10\0\6\134\1\0\11\134\1\0"+ "\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0"+ "\1\u0247\23\134\1\125\2\0\1\134\2\0\17\134\1\0"+ "\1\u0111\10\0\6\u0111\1\0\4\u0111\2\u01c0\1\u0111\1\u01c0"+ "\1\u0111\1\0\1\u0111\1\0\3\u0111\1\0\1\u0111\1\u0114"+ "\14\0\11\u0111\1\u0114\2\u0111\1\u0114\10\u0111\2\0\1\u0111"+ "\2\0\5\u0111\1\u0114\6\u0111\1\u01c0\2\u0111\25\0\2\u01c0"+ "\1\0\1\u01c0\74\0\1\u01c0\3\0\1\u0111\10\0\1\u0111"+ "\1\u01c3\4\u0111\1\0\1\u0111\1\u01c2\1\u01c3\1\u0111\4\u01c3"+ "\1\u0111\1\0\1\u0111\1\0\3\u0111\1\0\1\u0111\1\u01c3"+ "\14\0\7\u0111\1\u01c3\1\u01c2\2\u01c3\1\u0111\1\u01c3\2\u0111"+ "\1\u01c3\3\u0111\1\u01c3\1\u0111\2\0\1\u0111\2\0\1\u0111"+ "\1\u01c3\3\u0111\1\u01c3\6\u0111\1\u01c3\2\u0111\1\0\1\125"+ "\10\0\6\134\1\0\11\134\1\0\1\134\1\0\1\125"+ "\1\u010e\1\134\1\0\2\134\14\0\13\134\1\u013f\10\134"+ "\1\125\2\0\1\134\2\0\17\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\17\134\1\u0248\4\134\1\125"+ "\2\0\1\134\2\0\17\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\4\134\1\u0249\17\134\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\1\u024a\23\134\1\125\2\0\1\134\2\0"+ "\17\134\1\0\1\125\10\0\6\134\1\0\11\134\1\0"+ "\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0"+ "\12\134\1\u024b\11\134\1\125\2\0\1\134\2\0\17\134"+ "\1\0\1\125\10\0\6\134\1\0\11\134\1\0\1\134"+ "\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0\3\134"+ "\1\u024c\4\134\1\u024d\13\134\1\125\2\0\1\134\2\0"+ "\17\134\1\0\1\125\10\0\6\134\1\0\11\134\1\0"+ "\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0"+ "\3\134\1\u011c\20\134\1\125\2\0\1\134\2\0\17\134"+ "\1\0\1\125\10\0\6\134\1\0\11\134\1\0\1\u024e"+ "\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0\24\134"+ "\1\125\2\0\1\134\2\0\17\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\17\134\1\u024f\4\134\1\125"+ "\2\0\1\134\2\0\17\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\5\134\1\u0250\16\134\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\13\134\1\u011c\10\134\1\125\2\0\1\134"+ "\2\0\17\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\3\134\1\u0251\20\134\1\125\2\0\1\134\2\0"+ "\17\134\1\0\1\125\10\0\6\134\1\0\11\134\1\0"+ "\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0"+ "\17\134\1\u0252\4\134\1\125\2\0\1\134\2\0\17\134"+ "\1\0\1\125\10\0\6\134\1\0\11\134\1\0\1\134"+ "\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0\10\134"+ "\1\u011c\13\134\1\125\2\0\1\134\2\0\17\134\1\0"+ "\1\125\10\0\6\134\1\0\11\134\1\0\1\134\1\0"+ "\1\125\1\u010e\1\134\1\0\2\134\14\0\1\u0253\23\134"+ "\1\125\2\0\1\134\2\0\17\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\4\134\1\u0254\6\134\1\u0255"+ "\10\134\1\125\2\0\1\134\2\0\17\134\1\0\1\125"+ "\10\0\6\134\1\0\11\134\1\0\1\134\1\0\1\125"+ "\1\u010e\1\134\1\0\2\134\14\0\2\134\1\u0256\21\134"+ "\1\125\2\0\1\134\2\0\17\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\13\134\1\u01ce\10\134\1\125"+ "\2\0\1\134\2\0\17\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\7\134\1\u01f8\14\134\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\17\134\1\u011c\4\134\1\125\2\0\1\134"+ "\2\0\17\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\1\134\1\u0256\22\134\1\125\2\0\1\134\2\0"+ "\17\134\1\0\1\125\10\0\6\134\1\0\11\134\1\0"+ "\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0"+ "\23\134\1\u0257\1\125\2\0\1\134\2\0\17\134\1\0"+ "\1\125\10\0\6\134\1\0\11\134\1\0\1\134\1\0"+ "\1\125\1\u010e\1\134\1\0\2\134\14\0\17\134\1\u0258"+ "\4\134\1\125\2\0\1\134\2\0\17\134\1\0\1\125"+ "\10\0\6\134\1\0\11\134\1\0\1\134\1\0\1\125"+ "\1\u010e\1\134\1\0\2\134\14\0\12\134\1\u0259\11\134"+ "\1\125\2\0\1\134\2\0\17\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\u025a\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\24\134\1\125\2\0\1\134"+ "\2\0\17\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\4\134\1\u025b\17\134\1\125\2\0\1\134\2\0"+ "\17\134\1\0\1\125\10\0\6\134\1\0\11\134\1\0"+ "\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0"+ "\17\134\1\u0136\4\134\1\125\2\0\1\134\2\0\17\134"+ "\1\0\1\125\10\0\6\134\1\0\11\134\1\0\1\134"+ "\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0\4\134"+ "\1\u025c\17\134\1\125\2\0\1\134\2\0\17\134\1\0"+ "\1\125\10\0\6\134\1\0\11\134\1\0\1\134\1\0"+ "\1\125\1\u010e\1\134\1\0\2\134\14\0\2\134\1\u025d"+ "\21\134\1\125\2\0\1\134\2\0\17\134\1\0\1\125"+ "\10\0\6\134\1\0\11\134\1\0\1\134\1\0\1\125"+ "\1\u010e\1\134\1\0\2\134\14\0\7\134\1\u025e\14\134"+ "\1\125\2\0\1\134\2\0\17\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\4\134\1\u01d6\17\134\1\125"+ "\2\0\1\134\2\0\17\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\7\134\1\u025f\14\134\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\12\134\1\u0260\11\134\1\125\2\0\1\134"+ "\2\0\17\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\12\134\1\u025d\11\134\1\125\2\0\1\134\2\0"+ "\17\134\1\0\1\125\10\0\6\134\1\0\11\134\1\0"+ "\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0"+ "\13\134\1\u01cc\10\134\1\125\2\0\1\134\2\0\17\134"+ "\1\0\1\125\10\0\6\134\1\0\11\134\1\0\1\134"+ "\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0\10\134"+ "\1\u025c\13\134\1\125\2\0\1\134\2\0\17\134\1\0"+ "\1\125\10\0\6\134\1\0\11\134\1\0\1\134\1\0"+ "\1\125\1\u010e\1\134\1\0\2\134\14\0\22\134\1\u0261"+ "\1\134\1\125\2\0\1\134\2\0\17\134\1\0\1\125"+ "\10\0\6\134\1\0\11\134\1\0\1\134\1\0\1\125"+ "\1\u010e\1\134\1\0\2\134\14\0\4\134\1\u0262\17\134"+ "\1\125\2\0\1\134\2\0\17\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\13\134\1\u0263\10\134\1\125"+ "\2\0\1\134\2\0\17\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\21\134\1\u0264\2\134\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\20\134\1\u011c\3\134\1\125\2\0\1\134"+ "\2\0\17\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\6\134\1\u0265\15\134\1\125\2\0\1\134\2\0"+ "\17\134\1\0\1\125\10\0\6\134\1\0\11\134\1\0"+ "\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0"+ "\12\134\1\u0266\11\134\1\125\2\0\1\134\2\0\17\134"+ "\1\0\1\125\10\0\6\134\1\0\11\134\1\0\1\134"+ "\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0\10\134"+ "\1\u0267\13\134\1\125\2\0\1\134\2\0\17\134\1\0"+ "\1\125\10\0\6\134\1\0\11\134\1\0\1\134\1\0"+ "\1\125\1\u010e\1\134\1\0\2\134\14\0\17\134\1\u0268"+ "\4\134\1\125\2\0\1\134\2\0\17\134\1\0\1\125"+ "\10\0\6\134\1\0\11\134\1\0\1\134\1\0\1\125"+ "\1\u010e\1\134\1\0\2\134\14\0\3\134\1\u024c\20\134"+ "\1\125\2\0\1\134\2\0\17\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\11\134\1\u011c\12\134\1\125"+ "\2\0\1\134\2\0\17\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\12\134\1\u0269\11\134\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\12\134\1\u026a\11\134\1\125\2\0\1\134"+ "\2\0\17\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\10\134\1\u026b\13\134\1\125\2\0\1\134\2\0"+ "\17\134\1\0\1\125\10\0\6\134\1\0\11\134\1\0"+ "\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0"+ "\17\134\1\u0256\4\134\1\125\2\0\1\134\2\0\17\134"+ "\1\0\1\125\10\0\6\134\1\0\11\134\1\0\1\134"+ "\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0\6\134"+ "\1\u011c\15\134\1\125\2\0\1\134\2\0\17\134\1\0"+ "\1\125\10\0\6\134\1\0\11\134\1\0\1\134\1\0"+ "\1\125\1\u010e\1\134\1\0\2\134\14\0\10\134\1\u01d7"+ "\13\134\1\125\2\0\1\134\2\0\17\134\13\0\1\u026c"+ "\7\0\1\u026c\1\0\4\u026c\11\0\1\u026c\23\0\1\u026c"+ "\1\0\2\u026c\1\0\1\u026c\2\0\1\u026c\3\0\1\u026c"+ "\7\0\1\u026c\3\0\1\u026c\6\0\1\u026c\15\0\1\u026d"+ "\7\0\1\u026d\1\0\4\u026d\11\0\1\u026d\23\0\1\u026d"+ "\1\0\2\u026d\1\0\1\u026d\2\0\1\u026d\3\0\1\u026d"+ "\7\0\1\u026d\3\0\1\u026d\6\0\1\u026d\15\0\1\u026e"+ "\52\0\1\u026e\136\0\1\u026f\130\0\1\u01ff\105\0\1\u0270"+ "\117\0\1\u0271\76\0\1\u0272\52\0\1\u0272\136\0\1\u0273"+ "\130\0\1\u0204\105\0\1\u0274\117\0\1\u0275\102\0\1\u0276"+ "\43\0\1\u0276\137\0\1\u0277\113\0\1\u0278\146\0\1\u0279"+ "\113\0\1\u020d\134\0\1\u027a\121\0\1\u027b\131\0\1\u027c"+ "\131\0\1\u027d\143\0\1\u027e\124\0\1\u027f\115\0\1\u0280"+ "\127\0\1\u0281\5\0\1\u0282\127\0\1\u0217\120\0\1\u0283"+ "\125\0\1\u0284\134\0\1\u0285\132\0\1\u0286\133\0\1\u0287"+ "\124\0\1\u0288\132\0\1\u0289\44\0\3\271\1\u028a\2\271"+ "\1\0\10\271\2\0\1\271\5\0\2\271\14\0\1\u028a"+ "\23\271\3\0\1\271\2\0\17\271\12\0\6\271\1\0"+ "\1\271\1\u028b\6\271\2\0\1\271\5\0\2\271\14\0"+ "\10\271\1\u028b\13\271\3\0\1\271\2\0\17\271\54\0"+ "\1\u021f\15\0\1\u0179\46\0\1\u028c\124\0\2\u028d\1\0"+ "\7\u0220\1\0\10\u0220\2\u028d\1\u0220\1\0\1\u028d\1\0"+ "\1\u0220\1\u028d\2\u0220\2\u028d\1\0\2\u028d\1\0\5\u028d"+ "\1\0\24\u0220\3\u028d\1\u0220\2\u028d\17\u0220\1\0\2\63"+ "\1\0\1\63\1\0\2\63\2\0\4\63\1\u01a3\1\63"+ "\1\0\26\63\1\0\25\63\1\u01a3\12\63\1\0\22\63"+ "\1\0\1\63\1\0\2\63\2\0\6\63\1\0\26\63"+ "\1\0\30\63\1\u0184\7\63\1\0\10\63\1\u0184\11\63"+ "\1\0\1\63\1\0\2\63\2\0\6\63\1\0\26\63"+ "\1\0\14\63\1\324\23\63\1\0\3\63\1\324\16\63"+ "\1\0\1\63\1\0\2\63\2\0\3\63\1\u0231\2\63"+ "\1\0\26\63\1\0\7\63\1\u0231\30\63\1\0\22\63"+ "\1\0\1\63\1\0\2\63\2\0\1\63\1\u01a3\4\63"+ "\1\0\26\63\1\0\16\63\1\u01a3\21\63\1\0\22\63"+ "\1\0\1\63\1\0\2\63\2\0\1\63\1\u0184\4\63"+ "\1\0\26\63\1\0\16\63\1\u0184\21\63\1\0\22\63"+ "\1\0\1\63\1\0\2\63\2\0\2\63\1\u028e\3\63"+ "\1\0\26\63\1\0\11\63\1\u028e\26\63\1\0\22\63"+ "\1\0\1\63\1\0\2\63\2\0\6\63\1\0\2\63"+ "\1\u028f\23\63\1\0\21\63\1\u022e\4\63\1\u028f\11\63"+ "\1\0\1\63\1\u022e\20\63\1\0\1\63\1\0\2\63"+ "\2\0\6\63\1\0\26\63\1\0\21\63\1\u0290\16\63"+ "\1\0\1\63\1\u0290\20\63\1\0\1\63\1\0\2\63"+ "\2\0\6\63\1\0\26\63\1\0\20\63\1\u0291\17\63"+ "\1\0\5\63\1\u0291\14\63\1\0\1\63\1\0\2\63"+ "\2\0\6\63\1\0\26\63\1\0\27\63\1\u0184\10\63"+ "\1\0\4\63\1\u0184\15\63\1\0\1\63\1\0\2\63"+ "\2\0\6\63\1\0\26\63\1\0\14\63\1\u0292\23\63"+ "\1\0\3\63\1\u0292\16\63\1\0\1\63\1\0\2\63"+ "\2\0\6\63\1\0\26\63\1\0\21\63\1\u0293\16\63"+ "\1\0\1\63\1\u0293\20\63\1\0\1\63\1\0\2\63"+ "\2\0\6\63\1\0\26\63\1\0\14\63\1\u0103\23\63"+ "\1\0\3\63\1\u0103\16\63\1\0\1\63\1\0\2\63"+ "\2\0\5\63\1\u0294\1\0\26\63\1\0\13\63\1\u0294"+ "\24\63\1\0\22\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\26\63\1\0\30\63\1\u0295\7\63\1\0"+ "\10\63\1\u0295\11\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\26\63\1\0\12\63\1\366\25\63\1\0"+ "\2\63\1\366\17\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\12\63\1\u022e\13\63\1\0\40\63\1\0"+ "\6\63\1\u022e\13\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\21\63\1\u0296\4\63\1\0\23\63\1\u0296"+ "\14\63\1\0\22\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\2\63\1\u0297\23\63\1\0\26\63\1\u0297"+ "\11\63\1\0\22\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\26\63\1\0\20\63\1\u0298\17\63\1\0"+ "\5\63\1\u0298\14\63\1\0\1\63\1\0\2\63\2\0"+ "\2\63\1\u0184\3\63\1\0\26\63\1\0\11\63\1\u0184"+ "\26\63\1\0\22\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\26\63\1\0\21\63\1\u0299\16\63\1\0"+ "\1\63\1\u0299\20\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\26\63\1\0\12\63\1\324\25\63\1\0"+ "\2\63\1\324\17\63\1\0\1\63\1\0\2\63\2\0"+ "\3\63\1\u029a\2\63\1\0\26\63\1\0\7\63\1\u029a"+ "\30\63\1\0\22\63\1\0\1\63\1\0\2\63\2\0"+ "\5\63\1\u029b\1\0\1\63\1\u029c\24\63\1\0\10\63"+ "\1\u029d\2\63\1\u029b\3\63\1\u029c\20\63\1\0\7\63"+ "\1\u029d\12\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\26\63\1\0\14\63\1\u029e\23\63\1\0\3\63"+ "\1\u029e\16\63\1\0\1\63\1\0\2\63\2\0\1\63"+ "\1\317\4\63\1\0\26\63\1\0\16\63\1\317\21\63"+ "\1\0\22\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\2\63\1\u01a3\23\63\1\0\26\63\1\u01a3\11\63"+ "\1\0\22\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\2\63\1\u029f\23\63\1\0\26\63\1\u029f\11\63"+ "\1\0\22\63\1\0\1\63\1\0\2\63\2\0\3\63"+ "\1\u02a0\2\63\1\0\26\63\1\0\7\63\1\u02a0\30\63"+ "\1\0\22\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\12\63\1\u02a1\13\63\1\0\40\63\1\0\6\63"+ "\1\u02a1\13\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\2\63\1\366\23\63\1\0\26\63\1\366\11\63"+ "\1\0\20\63\13\0\1\u02a2\44\0\1\u02a2\47\0\1\125"+ "\10\0\1\125\1\u02a3\4\125\1\0\2\125\1\u02a3\1\125"+ "\4\u02a3\1\125\1\0\1\125\1\0\3\125\1\0\1\125"+ "\1\u02a3\14\0\7\125\1\u02a3\1\125\2\u02a3\1\125\1\u02a3"+ "\2\125\1\u02a3\3\125\1\u02a3\1\125\2\0\1\125\2\0"+ "\1\125\1\u02a3\3\125\1\u02a3\6\125\1\u02a3\2\125\1\0"+ "\1\125\10\0\6\134\1\0\11\134\1\0\1\134\1\0"+ "\1\125\1\u010e\1\134\1\0\2\134\14\0\5\134\1\u02a4"+ "\16\134\1\125\2\0\1\134\2\0\17\134\1\0\1\125"+ "\10\0\6\134\1\0\11\134\1\0\1\134\1\0\1\125"+ "\1\u010e\1\134\1\0\2\134\14\0\2\134\1\u02a5\21\134"+ "\1\125\2\0\1\134\2\0\17\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\12\134\1\u02a6\11\134\1\125"+ "\2\0\1\134\2\0\17\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\5\134\1\u02a7\16\134\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\24\134\1\125\2\0\1\134\2\0\3\134"+ "\1\u0267\13\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\2\134\1\u0255\21\134\1\125\2\0\1\134\2\0"+ "\17\134\1\0\1\125\10\0\6\134\1\0\11\134\1\0"+ "\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0"+ "\17\134\1\u02a8\4\134\1\125\2\0\1\134\2\0\17\134"+ "\1\0\1\125\10\0\6\134\1\0\11\134\1\0\1\134"+ "\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0\2\134"+ "\1\u02a9\21\134\1\125\2\0\1\134\2\0\17\134\1\0"+ "\1\125\10\0\6\134\1\0\11\134\1\0\1\134\1\0"+ "\1\125\1\u010e\1\134\1\0\2\134\14\0\13\134\1\u02aa"+ "\10\134\1\125\2\0\1\134\2\0\17\134\1\0\1\125"+ "\10\0\6\134\1\0\11\134\1\0\1\134\1\0\1\125"+ "\1\u010e\1\134\1\0\2\134\14\0\24\134\1\125\2\0"+ "\1\134\2\0\1\u02ab\16\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\3\134\1\u02ac\20\134\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\22\134\1\u01d7\1\134\1\125\2\0\1\134"+ "\2\0\17\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\1\u02ad\23\134\1\125\2\0\1\134\2\0\17\134"+ "\1\0\1\125\10\0\6\134\1\0\11\134\1\0\1\134"+ "\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0\4\134"+ "\1\u011c\17\134\1\125\2\0\1\134\2\0\17\134\1\0"+ "\1\125\10\0\6\134\1\0\11\134\1\0\1\134\1\0"+ "\1\125\1\u010e\1\134\1\0\2\134\14\0\10\134\1\u01f7"+ "\13\134\1\125\2\0\1\134\2\0\17\134\1\0\1\125"+ "\10\0\6\134\1\0\11\134\1\0\1\134\1\0\1\125"+ "\1\u010e\1\134\1\0\2\134\14\0\4\134\1\u01d7\17\134"+ "\1\125\2\0\1\134\2\0\17\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\u02ae\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\24\134\1\125\2\0\1\134"+ "\2\0\17\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\1\134\1\u02af\22\134\1\125\2\0\1\134\2\0"+ "\17\134\1\0\1\125\10\0\6\134\1\0\11\134\1\0"+ "\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0"+ "\2\134\1\u02b0\21\134\1\125\2\0\1\134\2\0\17\134"+ "\1\0\1\125\10\0\6\134\1\0\11\134\1\0\1\134"+ "\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0\1\u02b1"+ "\23\134\1\125\2\0\1\134\2\0\17\134\1\0\1\125"+ "\10\0\6\134\1\0\11\134\1\0\1\134\1\0\1\125"+ "\1\u010e\1\134\1\0\2\134\14\0\4\134\1\u0256\17\134"+ "\1\125\2\0\1\134\2\0\17\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\6\134\1\u02b2\15\134\1\125"+ "\2\0\1\134\2\0\17\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\4\134\1\u02b3\17\134\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\10\134\1\u02b4\13\134\1\125\2\0\1\134"+ "\2\0\17\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\12\134\1\u0258\11\134\1\125\2\0\1\134\2\0"+ "\17\134\1\0\1\125\10\0\6\134\1\0\11\134\1\0"+ "\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0"+ "\17\134\1\u02b5\4\134\1\125\2\0\1\134\2\0\17\134"+ "\1\0\1\125\10\0\6\134\1\0\11\134\1\0\1\134"+ "\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0\17\134"+ "\1\u02b6\4\134\1\125\2\0\1\134\2\0\17\134\1\0"+ "\1\125\10\0\6\134\1\0\11\134\1\0\1\134\1\0"+ "\1\125\1\u010e\1\134\1\0\2\134\14\0\12\134\1\u02b7"+ "\11\134\1\125\2\0\1\134\2\0\17\134\1\0\1\125"+ "\10\0\6\134\1\0\11\134\1\0\1\134\1\0\1\125"+ "\1\u010e\1\134\1\0\2\134\14\0\16\134\1\u02b8\5\134"+ "\1\125\2\0\1\134\2\0\17\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\5\134\1\u02b9\16\134\1\125"+ "\2\0\1\134\2\0\17\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\4\134\1\u0147\17\134\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\21\134\1\u011c\2\134\1\125\2\0\1\134"+ "\2\0\17\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\17\134\1\u02ba\4\134\1\125\2\0\1\134\2\0"+ "\17\134\14\0\1\u02bb\44\0\1\u02bb\122\0\1\u0270\15\0"+ "\1\u01ff\46\0\1\u02bc\124\0\2\u02bd\1\0\7\u0271\1\0"+ "\10\u0271\2\u02bd\1\u0271\1\0\1\u02bd\1\0\1\u0271\1\u02bd"+ "\2\u0271\2\u02bd\1\0\2\u02bd\1\0\5\u02bd\1\0\24\u0271"+ "\3\u02bd\1\u0271\2\u02bd\17\u0271\14\0\1\u02be\44\0\1\u02be"+ "\122\0\1\u0274\15\0\1\u0204\46\0\1\u02bf\124\0\2\u02c0"+ "\1\0\7\u0275\1\0\10\u0275\2\u02c0\1\u0275\1\0\1\u02c0"+ "\1\0\1\u0275\1\u02c0\2\u0275\2\u02c0\1\0\2\u02c0\1\0"+ "\5\u02c0\1\0\24\u0275\3\u02c0\1\u0275\2\u02c0\17\u0275\21\0"+ "\1\u02c1\52\0\1\u02c1\116\0\1\u027e\125\0\1\u02c2\141\0"+ "\1\u02c3\130\0\1\u02c4\113\0\1\u02c5\101\0\1\u02c6\173\0"+ "\1\u02c7\117\0\1\u02c8\141\0\1\u027c\107\0\1\u027c\132\0"+ "\1\u02c4\123\0\1\u02c9\142\0\1\u0282\70\0\1\u02ca\176\0"+ "\1\u02cb\110\0\1\u02cc\123\0\1\u02cd\132\0\1\u02ce\57\0"+ "\4\271\1\u02cf\1\271\1\0\10\271\2\0\1\271\5\0"+ "\2\271\14\0\16\271\1\u02cf\5\271\3\0\1\271\2\0"+ "\17\271\12\0\6\271\1\0\2\271\1\u02d0\5\271\2\0"+ "\1\271\5\0\2\271\14\0\17\271\1\u02d0\4\271\3\0"+ "\1\271\2\0\17\271\11\0\1\u0220\117\0\2\63\1\0"+ "\1\63\1\0\2\63\2\0\6\63\1\0\26\63\1\0"+ "\12\63\1\u02d1\25\63\1\0\2\63\1\u02d1\17\63\1\0"+ "\1\63\1\0\2\63\2\0\6\63\1\0\26\63\1\0"+ "\14\63\1\u01a3\23\63\1\0\3\63\1\u01a3\16\63\1\0"+ "\1\63\1\0\2\63\2\0\1\110\5\63\1\0\26\63"+ "\1\0\22\63\1\110\15\63\1\0\22\63\1\0\1\63"+ "\1\0\2\63\2\0\6\63\1\0\2\63\1\u02d2\23\63"+ "\1\0\26\63\1\u02d2\11\63\1\0\22\63\1\0\1\63"+ "\1\0\2\63\2\0\5\63\1\u02d3\1\0\26\63\1\0"+ "\13\63\1\u02d3\24\63\1\0\22\63\1\0\1\63\1\0"+ "\2\63\2\0\2\63\1\u02d4\3\63\1\0\26\63\1\0"+ "\11\63\1\u02d4\26\63\1\0\22\63\1\0\1\63\1\0"+ "\2\63\2\0\1\u02d5\5\63\1\0\26\63\1\0\22\63"+ "\1\u02d5\15\63\1\0\22\63\1\0\1\63\1\0\2\63"+ "\2\0\6\63\1\0\26\63\1\0\40\63\1\0\11\63"+ "\1\u02d6\10\63\1\0\1\63\1\0\2\63\2\0\6\63"+ "\1\0\26\63\1\0\12\63\1\u028f\25\63\1\0\2\63"+ "\1\u028f\17\63\1\0\1\63\1\0\2\63\2\0\1\u023f"+ "\5\63\1\0\26\63\1\0\22\63\1\u023f\15\63\1\0"+ "\22\63\1\0\1\63\1\0\2\63\2\0\6\63\1\0"+ "\26\63\1\0\27\63\1\u02d7\10\63\1\0\4\63\1\u02d7"+ "\15\63\1\0\1\63\1\0\2\63\2\0\6\63\1\0"+ "\1\63\1\u0290\24\63\1\0\17\63\1\u0290\20\63\1\0"+ "\22\63\1\0\1\63\1\0\2\63\2\0\6\63\1\0"+ "\2\63\1\u02d8\23\63\1\0\26\63\1\u02d8\11\63\1\0"+ "\22\63\1\0\1\63\1\0\2\63\2\0\3\63\1\357"+ "\2\63\1\0\26\63\1\0\7\63\1\357\30\63\1\0"+ "\22\63\1\0\1\63\1\0\2\63\2\0\2\63\1\u02d9"+ "\3\63\1\0\26\63\1\0\11\63\1\u02d9\26\63\1\0"+ "\22\63\1\0\1\63\1\0\2\63\2\0\6\63\1\0"+ "\1\u01a2\25\63\1\0\24\63\1\u01a2\13\63\1\0\22\63"+ "\1\0\1\63\1\0\2\63\2\0\1\u0290\5\63\1\0"+ "\26\63\1\0\22\63\1\u0290\15\63\1\0\22\63\1\0"+ "\1\63\1\0\2\63\2\0\1\63\1\u02da\4\63\1\0"+ "\26\63\1\0\16\63\1\u02da\21\63\1\0\22\63\1\0"+ "\1\63\1\0\2\63\2\0\6\63\1\0\2\63\1\u0184"+ "\23\63\1\0\26\63\1\u0184\11\63\1\0\20\63\14\0"+ "\1\u02db\41\0\1\u02db\51\0\1\125\10\0\1\125\1\u02dc"+ "\4\125\1\0\2\125\1\u02dc\1\125\4\u02dc\1\125\1\0"+ "\1\125\1\0\3\125\1\0\1\125\1\u02dc\14\0\7\125"+ "\1\u02dc\1\125\2\u02dc\1\125\1\u02dc\2\125\1\u02dc\3\125"+ "\1\u02dc\1\125\2\0\1\125\2\0\1\125\1\u02dc\3\125"+ "\1\u02dc\6\125\1\u02dc\2\125\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\1\u02dd\23\134\1\125\2\0\1\134"+ "\2\0\17\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\14\134\1\u02de\7\134\1\125\2\0\1\134\2\0"+ "\17\134\1\0\1\125\10\0\6\134\1\0\11\134\1\0"+ "\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0"+ "\5\134\1\u02df\16\134\1\125\2\0\1\134\2\0\17\134"+ "\1\0\1\125\10\0\6\134\1\0\11\134\1\0\1\134"+ "\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0\1\u02e0"+ "\23\134\1\125\2\0\1\134\2\0\17\134\1\0\1\125"+ "\10\0\6\134\1\0\11\134\1\0\1\134\1\0\1\125"+ "\1\u010e\1\134\1\0\2\134\14\0\20\134\1\u02e1\3\134"+ "\1\125\2\0\1\134\2\0\17\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\5\134\1\u02e2\16\134\1\125"+ "\2\0\1\134\2\0\17\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\1\u02e3\23\134\1\125\2\0\1\134"+ "\2\0\17\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\14\134\1\u011c\7\134\1\125\2\0\1\134\2\0"+ "\17\134\1\0\1\125\10\0\6\134\1\0\11\134\1\0"+ "\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0"+ "\5\134\1\u02e4\16\134\1\125\2\0\1\134\2\0\17\134"+ "\1\0\1\125\10\0\6\134\1\0\11\134\1\0\1\134"+ "\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0\10\134"+ "\1\u0255\13\134\1\125\2\0\1\134\2\0\17\134\1\0"+ "\1\125\10\0\6\134\1\0\11\134\1\0\1\134\1\0"+ "\1\125\1\u010e\1\134\1\0\2\134\14\0\1\134\1\u01df"+ "\22\134\1\125\2\0\1\134\2\0\17\134\1\0\1\125"+ "\10\0\6\134\1\0\11\134\1\0\1\134\1\0\1\125"+ "\1\u010e\1\134\1\0\2\134\14\0\12\134\1\u02e5\11\134"+ "\1\125\2\0\1\134\2\0\17\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\7\134\1\u011c\14\134\1\125"+ "\2\0\1\134\2\0\17\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\2\134\1\u02e6\21\134\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\1\u02e7\23\134\1\125\2\0\1\134\2\0"+ "\17\134\1\0\1\125\10\0\6\134\1\0\11\134\1\0"+ "\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0"+ "\10\134\1\u02e8\13\134\1\125\2\0\1\134\2\0\17\134"+ "\1\0\1\125\10\0\6\134\1\0\11\134\1\0\1\134"+ "\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0\7\134"+ "\1\u02e9\14\134\1\125\2\0\1\134\2\0\17\134\1\0"+ "\1\125\10\0\3\134\1\u02ea\2\134\1\0\11\134\1\0"+ "\1\134\1\0\1\125\1\u010e\1\134\1\0\1\134\1\u02eb"+ "\14\0\24\134\1\125\2\0\1\134\2\0\17\134\1\0"+ "\1\125\10\0\6\134\1\0\11\134\1\0\1\134\1\0"+ "\1\125\1\u010e\1\134\1\0\2\134\14\0\1\134\1\u01d7"+ "\22\134\1\125\2\0\1\134\2\0\17\134\1\0\1\125"+ "\10\0\6\134\1\0\11\134\1\0\1\134\1\0\1\125"+ "\1\u010e\1\134\1\0\2\134\14\0\17\134\1\u0267\4\134"+ "\1\125\2\0\1\134\2\0\17\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\11\134\1\u01ce\12\134\1\125"+ "\2\0\1\134\2\0\17\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\12\134\1\u02ec\11\134\1\125\2\0"+ "\1\134\2\0\17\134\15\0\1\u02ed\41\0\1\u02ed\61\0"+ "\1\u0271\133\0\1\u02ee\41\0\1\u02ee\61\0\1\u0275\140\0"+ "\1\u02ef\44\0\1\u02ef\132\0\1\u02f0\117\0\1\u02f1\77\0"+ "\1\u02f2\173\0\1\u020d\113\0\1\u02f3\3\0\1\u02f4\1\u02f5"+ "\121\0\1\u027c\146\0\1\u02f6\130\0\1\u02f7\120\0\1\u027c"+ "\124\0\1\u02f6\134\0\1\u027c\116\0\1\u02f6\125\0\1\u02f8"+ "\60\0\5\271\1\u02f9\1\0\10\271\2\0\1\271\5\0"+ "\2\271\14\0\4\271\1\u02f9\17\271\3\0\1\271\2\0"+ "\17\271\1\0\2\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\12\63\1\u0182\13\63\1\0\40\63\1\0"+ "\6\63\1\u0182\13\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\20\63\1\110\5\63\1\0\36\63\1\110"+ "\1\63\1\0\22\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\2\63\1\u02fa\23\63\1\0\26\63\1\u02fa"+ "\11\63\1\0\22\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\2\63\1\u01b1\23\63\1\0\26\63\1\u01b1"+ "\11\63\1\0\22\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\26\63\1\0\12\63\1\310\25\63\1\0"+ "\2\63\1\310\17\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\12\63\1\u02fb\13\63\1\0\40\63\1\0"+ "\6\63\1\u02fb\13\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\2\63\1\u0290\23\63\1\0\26\63\1\u0290"+ "\11\63\1\0\22\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\26\63\1\0\27\63\1\u02fc\10\63\1\0"+ "\4\63\1\u02fc\15\63\1\0\1\63\1\0\2\63\2\0"+ "\3\63\1\u0103\2\63\1\0\26\63\1\0\7\63\1\u0103"+ "\30\63\1\0\22\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\26\63\1\0\12\63\1\u01a9\25\63\1\0"+ "\2\63\1\u01a9\15\63\15\0\1\u02fd\56\0\1\u02fd\33\0"+ "\1\125\10\0\1\125\1\134\4\125\1\0\2\125\1\134"+ "\1\125\4\134\1\125\1\0\1\125\1\0\3\125\1\0"+ "\1\125\1\134\14\0\7\125\1\134\1\125\2\134\1\125"+ "\1\134\2\125\1\134\3\125\1\134\1\125\2\0\1\125"+ "\2\0\1\125\1\134\3\125\1\134\6\125\1\134\2\125"+ "\1\0\1\125\10\0\6\134\1\0\11\134\1\0\1\134"+ "\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0\4\134"+ "\1\u02e8\17\134\1\125\2\0\1\134\2\0\17\134\1\0"+ "\1\125\10\0\6\134\1\0\11\134\1\0\1\134\1\0"+ "\1\125\1\u010e\1\134\1\0\2\134\14\0\12\134\1\u02fe"+ "\11\134\1\125\2\0\1\134\2\0\17\134\1\0\1\125"+ "\10\0\6\134\1\0\11\134\1\0\1\134\1\0\1\125"+ "\1\u010e\1\134\1\0\2\134\14\0\7\134\1\u01d0\14\134"+ "\1\125\2\0\1\134\2\0\17\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\4\134\1\u02b8\17\134\1\125"+ "\2\0\1\134\2\0\17\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\17\134\1\u02ff\4\134\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\17\134\1\u0300\4\134\1\125\2\0\1\134"+ "\2\0\17\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\u01d7\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\24\134\1\125\2\0\1\134\2\0\17\134\1\0"+ "\1\125\10\0\6\134\1\0\11\134\1\0\1\134\1\0"+ "\1\125\1\u010e\1\134\1\0\2\134\14\0\7\134\1\u0255"+ "\14\134\1\125\2\0\1\134\2\0\17\134\1\0\1\125"+ "\10\0\6\134\1\0\11\134\1\0\1\134\1\0\1\125"+ "\1\u010e\1\134\1\0\2\134\14\0\3\134\1\u0301\20\134"+ "\1\125\2\0\1\134\2\0\17\134\1\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\3\134\1\u0302\20\134\1\125"+ "\2\0\1\134\2\0\17\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\15\134\1\u011c\6\134\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\4\134\1\u0303\17\134\1\125\2\0\1\134"+ "\2\0\17\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\5\134\1\u0304\16\134\1\125\2\0\1\134\2\0"+ "\17\134\1\0\1\125\10\0\6\134\1\0\11\134\1\0"+ "\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0"+ "\10\134\1\u0305\13\134\1\125\2\0\1\134\2\0\17\134"+ "\1\0\1\125\10\0\6\134\1\0\11\134\1\0\1\134"+ "\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0\5\134"+ "\1\u0256\16\134\1\125\2\0\1\134\2\0\17\134\16\0"+ "\1\u0306\56\0\1\u0306\50\0\1\u0307\56\0\1\u0307\55\0"+ "\1\u0308\52\0\1\u0308\114\0\1\u0309\125\0\1\u02f7\130\0"+ "\1\u02f3\3\0\1\u02f4\134\0\1\u030a\121\0\1\u030b\133\0"+ "\1\u0284\134\0\1\u030c\127\0\1\u027c\114\0\1\u030d\45\0"+ "\2\63\1\0\1\63\1\0\2\63\2\0\6\63\1\0"+ "\20\63\1\u01a3\5\63\1\0\36\63\1\u01a3\1\63\1\0"+ "\22\63\1\0\1\63\1\0\2\63\2\0\6\63\1\0"+ "\26\63\1\0\12\63\1\313\25\63\1\0\2\63\1\313"+ "\17\63\1\0\1\63\1\0\2\63\2\0\4\63\1\u030e"+ "\1\63\1\0\26\63\1\0\25\63\1\u030e\12\63\1\0"+ "\20\63\16\0\1\u030f\43\0\1\u030f\45\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\7\134\1\u01d7\14\134\1\125"+ "\2\0\1\134\2\0\17\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\5\134\1\u0310\16\134\1\125\2\0"+ "\1\134\2\0\17\134\1\0\1\125\10\0\6\134\1\0"+ "\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0"+ "\2\134\14\0\5\134\1\u0255\16\134\1\125\2\0\1\134"+ "\2\0\17\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\5\134\1\u0311\16\134\1\125\2\0\1\134\2\0"+ "\17\134\1\0\1\125\10\0\6\134\1\0\11\134\1\0"+ "\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0"+ "\5\134\1\u011c\16\134\1\125\2\0\1\134\2\0\17\134"+ "\1\0\1\125\10\0\6\134\1\0\11\134\1\0\1\134"+ "\1\0\1\125\1\u010e\1\134\1\0\2\134\14\0\17\134"+ "\1\u01f3\4\134\1\125\2\0\1\134\2\0\17\134\1\0"+ "\1\125\10\0\6\134\1\0\11\134\1\0\1\134\1\0"+ "\1\125\1\u010e\1\134\1\0\2\134\14\0\4\134\1\u0267"+ "\17\134\1\125\2\0\1\134\2\0\17\134\1\0\1\125"+ "\10\0\6\134\1\0\11\134\1\0\1\134\1\0\1\125"+ "\1\u010e\1\134\1\0\2\134\14\0\3\134\1\u0312\20\134"+ "\1\125\2\0\1\134\2\0\17\134\17\0\1\u0313\43\0"+ "\1\u0313\63\0\1\u0314\43\0\1\u0314\64\0\1\u0315\141\0"+ "\1\u0316\127\0\1\u0317\154\0\1\u0318\140\0\1\u027c\130\0"+ "\1\u0319\37\0\2\63\1\0\1\63\1\0\2\63\2\0"+ "\6\63\1\0\1\63\1\u031a\24\63\1\0\17\63\1\u031a"+ "\20\63\1\0\20\63\17\0\1\u031b\110\0\1\125\10\0"+ "\6\134\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e"+ "\1\134\1\0\2\134\14\0\4\134\1\u01ce\17\134\1\125"+ "\2\0\1\134\2\0\17\134\1\0\1\125\10\0\6\134"+ "\1\0\11\134\1\0\1\134\1\0\1\125\1\u010e\1\134"+ "\1\0\2\134\14\0\1\u031c\23\134\1\125\2\0\1\134"+ "\2\0\17\134\1\0\1\125\10\0\6\134\1\0\11\134"+ "\1\0\1\134\1\0\1\125\1\u010e\1\134\1\0\2\134"+ "\14\0\12\134\1\u0304\11\134\1\125\2\0\1\134\2\0"+ "\17\134\20\0\1\u031d\127\0\1\u031e\176\0\1\u031f\123\0"+ "\1\u0320\133\0\1\u030c\124\0\1\u0321\44\0\2\63\1\0"+ "\1\63\1\0\2\63\2\0\6\63\1\0\26\63\1\0"+ "\21\63\1\313\16\63\1\0\1\63\1\313\16\63\1\125"+ "\10\0\6\134\1\0\11\134\1\0\1\134\1\0\1\125"+ "\1\u010e\1\134\1\0\2\134\14\0\24\134\1\125\2\0"+ "\1\134\2\0\16\134\1\u0303\57\0\1\u0322\16\0\1\u0323"+ "\125\0\1\u0324\116\0\1\u0325\130\0\1\u02f7\126\0\1\u0277"+ "\141\0\1\u02f7\33\0"; private static int [] zzUnpackTrans() { int [] result = new int[61952]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\6\0\2\1\1\0\2\1\1\0\2\1\7\0\1\1"+ "\3\0\2\1\1\11\4\1\1\11\5\1\1\11\2\1"+ "\2\11\2\1\1\11\1\1\3\11\1\1\1\11\25\1"+ "\1\11\1\1\1\11\1\1\7\11\1\1\1\11\2\1"+ "\2\11\10\1\1\11\3\1\1\11\20\1\1\11\3\1"+ "\2\11\2\1\1\11\1\1\1\11\1\1\1\11\6\1"+ "\1\11\4\1\2\11\1\1\1\11\5\1\4\11\4\1"+ "\4\11\1\1\1\11\6\1\4\11\1\1\2\11\1\1"+ "\1\11\5\1\2\11\5\0\1\11\103\1\1\11\3\0"+ "\1\11\1\0\75\1\1\11\2\1\1\0\1\11\12\0"+ "\1\11\1\1\15\0\1\1\1\11\5\0\1\1\1\0"+ "\2\11\3\1\1\0\1\11\4\0\100\1\1\0\1\1"+ "\1\0\3\1\1\0\70\1\41\0\2\1\1\11\2\0"+ "\44\1\1\0\1\11\46\1\1\0\1\11\3\0\1\1"+ "\3\0\1\1\6\0\1\11\15\0\2\1\2\0\24\1"+ "\1\0\30\1\24\0\14\1\1\0\21\1\14\0\4\1"+ "\1\0\10\1\10\0\1\1\1\0\3\1\2\0\1\11"+ "\4\0\1\1\1\11\1\1\2\11\6\0\1\11"; private static int [] zzUnpackAttribute() { int [] result = new int[805]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Type specific to XMLTokenMaker denoting a line ending with an unclosed * double-quote attribute. */ public static final int INTERNAL_ATTR_DOUBLE = -1; /** * Type specific to XMLTokenMaker denoting a line ending with an unclosed * single-quote attribute. */ public static final int INTERNAL_ATTR_SINGLE = -2; /** * Token type specific to HTMLTokenMaker; this signals that the user has * ended a line with an unclosed HTML tag; thus a new line is beginning * still inside of the tag. */ public static final int INTERNAL_INTAG = -3; /** * Token type specific to HTMLTokenMaker; this signals that the user has * ended a line with an unclosed <script> tag. */ public static final int INTERNAL_INTAG_SCRIPT = -4; /** * Token type specifying we're in a double-qouted attribute in a * script tag. */ public static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -5; /** * Token type specifying we're in a single-qouted attribute in a * script tag. */ public static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -6; /** * Token type specific to HTMLTokenMaker; this signals that the user has * ended a line with an unclosed <style> tag. */ public static final int INTERNAL_INTAG_STYLE = -7; /** * Token type specifying we're in a double-qouted attribute in a * style tag. */ public static final int INTERNAL_ATTR_DOUBLE_QUOTE_STYLE = -8; /** * Token type specifying we're in a single-qouted attribute in a * style tag. */ public static final int INTERNAL_ATTR_SINGLE_QUOTE_STYLE = -9; /** * Token type specifying we're in JavaScript. */ public static final int INTERNAL_IN_JS = -10; /** * Token type specifying we're in a JavaScript multiline comment. */ public static final int INTERNAL_IN_JS_MLC = -11; /** * Token type specifying we're in an invalid multi-line JS string. */ public static final int INTERNAL_IN_JS_STRING_INVALID = -12; /** * Token type specifying we're in a valid multi-line JS string. */ public static final int INTERNAL_IN_JS_STRING_VALID = -13; /** * Token type specifying we're in an invalid multi-line JS single-quoted string. */ public static final int INTERNAL_IN_JS_CHAR_INVALID = -14; /** * Token type specifying we're in a valid multi-line JS single-quoted string. */ public static final int INTERNAL_IN_JS_CHAR_VALID = -15; /** * Internal type denoting a line ending in CSS. */ public static final int INTERNAL_CSS = -16; /** * Internal type denoting a line ending in a CSS property. */ public static final int INTERNAL_CSS_PROPERTY = -17; /** * Internal type denoting a line ending in a CSS property value. */ public static final int INTERNAL_CSS_VALUE = -18; /** * Internal type denoting line ending in a CSS double-quote string. * The state to return to is embedded in the actual end token type. */ public static final int INTERNAL_CSS_STRING = -(1<<11); /** * Internal type denoting line ending in a CSS single-quote string. * The state to return to is embedded in the actual end token type. */ public static final int INTERNAL_CSS_CHAR = -(2<<11); /** * Internal type denoting line ending in a CSS multi-line comment. * The state to return to is embedded in the actual end token type. */ public static final int INTERNAL_CSS_MLC = -(3<<11); /** * The state previous CSS-related state we were in before going into a CSS * string, multi-line comment, etc. */ private int cssPrevState; /** * Whether closing markup tags are automatically completed for HTML. */ private static boolean completeCloseTags; /** * When in the JS_STRING state, whether the current string is valid. */ private boolean validJSString; /** * Language state set on HTML tokens. Must be 0. */ private static final int LANG_INDEX_DEFAULT = 0; /** * Language state set on JavaScript tokens. */ private static final int LANG_INDEX_JS = 1; /** * Language state set on CSS tokens. */ private static final int LANG_INDEX_CSS = 2; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public HTMLTokenMaker() { super(); } /** * Adds the token specified to the current linked list of tokens as an * "end token;" that is, at zzMarkedPos. * * @param tokenType The token's type. */ private void addEndToken(int tokenType) { addToken(zzMarkedPos,zzMarkedPos, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override protected OccurrenceMarker createOccurrenceMarker() { return new HtmlOccurrenceMarker(); } /** * Sets whether markup close tags should be completed. You might not want * this to be the case, since some tags in standard HTML aren't usually * closed. * * @return Whether closing markup tags are completed. * @see #setCompleteCloseTags(boolean) */ @Override public boolean getCompleteCloseTags() { return completeCloseTags; } @Override public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { return languageIndex==LANG_INDEX_CSS || languageIndex==LANG_INDEX_JS; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { switch (languageIndex) { case LANG_INDEX_JS: return new String[] { "//", null }; case LANG_INDEX_CSS: return new String[] { "/*", "*/" }; default: return new String[] { "" }; } } /** * Returns Token.MARKUP_TAG_NAME. * * @param type The token type. * @return Whether tokens of this type should have "mark occurrences" * enabled. */ @Override public boolean getMarkOccurrencesOfTokenType(int type) { return type==Token.MARKUP_TAG_NAME; } /** * Overridden to handle newlines in JS and CSS differently than those in * markup. */ @Override public boolean getShouldIndentNextLineAfter(Token token) { int languageIndex = token==null ? 0 : token.getLanguageIndex(); if (getCurlyBracesDenoteCodeBlocks(languageIndex)) { if (token!=null && token.length()==1) { char ch = token.charAt(0); return ch=='{' || ch=='('; } } return false; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; cssPrevState = CSS; // Shouldn't be necessary int languageIndex = 0; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.MARKUP_COMMENT: state = COMMENT; break; case Token.PREPROCESSOR: state = PI; break; case Token.VARIABLE: state = DTD; break; case INTERNAL_INTAG: state = INTAG; break; case INTERNAL_INTAG_SCRIPT: state = INTAG_SCRIPT; break; case INTERNAL_INTAG_STYLE: state = INTAG_STYLE; break; case INTERNAL_ATTR_DOUBLE: state = INATTR_DOUBLE; break; case INTERNAL_ATTR_SINGLE: state = INATTR_SINGLE; break; case INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT: state = INATTR_DOUBLE_SCRIPT; break; case INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT: state = INATTR_SINGLE_SCRIPT; break; case INTERNAL_ATTR_DOUBLE_QUOTE_STYLE: state = INATTR_DOUBLE_STYLE; break; case INTERNAL_ATTR_SINGLE_QUOTE_STYLE: state = INATTR_SINGLE_STYLE; break; case INTERNAL_IN_JS: state = JAVASCRIPT; languageIndex = LANG_INDEX_JS; break; case INTERNAL_IN_JS_MLC: state = JS_MLC; languageIndex = LANG_INDEX_JS; break; case INTERNAL_IN_JS_STRING_INVALID: state = JS_STRING; validJSString = false; languageIndex = LANG_INDEX_JS; break; case INTERNAL_IN_JS_STRING_VALID: state = JS_STRING; validJSString = true; languageIndex = LANG_INDEX_JS; break; case INTERNAL_IN_JS_CHAR_INVALID: state = JS_CHAR; validJSString = false; languageIndex = LANG_INDEX_JS; break; case INTERNAL_IN_JS_CHAR_VALID: state = JS_CHAR; validJSString = true; languageIndex = LANG_INDEX_JS; break; case INTERNAL_CSS: state = CSS; languageIndex = LANG_INDEX_CSS; break; case INTERNAL_CSS_PROPERTY: state = CSS_PROPERTY; languageIndex = LANG_INDEX_CSS; break; case INTERNAL_CSS_VALUE: state = CSS_VALUE; languageIndex = LANG_INDEX_CSS; break; default: if (initialTokenType<-1024) { int main = -(-initialTokenType & 0xffffff00); switch (main) { default: // Should never happen case INTERNAL_CSS_STRING: state = CSS_STRING; break; case INTERNAL_CSS_CHAR: state = CSS_CHAR_LITERAL; break; case INTERNAL_CSS_MLC: state = CSS_C_STYLE_COMMENT; break; } cssPrevState = -initialTokenType&0xff; languageIndex = LANG_INDEX_CSS; } else { state = Token.NULL; } break; } setLanguageIndex(languageIndex); start = text.offset; s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Sets whether markup close tags should be completed. You might not want * this to be the case, since some tags in standard HTML aren't usually * closed. * * @param complete Whether closing markup tags are completed. * @see #getCompleteCloseTags() */ public static void setCompleteCloseTags(boolean complete) { completeCloseTags = complete; } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public HTMLTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public HTMLTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 194) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 54: { addToken(Token.OPERATOR); yybegin(CSS_VALUE); } case 104: break; case 73: { addToken(Token.ERROR_NUMBER_FORMAT); } case 105: break; case 63: { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; } case 106: break; case 23: { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_SCRIPT); } case 107: break; case 10: { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.MARKUP_DTD); } case 108: break; case 49: { addToken(Token.SEPARATOR); yybegin(CSS_PROPERTY); } case 109: break; case 4: { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(INTAG); } case 110: break; case 97: { addToken(Token.RESERVED_WORD_2); } case 111: break; case 83: { addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(cssPrevState); } case 112: break; case 80: { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } case 113: break; case 39: { /* Line ending in '\' => continue to next line. */ if (validJSString) { addToken(start,zzStartRead, Token.LITERAL_CHAR); addEndToken(INTERNAL_IN_JS_CHAR_VALID); } else { addToken(start,zzStartRead, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS_CHAR_INVALID); } return firstToken; } case 114: break; case 5: { addToken(Token.WHITESPACE); } case 115: break; case 98: { addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-6,zzMarkedPos-1, Token.MARKUP_TAG_NAME); start = zzMarkedPos; yybegin(INTAG_SCRIPT); } case 116: break; case 82: { addToken(Token.REGEX); } case 117: break; case 41: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } case 118: break; case 102: { int temp = zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); yybegin(YYINITIAL, LANG_INDEX_DEFAULT); addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } case 119: break; case 93: { addToken(Token.FUNCTION); } case 120: break; case 8: { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } case 121: break; case 35: { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } case 122: break; case 45: { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } case 123: break; case 20: { yybegin(INTAG); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } case 124: break; case 25: { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_STYLE); } case 125: break; case 76: { /* Skip all escaped chars. */ } case 126: break; case 70: { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } case 127: break; case 28: { yybegin(INTAG_STYLE); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } case 128: break; case 92: { if(JavaScriptTokenMaker.isJavaScriptCompatible("1.6")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } case 129: break; case 87: { if(JavaScriptTokenMaker.isJavaScriptCompatible("1.7")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } case 130: break; case 55: { /*System.out.println("css_value: " + yytext());*/ addToken(Token.IDENTIFIER); } case 131: break; case 17: { /* A non-recognized HTML tag name */ yypushback(yylength()); yybegin(INTAG); } case 132: break; case 26: { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(CSS, LANG_INDEX_CSS); } case 133: break; case 64: { addToken(start,zzStartRead, Token.LITERAL_CHAR); yybegin(cssPrevState); } case 134: break; case 27: { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_STYLE); } case 135: break; case 7: { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; } case 136: break; case 78: { /* Invalid latin-1 character \xXX */ validJSString = false; } case 137: break; case 24: { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } case 138: break; case 36: { int type = validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } case 139: break; case 90: { addToken(Token.COMMENT_MULTILINE); } case 140: break; case 68: { start = zzMarkedPos-2; yybegin(PI); } case 141: break; case 99: { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } case 142: break; case 50: { /*System.out.println("css_property: " + yytext());*/ addToken(Token.IDENTIFIER); } case 143: break; case 9: { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } case 144: break; case 66: { int count = yylength(); addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); zzMarkedPos -= (count-1); //yypushback(count-1); yybegin(INTAG_CHECK_TAG_NAME); } case 145: break; case 62: { /* Skip escaped chars. */ } case 146: break; case 77: { /* Invalid Unicode character \\uXXXX */ validJSString = false; } case 147: break; case 96: { addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-5,zzMarkedPos-1, Token.MARKUP_TAG_NAME); start = zzMarkedPos; cssPrevState = zzLexicalState; yybegin(INTAG_STYLE); } case 148: break; case 69: { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.MARKUP_PROCESSING_INSTRUCTION); } case 149: break; case 79: { yybegin(JAVASCRIPT); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } case 150: break; case 30: { addEndToken(INTERNAL_IN_JS); return firstToken; } case 151: break; case 38: { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; } case 152: break; case 15: { addToken(Token.OPERATOR); } case 153: break; case 57: { addToken(Token.OPERATOR); yybegin(CSS_PROPERTY); } case 154: break; case 88: { start = zzMarkedPos-4; yybegin(COMMENT); } case 155: break; case 85: { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); } case 156: break; case 101: { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); int temp = zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } case 157: break; case 81: { addToken(Token.VARIABLE); } case 158: break; case 43: { /*System.out.println("CSS: " + yytext());*/ addToken(Token.IDENTIFIER); } case 159: break; case 2: { addToken(Token.IDENTIFIER); } case 160: break; case 94: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } case 161: break; case 22: { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(JAVASCRIPT, LANG_INDEX_JS); } case 162: break; case 95: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } case 163: break; case 53: { addToken(Token.SEPARATOR); yybegin(CSS); } case 164: break; case 31: { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); } case 165: break; case 61: { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(cssPrevState); } case 166: break; case 51: { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; } case 167: break; case 40: { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } case 168: break; case 34: { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); } case 169: break; case 72: { start = zzMarkedPos-2; yybegin(JS_MLC); } case 170: break; case 75: { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } case 171: break; case 59: { int temp = zzMarkedPos - 2; addToken(zzStartRead, temp, Token.FUNCTION); addToken(zzMarkedPos-1, zzMarkedPos-1, Token.SEPARATOR); zzStartRead = zzCurrentPos = zzMarkedPos; } case 172: break; case 103: { addToken(Token.ANNOTATION); } case 173: break; case 29: { addToken(Token.ERROR_IDENTIFIER); } case 174: break; case 56: { addEndToken(INTERNAL_CSS_VALUE); return firstToken; } case 175: break; case 89: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addHyperlinkToken(temp,zzMarkedPos-1, Token.MARKUP_COMMENT); start = zzMarkedPos; } case 176: break; case 6: { addToken(Token.MARKUP_ENTITY_REFERENCE); } case 177: break; case 91: { addToken(Token.LITERAL_BOOLEAN); } case 178: break; case 18: { /* Shouldn't happen */ yypushback(1); yybegin(INTAG); } case 179: break; case 3: { addNullToken(); return firstToken; } case 180: break; case 44: { addEndToken(INTERNAL_CSS); return firstToken; } case 181: break; case 100: { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } case 182: break; case 48: { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } case 183: break; case 52: { addToken(Token.RESERVED_WORD); } case 184: break; case 12: { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE); } case 185: break; case 14: { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } case 186: break; case 46: { addToken(Token.DATA_TYPE); } case 187: break; case 33: { addToken(Token.SEPARATOR); } case 188: break; case 84: { int count = yylength(); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); zzMarkedPos -= (count-2); //yypushback(count-2); yybegin(INTAG_CHECK_TAG_NAME); } case 189: break; case 60: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; } case 190: break; case 58: { /* End of a function */ addToken(Token.SEPARATOR); } case 191: break; case 19: { addToken(Token.MARKUP_TAG_NAME); } case 192: break; case 11: { addToken(Token.MARKUP_TAG_ATTRIBUTE); } case 193: break; case 71: { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); } case 194: break; case 37: { /* Line ending in '\' => continue to next line. */ if (validJSString) { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_IN_JS_STRING_VALID); } else { addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS_STRING_INVALID); } return firstToken; } case 195: break; case 74: { addToken(Token.LITERAL_NUMBER_FLOAT); } case 196: break; case 16: { start = zzMarkedPos-1; yybegin(INATTR_SINGLE); } case 197: break; case 86: { boolean highlightedAsRegex = false; if (firstToken==null) { addToken(Token.REGEX); highlightedAsRegex = true; } else { // If this is *likely* to be a regex, based on // the previous token, highlight it as such. Token t = firstToken.getLastNonCommentNonWhitespaceToken(); if (RSyntaxUtilities.regexCanFollowInJavaScript(t)) { addToken(Token.REGEX); highlightedAsRegex = true; } } // If it doesn't *appear* to be a regex, highlight it as // individual tokens. if (!highlightedAsRegex) { int temp = zzStartRead + 1; addToken(zzStartRead, zzStartRead, Token.OPERATOR); zzStartRead = zzCurrentPos = zzMarkedPos = temp; } } case 198: break; case 13: { addToken(Token.MARKUP_TAG_DELIMITER); } case 199: break; case 65: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; } case 200: break; case 32: { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } case 201: break; case 67: { start = zzMarkedPos-2; yybegin(DTD); } case 202: break; case 21: { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_SCRIPT); } case 203: break; case 42: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } case 204: break; case 47: { /* Unknown pseudo class */ addToken(Token.DATA_TYPE); } case 205: break; case 1: { } case 206: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case INATTR_SINGLE_SCRIPT: { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); return firstToken; } case 806: break; case JS_CHAR: { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; } case 807: break; case CSS_STRING: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; } case 808: break; case JS_MLC: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } case 809: break; case CSS_CHAR_LITERAL: { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; } case 810: break; case INTAG_SCRIPT: { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_SCRIPT); return firstToken; } case 811: break; case CSS_PROPERTY: { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; } case 812: break; case CSS_C_STYLE_COMMENT: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; } case 813: break; case CSS: { addEndToken(INTERNAL_CSS); return firstToken; } case 814: break; case CSS_VALUE: { addEndToken(INTERNAL_CSS_VALUE); return firstToken; } case 815: break; case COMMENT: { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; } case 816: break; case INATTR_DOUBLE_SCRIPT: { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); return firstToken; } case 817: break; case PI: { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } case 818: break; case JAVASCRIPT: { addEndToken(INTERNAL_IN_JS); return firstToken; } case 819: break; case INTAG: { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } case 820: break; case INTAG_CHECK_TAG_NAME: { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } case 821: break; case INATTR_SINGLE_STYLE: { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_STYLE); return firstToken; } case 822: break; case DTD: { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } case 823: break; case JS_EOL_COMMENT: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } case 824: break; case INATTR_DOUBLE_STYLE: { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_STYLE); return firstToken; } case 825: break; case INATTR_SINGLE: { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; } case 826: break; case YYINITIAL: { addNullToken(); return firstToken; } case 827: break; case INATTR_DOUBLE: { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; } case 828: break; case JS_STRING: { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } case 829: break; case INTAG_STYLE: { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_STYLE); return firstToken; } case 830: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HtaccessTokenMaker.flex000066400000000000000000000336511257417003700323360ustar00rootroot00000000000000/* * 06/30/2013 * * HtaccessTokenMaker.java - Token generator for .htaccess files. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for .htaccess files. * * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated HtaccessTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.7 * */ %% %public %class HtaccessTokenMaker %extends AbstractJFlexTokenMaker %unicode %ignorecase %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Type specific to HtaccessTokenMaker denoting a line ending with an * unclosed double-quote attribute. */ public static final int INTERNAL_ATTR_DOUBLE = -1; /** * Type specific to HtaccessTokenMaker denoting a line ending with an * unclosed single-quote attribute. */ public static final int INTERNAL_ATTR_SINGLE = -2; /** * Token type specific to HtaccessTokenMaker denoting a line ending with an * unclosed XML tag; thus a new line is beginning still inside of the tag. */ public static final int INTERNAL_INTAG = -3; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public HtaccessTokenMaker() { } /** * Adds the token specified to the current linked list of tokens as an * "end token;" that is, at zzMarkedPos. * * @param tokenType The token's type. */ private void addEndToken(int tokenType) { addToken(zzMarkedPos,zzMarkedPos, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * Returns how to transform a line into a line comment. * * @return The line comment start and end text for .htaccess files. */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "#", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = YYINITIAL; switch (initialTokenType) { case INTERNAL_ATTR_DOUBLE: state = INATTR_DOUBLE; break; case INTERNAL_ATTR_SINGLE: state = INATTR_SINGLE; break; case INTERNAL_INTAG: state = INTAG; break; default: state = YYINITIAL; } start = text.offset; s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} NameStartChar = ([\:A-Z_a-z]) NameChar = ({NameStartChar}|[\-\.0-9]) TagName = ({NameStartChar}{NameChar}*) Whitespace = ([ \t\f]+) Identifier = ([^ \t\n<#]+) InTagIdentifier = ([^ \t\n\"\'=>]+) LineCommentBegin = ("#") AnyCharacterButDoubleQuoteOrBackSlash = ([^\\\"\n]) Escape = ("\\".) StringLiteral = ([\"]({AnyCharacterButDoubleQuoteOrBackSlash}|{Escape})*[\"]) UnclosedStringLiteral = ([\"]([\\].|[^\\\"])*[^\"]?) ErrorStringLiteral = ({UnclosedStringLiteral}[\"]) NameStartChar = ([\:A-Z_a-z]) NameChar = ({NameStartChar}|[\-\.0-9]) TagName = ({NameStartChar}{NameChar}*) DirectiveStart = (("<"[/]?){TagName}) URLGenDelim = ([:\/\?#\[\]@]) URLSubDelim = ([\!\$&'\(\)\*\+,;=]) URLUnreserved = ([A-Za-z_0-9\-\.\~]) URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) URLCharacters = ({URLCharacter}*) URLEndCharacter = ([\/\$A-Za-z0-9]) URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) %state EOL_COMMENT %state INTAG %state INATTR_DOUBLE %state INATTR_SINGLE %% { {Whitespace} { addToken(Token.WHITESPACE); } {LineCommentBegin} { start = zzMarkedPos-1; yybegin(EOL_COMMENT); } "<"{TagName} { int count = yylength(); addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-(count-1), zzMarkedPos-1, Token.MARKUP_TAG_NAME); yybegin(INTAG); } "> { addNullToken(); return firstToken; } } { {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } {Whitespace}+ { addToken(Token.WHITESPACE); } "=" { addToken(Token.OPERATOR); } ">" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE); } [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE); } <> { addToken(start,zzStartRead-1, INTERNAL_INTAG); return firstToken; } } { [^\"]* {} [\"] { yybegin(INTAG); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; } } { [^\']* {} [\'] { yybegin(INTAG); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; } } { [^hwf\n]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } [hwf] {} \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HtaccessTokenMaker.java000066400000000000000000001673721257417003700323310ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 7/14/13 10:47 PM */ /* * 06/30/2013 * * HtaccessTokenMaker.java - Token generator for .htaccess files. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for .htaccess files. * * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated HtaccessTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.7 * */ public class HtaccessTokenMaker extends AbstractJFlexTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int EOL_COMMENT = 1; public static final int INTAG = 2; public static final int INATTR_DOUBLE = 3; public static final int YYINITIAL = 0; public static final int INATTR_SINGLE = 4; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\5\1\7\1\0\1\3\23\0\1\5\1\14\1\12\1\10"+ "\1\21\1\14\1\14\1\16\5\14\1\2\1\33\1\13\12\20\1\15"+ "\1\14\1\4\1\53\1\6\2\14\1\34\1\41\1\35\1\40\1\31"+ "\1\26\1\43\1\22\1\27\1\17\1\51\1\30\1\46\1\36\1\37"+ "\1\24\1\50\1\44\1\25\1\23\1\45\1\47\1\32\1\52\1\42"+ "\1\17\1\14\1\11\1\14\1\0\1\1\1\0\1\34\1\41\1\35"+ "\1\40\1\31\1\55\1\43\1\54\1\27\1\17\1\51\1\30\1\46"+ "\1\36\1\37\1\24\1\50\1\44\1\25\1\23\1\45\1\47\1\56"+ "\1\52\1\42\1\17\3\0\1\14\uff81\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\3\0\2\1\1\2\1\3\1\2\1\3\1\4\1\5"+ "\21\2\1\1\1\6\6\1\2\7\1\10\1\11\1\12"+ "\1\13\1\1\1\14\1\1\1\15\1\0\2\16\44\2"+ "\4\1\4\0\1\17\1\16\1\20\1\16\1\21\56\2"+ "\4\1\4\0\62\2\1\22\13\2\3\1\1\23\2\0"+ "\104\2\1\1\2\0\1\22\12\2\1\22\31\2\1\22"+ "\146\2\1\22\60\2\1\22\33\2\1\22\47\2\1\22"+ "\225\2\1\22\33\2\1\22\102\2\1\22\1\2"; private static int [] zzUnpackAction() { int [] result = new int[795]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\57\0\136\0\215\0\274\0\353\0\u011a\0\u0149"+ "\0\u0178\0\u01a7\0\u01a7\0\u01d6\0\u0205\0\u0234\0\u0263\0\u0292"+ "\0\u02c1\0\u02f0\0\u031f\0\u034e\0\u037d\0\u03ac\0\u03db\0\u040a"+ "\0\u0439\0\u0468\0\u0497\0\u04c6\0\u04f5\0\u01a7\0\u0524\0\u0553"+ "\0\u0582\0\u05b1\0\u05e0\0\u060f\0\u063e\0\u066d\0\u01a7\0\u01a7"+ "\0\u01a7\0\u01a7\0\u069c\0\u01a7\0\u06cb\0\u06fa\0\u0729\0\u0758"+ "\0\u0787\0\u07b6\0\u07e5\0\u0814\0\u0843\0\u0872\0\u08a1\0\u08d0"+ "\0\u08ff\0\u092e\0\u095d\0\u098c\0\u09bb\0\u09ea\0\u0a19\0\u0a48"+ "\0\u0a77\0\u0aa6\0\u0ad5\0\u0b04\0\u0b33\0\u0b62\0\u0b91\0\u0bc0"+ "\0\u0bef\0\u0c1e\0\u0c4d\0\u0c7c\0\u0cab\0\u0cda\0\u0d09\0\u0d38"+ "\0\u0d67\0\u0d96\0\u0dc5\0\u0df4\0\u0e23\0\u0e52\0\u0e81\0\u0eb0"+ "\0\u0edf\0\u0f0e\0\u0f3d\0\u0f6c\0\u0f9b\0\u0fca\0\u0ff9\0\u01a7"+ "\0\u1028\0\u01a7\0\u1057\0\u1086\0\u10b5\0\u10e4\0\u1113\0\u1142"+ "\0\u1171\0\u11a0\0\u11cf\0\u11fe\0\u122d\0\u125c\0\u128b\0\u12ba"+ "\0\u12e9\0\u1318\0\u1347\0\u1376\0\u13a5\0\u13d4\0\u1403\0\u1432"+ "\0\u1461\0\u1490\0\u14bf\0\u14ee\0\u151d\0\u154c\0\u157b\0\u15aa"+ "\0\u15d9\0\u1608\0\u1637\0\u1666\0\u1695\0\u16c4\0\u16f3\0\u1722"+ "\0\u1751\0\u1780\0\u17af\0\u17de\0\u180d\0\u183c\0\u186b\0\u189a"+ "\0\u18c9\0\u18f8\0\u1927\0\u1956\0\u1985\0\u19b4\0\u19e3\0\u1a12"+ "\0\u1a41\0\u1a70\0\u1a9f\0\u1ace\0\u1afd\0\u1b2c\0\u1b5b\0\u1b8a"+ "\0\u1bb9\0\u1be8\0\u1c17\0\u1c46\0\u1c75\0\u1ca4\0\u1cd3\0\u1d02"+ "\0\u1d31\0\u1d60\0\u1d8f\0\u1dbe\0\u1ded\0\u1e1c\0\u1e4b\0\u1e7a"+ "\0\u1ea9\0\u1ed8\0\u1f07\0\u1f36\0\u1f65\0\u1f94\0\u1fc3\0\u1ff2"+ "\0\u2021\0\u2050\0\u207f\0\u20ae\0\u20dd\0\u210c\0\u213b\0\u216a"+ "\0\u2199\0\u21c8\0\u21f7\0\u2226\0\u2255\0\u2284\0\u22b3\0\u22e2"+ "\0\u2311\0\u2340\0\353\0\u236f\0\u239e\0\u23cd\0\u23fc\0\u242b"+ "\0\u245a\0\u2489\0\u24b8\0\u24e7\0\u2516\0\u2545\0\u2574\0\u25a3"+ "\0\u25d2\0\u2601\0\u2630\0\u265f\0\u268e\0\u26bd\0\u26ec\0\u271b"+ "\0\u274a\0\u2779\0\u27a8\0\u27d7\0\u2806\0\u2835\0\u2864\0\u2893"+ "\0\u28c2\0\u28f1\0\u2920\0\u294f\0\u297e\0\u29ad\0\u29dc\0\u2a0b"+ "\0\u2a3a\0\u2a69\0\u2a98\0\u2ac7\0\u2af6\0\u2b25\0\u2b54\0\u2b83"+ "\0\u2bb2\0\u2be1\0\u2c10\0\u2c3f\0\u2c6e\0\u2c9d\0\u2ccc\0\u2cfb"+ "\0\u2d2a\0\u2d59\0\u2d88\0\u2db7\0\u2de6\0\u2e15\0\u2e44\0\u2e73"+ "\0\u2ea2\0\u2ed1\0\u2f00\0\u2f2f\0\u2f5e\0\u2f8d\0\u2fbc\0\u2feb"+ "\0\u301a\0\u3049\0\u3078\0\u30a7\0\u30d6\0\u3105\0\u3134\0\u3163"+ "\0\u3192\0\u31c1\0\u31f0\0\u321f\0\u324e\0\u327d\0\u32ac\0\u32db"+ "\0\u330a\0\u2601\0\u3339\0\u3368\0\u3397\0\u33c6\0\u33f5\0\u3424"+ "\0\u3453\0\u3482\0\u34b1\0\u34e0\0\u350f\0\u353e\0\u356d\0\u359c"+ "\0\u35cb\0\u35fa\0\u3629\0\u3658\0\u3687\0\u36b6\0\u36e5\0\u3714"+ "\0\u3743\0\u3772\0\u37a1\0\u37d0\0\u37ff\0\u382e\0\u385d\0\u388c"+ "\0\u38bb\0\u38ea\0\u3919\0\u3948\0\u3977\0\u39a6\0\u39d5\0\u3a04"+ "\0\u3a33\0\u3a62\0\u3a91\0\u3ac0\0\u3aef\0\u3b1e\0\u3b4d\0\u3b7c"+ "\0\u3bab\0\u3bda\0\u3c09\0\u3c38\0\u3c67\0\u3c96\0\u3cc5\0\u3cf4"+ "\0\u3d23\0\u3d52\0\u3d81\0\u3db0\0\u3ddf\0\u3e0e\0\u3e3d\0\u3e6c"+ "\0\u3368\0\u3e9b\0\u3eca\0\u3ef9\0\u3f28\0\u3f57\0\u3f86\0\u3fb5"+ "\0\u3fe4\0\u4013\0\u4042\0\u4071\0\u40a0\0\u40cf\0\u40fe\0\u412d"+ "\0\u415c\0\u418b\0\u41ba\0\u41e9\0\u4218\0\u4247\0\u4276\0\u42a5"+ "\0\u42d4\0\u4303\0\u4332\0\u4361\0\u4390\0\u43bf\0\u43ee\0\u441d"+ "\0\u444c\0\u447b\0\u44aa\0\u44d9\0\u4508\0\u4537\0\u4566\0\u4595"+ "\0\u45c4\0\u45f3\0\u4622\0\u4651\0\u4680\0\u46af\0\u46de\0\u470d"+ "\0\u473c\0\u476b\0\u479a\0\u47c9\0\u47f8\0\u4827\0\u4856\0\u4885"+ "\0\u48b4\0\u48e3\0\u4912\0\u4941\0\u4970\0\u499f\0\u49ce\0\u49fd"+ "\0\u4a2c\0\u4a5b\0\u4a8a\0\u4ab9\0\u4ae8\0\u4b17\0\u4b46\0\u4b75"+ "\0\u4ba4\0\u4bd3\0\u4c02\0\u4c31\0\u4c60\0\u4c8f\0\u4cbe\0\u4ced"+ "\0\u4d1c\0\u4d4b\0\u4d7a\0\u4da9\0\u4dd8\0\u4e07\0\u4e36\0\u4e65"+ "\0\u4e94\0\u4ec3\0\u4ef2\0\u4f21\0\u4f50\0\u4f7f\0\u4fae\0\u4fdd"+ "\0\u500c\0\u503b\0\u506a\0\u5099\0\u50c8\0\u50f7\0\u5126\0\u5155"+ "\0\u5184\0\u51b3\0\u51e2\0\u5211\0\u5240\0\u526f\0\u529e\0\u52cd"+ "\0\u52fc\0\u532b\0\u535a\0\u5389\0\u53b8\0\u53e7\0\u5416\0\u5445"+ "\0\u5474\0\u54a3\0\u54d2\0\u5501\0\u5530\0\u555f\0\u558e\0\u55bd"+ "\0\u55ec\0\u561b\0\u564a\0\u5679\0\u56a8\0\u56d7\0\u5706\0\u5735"+ "\0\u5764\0\u5793\0\u57c2\0\u57f1\0\u5820\0\u584f\0\u587e\0\u58ad"+ "\0\u58dc\0\u590b\0\u593a\0\u5969\0\u5998\0\u59c7\0\u59f6\0\u5a25"+ "\0\u5a54\0\u5a83\0\u5ab2\0\u5ae1\0\u5b10\0\u5b3f\0\u5b6e\0\u5b9d"+ "\0\u5bcc\0\u5bfb\0\u5c2a\0\u5c59\0\u5c88\0\u5cb7\0\u5ce6\0\u5d15"+ "\0\u5d44\0\u5d73\0\u5da2\0\u5dd1\0\u5e00\0\u5e2f\0\u5e5e\0\u5e8d"+ "\0\u5ebc\0\u5eeb\0\u5f1a\0\u5f49\0\u5f78\0\u5fa7\0\u5fd6\0\u6005"+ "\0\u6034\0\u6063\0\u6092\0\u60c1\0\u60f0\0\u611f\0\u614e\0\u617d"+ "\0\u61ac\0\u61db\0\u620a\0\u6239\0\u6268\0\u6297\0\u62c6\0\u62f5"+ "\0\u6324\0\u6353\0\u6382\0\u63b1\0\u63e0\0\u640f\0\u643e\0\u646d"+ "\0\u649c\0\u64cb\0\u64fa\0\u6529\0\u6558\0\u6587\0\u65b6\0\u65e5"+ "\0\u6614\0\u6643\0\u6672\0\u66a1\0\u66d0\0\u66ff\0\u672e\0\u675d"+ "\0\u678c\0\u67bb\0\u67ea\0\u6819\0\u6848\0\u6877\0\u68a6\0\u68d5"+ "\0\u6904\0\u6933\0\u6962\0\u6991\0\u69c0\0\u69ef\0\u6a1e\0\u6a4d"+ "\0\u6a7c\0\u6aab\0\u6ada\0\u6b09\0\u6b38\0\u6b67\0\u6b96\0\u6bc5"+ "\0\u6bf4\0\u6c23\0\u6c52\0\u6c81\0\u6cb0\0\u6cdf\0\u6d0e\0\u6d3d"+ "\0\u6d6c\0\u6d9b\0\u6dca\0\u6df9\0\u6e28\0\u6e57\0\u6e86\0\u6eb5"+ "\0\u6ee4\0\u6f13\0\u6f42\0\u6f71\0\u6fa0\0\u6fcf\0\u6ffe\0\u702d"+ "\0\u705c\0\u708b\0\u70ba\0\u70e9\0\u7118\0\u7147\0\u7176\0\u71a5"+ "\0\u71d4\0\u7203\0\u7232\0\u7261\0\u7290\0\u72bf\0\u72ee\0\u731d"+ "\0\u734c\0\u737b\0\u73aa\0\u73d9\0\u7408\0\u7437\0\u7466\0\u7495"+ "\0\u74c4\0\u74f3\0\u7522\0\u7551\0\u7580\0\u75af\0\u75de\0\u760d"+ "\0\u763c\0\u766b\0\u769a\0\u76c9\0\u76f8\0\u7727\0\u7756\0\u7785"+ "\0\u77b4\0\u77e3\0\u7812\0\u7841\0\u7870\0\u789f\0\u78ce\0\u78fd"+ "\0\u792c\0\u795b\0\u798a\0\u79b9\0\u79e8\0\u7a17\0\u7a46\0\u7a75"+ "\0\u7aa4\0\u7ad3\0\u7b02\0\u7b31\0\u7b60\0\u7b8f\0\u7bbe\0\u7bed"+ "\0\u7c1c\0\u7c4b\0\u7c7a\0\u7ca9\0\u7cd8\0\u7d07\0\u7d36\0\u7d65"+ "\0\u7d94\0\u7dc3\0\u7df2\0\u7e21\0\u7e50\0\u7e7f\0\u7eae\0\u7edd"+ "\0\u7f0c\0\u7f3b\0\u7f6a\0\u7f99\0\u7fc8\0\u7ff7\0\u8026\0\u8055"+ "\0\u8084\0\u80b3\0\u80e2\0\u8111\0\u8140\0\u816f\0\u819e\0\u81cd"+ "\0\u81fc\0\u822b\0\u825a\0\u8289\0\u82b8\0\u82e7\0\u8316\0\u8345"+ "\0\u8374\0\u83a3\0\u83d2\0\u8401\0\u8430\0\u845f\0\u848e\0\u84bd"+ "\0\u84ec\0\u851b\0\u854a\0\u8579\0\u85a8\0\u85d7\0\u8606\0\u8635"+ "\0\u8664\0\u8693\0\u86c2\0\u86f1\0\u8720\0\u874f\0\u877e\0\u87ad"+ "\0\u87dc\0\u880b\0\u883a\0\u8869\0\u8898\0\u88c7\0\u88f6\0\u8925"+ "\0\u8954\0\u8983\0\u89b2\0\u89e1\0\u8a10\0\u8a3f\0\u8a6e\0\u8a9d"+ "\0\u8acc\0\u8afb\0\u8b2a\0\u8b59\0\u8b88\0\u8bb7\0\u8be6\0\u8c15"+ "\0\u8c44\0\u8c73\0\u8ca2\0\u8cd1\0\u8d00\0\u8d2f\0\u8d5e\0\u8d8d"+ "\0\u8dbc\0\u8deb\0\u8e1a\0\u8e49\0\u8e78\0\u8ea7\0\u8ed6\0\u8f05"+ "\0\u8f34\0\u8b2a\0\u8f63"; private static int [] zzUnpackRowMap() { int [] result = new int[795]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\3\6\1\7\1\10\1\11\1\6\1\12\1\13\1\6"+ "\1\14\7\6\1\15\1\6\1\16\1\17\1\20\1\21"+ "\1\22\1\23\2\6\1\24\1\25\1\6\1\26\1\27"+ "\1\30\2\6\1\31\1\32\1\33\3\6\1\34\1\6"+ "\1\15\1\20\1\6\7\35\1\36\12\35\1\37\3\35"+ "\1\40\3\35\1\41\21\35\1\42\1\43\1\44\3\45"+ "\1\46\1\45\1\11\1\47\1\0\2\45\1\50\3\45"+ "\1\51\34\45\1\52\3\45\12\53\1\54\44\53\16\55"+ "\1\54\40\55\4\6\2\0\1\6\2\0\51\6\1\7"+ "\1\0\1\11\1\6\2\0\46\6\1\0\1\56\11\0"+ "\1\57\1\0\1\56\1\0\1\56\2\0\11\56\1\0"+ "\17\56\1\0\3\56\3\0\1\11\1\0\1\11\130\0"+ "\4\14\2\60\1\14\1\61\1\60\1\62\1\6\44\14"+ "\4\6\2\0\1\6\2\0\20\6\1\63\31\6\2\0"+ "\1\6\2\0\23\6\1\64\26\6\2\0\1\6\2\0"+ "\14\6\1\65\3\6\1\66\2\6\1\67\1\70\25\6"+ "\2\0\1\6\2\0\16\6\1\71\7\6\1\72\23\6"+ "\2\0\1\6\2\0\14\6\1\73\10\6\1\74\7\6"+ "\1\75\14\6\2\0\1\6\2\0\16\6\1\76\4\6"+ "\1\77\26\6\2\0\1\6\2\0\25\6\1\100\5\6"+ "\1\101\5\6\1\102\10\6\2\0\1\6\2\0\17\6"+ "\1\103\4\6\1\104\1\105\1\6\1\106\4\6\1\107"+ "\15\6\2\0\1\6\2\0\11\6\1\110\14\6\1\111"+ "\3\6\1\112\10\6\1\110\6\6\2\0\1\6\2\0"+ "\13\6\1\113\17\6\1\114\16\6\2\0\1\6\2\0"+ "\16\6\1\115\1\6\1\116\31\6\2\0\1\6\2\0"+ "\33\6\1\117\16\6\2\0\1\6\2\0\17\6\1\120"+ "\1\121\31\6\2\0\1\6\2\0\25\6\1\122\24\6"+ "\2\0\1\6\2\0\20\6\1\123\13\6\1\124\15\6"+ "\2\0\1\6\2\0\30\6\1\125\15\6\7\35\1\0"+ "\44\35\3\0\7\35\1\0\13\35\1\126\30\35\3\0"+ "\7\35\1\0\13\35\1\127\3\35\1\130\24\35\3\0"+ "\7\35\1\0\22\35\1\131\21\35\2\0\1\132\23\0"+ "\1\133\56\0\1\134\3\0\1\135\61\0\1\132\23\0"+ "\1\132\5\45\3\0\2\45\1\0\3\45\1\0\34\45"+ "\1\0\6\45\1\46\1\45\1\11\2\0\2\45\1\0"+ "\3\45\1\0\34\45\1\0\3\45\12\53\1\0\44\53"+ "\16\55\1\0\40\55\1\0\2\56\12\0\1\56\1\0"+ "\2\56\1\0\31\56\1\0\3\56\1\0\1\136\13\0"+ "\1\136\1\0\1\136\2\0\11\136\1\0\17\136\1\0"+ "\3\136\7\60\1\61\1\60\1\137\1\140\44\60\11\61"+ "\1\141\1\142\44\61\4\14\2\60\1\14\1\0\1\60"+ "\46\14\4\6\2\0\1\6\2\0\23\6\1\143\26\6"+ "\2\0\1\6\2\0\14\6\1\144\35\6\2\0\1\6"+ "\2\0\16\6\1\145\1\146\32\6\2\0\1\6\2\0"+ "\12\6\1\147\20\6\1\150\16\6\2\0\1\6\2\0"+ "\12\6\1\151\37\6\2\0\1\6\2\0\33\6\1\152"+ "\16\6\2\0\1\6\2\0\17\6\1\153\32\6\2\0"+ "\1\6\2\0\33\6\1\154\16\6\2\0\1\6\2\0"+ "\23\6\1\155\26\6\2\0\1\6\2\0\27\6\1\156"+ "\22\6\2\0\1\6\2\0\23\6\1\157\26\6\2\0"+ "\1\6\2\0\35\6\1\160\14\6\2\0\1\6\2\0"+ "\25\6\1\161\24\6\2\0\1\6\2\0\23\6\1\162"+ "\26\6\2\0\1\6\2\0\33\6\1\163\16\6\2\0"+ "\1\6\2\0\13\6\1\164\7\6\1\165\26\6\2\0"+ "\1\6\2\0\17\6\1\166\32\6\2\0\1\6\2\0"+ "\12\6\1\167\11\6\1\170\25\6\2\0\1\6\2\0"+ "\26\6\1\171\23\6\2\0\1\6\2\0\27\6\1\172"+ "\22\6\2\0\1\6\2\0\12\6\1\173\37\6\2\0"+ "\1\6\2\0\20\6\1\174\2\6\1\175\26\6\2\0"+ "\1\6\2\0\25\6\1\176\1\177\23\6\2\0\1\6"+ "\2\0\16\6\1\200\33\6\2\0\1\6\2\0\12\6"+ "\1\201\37\6\2\0\1\6\2\0\27\6\1\202\22\6"+ "\2\0\1\6\2\0\33\6\1\203\16\6\2\0\1\6"+ "\2\0\15\6\1\204\7\6\1\205\16\6\1\204\5\6"+ "\2\0\1\6\2\0\26\6\1\206\23\6\2\0\1\6"+ "\2\0\16\6\1\207\33\6\2\0\1\6\2\0\21\6"+ "\1\210\1\6\1\211\3\6\1\212\5\6\1\213\1\6"+ "\1\214\5\6\1\210\4\6\2\0\1\6\2\0\14\6"+ "\1\215\35\6\2\0\1\6\2\0\12\6\1\216\37\6"+ "\2\0\1\6\2\0\17\6\1\217\32\6\2\0\1\6"+ "\2\0\16\6\1\220\27\6\7\35\1\0\13\35\1\221"+ "\30\35\3\0\7\35\1\0\14\35\1\222\27\35\3\0"+ "\7\35\1\0\20\35\1\223\23\35\3\0\7\35\1\0"+ "\22\35\1\224\21\35\2\0\1\225\32\0\1\225\23\0"+ "\1\225\23\0\1\226\57\0\1\227\62\0\1\230\27\0"+ "\2\136\12\0\1\136\1\0\2\136\1\0\31\136\1\0"+ "\3\136\7\60\1\0\47\60\7\61\1\0\47\61\4\6"+ "\2\0\1\6\2\0\27\6\1\231\22\6\2\0\1\6"+ "\2\0\14\6\1\232\35\6\2\0\1\6\2\0\12\6"+ "\1\233\5\6\1\234\31\6\2\0\1\6\2\0\13\6"+ "\1\235\10\6\1\236\1\6\1\237\4\6\1\240\1\241"+ "\1\6\1\242\13\6\2\0\1\6\2\0\11\6\1\243"+ "\4\6\1\244\1\6\1\245\5\6\1\246\14\6\1\243"+ "\6\6\2\0\1\6\2\0\36\6\1\247\13\6\2\0"+ "\1\6\2\0\16\6\1\250\33\6\2\0\1\6\2\0"+ "\16\6\1\251\33\6\2\0\1\6\2\0\20\6\1\252"+ "\31\6\2\0\1\6\2\0\24\6\1\253\25\6\2\0"+ "\1\6\2\0\13\6\1\254\36\6\2\0\1\6\2\0"+ "\20\6\1\255\31\6\2\0\1\6\2\0\13\6\1\256"+ "\36\6\2\0\1\6\2\0\16\6\1\257\33\6\2\0"+ "\1\6\2\0\32\6\1\260\17\6\2\0\1\6\2\0"+ "\30\6\1\261\21\6\2\0\1\6\2\0\26\6\1\262"+ "\23\6\2\0\1\6\2\0\16\6\1\263\33\6\2\0"+ "\1\6\2\0\35\6\1\264\14\6\2\0\1\6\2\0"+ "\26\6\1\265\23\6\2\0\1\6\2\0\16\6\1\266"+ "\33\6\2\0\1\6\2\0\20\6\1\267\31\6\2\0"+ "\1\6\2\0\25\6\1\270\24\6\2\0\1\6\2\0"+ "\11\6\1\243\1\271\3\6\1\272\1\273\1\274\2\6"+ "\1\275\1\276\1\6\1\277\1\300\13\6\1\243\6\6"+ "\2\0\1\6\2\0\11\6\1\301\31\6\1\301\6\6"+ "\2\0\1\6\2\0\24\6\1\302\25\6\2\0\1\6"+ "\2\0\33\6\1\303\16\6\2\0\1\6\2\0\12\6"+ "\1\304\37\6\2\0\1\6\2\0\40\6\1\305\11\6"+ "\2\0\1\6\2\0\35\6\1\306\14\6\2\0\1\6"+ "\2\0\16\6\1\307\33\6\2\0\1\6\2\0\20\6"+ "\1\310\31\6\2\0\1\6\2\0\20\6\1\311\31\6"+ "\2\0\1\6\2\0\23\6\1\312\26\6\2\0\1\6"+ "\2\0\31\6\1\313\20\6\2\0\1\6\2\0\21\6"+ "\1\314\23\6\1\314\4\6\2\0\1\6\2\0\35\6"+ "\1\315\14\6\2\0\1\6\2\0\33\6\1\316\16\6"+ "\2\0\1\6\2\0\27\6\1\317\22\6\2\0\1\6"+ "\2\0\16\6\1\320\33\6\2\0\1\6\2\0\26\6"+ "\1\321\23\6\2\0\1\6\2\0\34\6\1\322\15\6"+ "\2\0\1\6\2\0\20\6\1\323\31\6\2\0\1\6"+ "\2\0\23\6\1\324\26\6\2\0\1\6\2\0\12\6"+ "\1\325\37\6\2\0\1\6\2\0\12\6\1\326\33\6"+ "\7\35\1\0\14\35\1\327\27\35\3\0\7\35\1\0"+ "\5\35\1\330\36\35\3\0\7\35\1\0\21\35\1\222"+ "\22\35\3\0\7\35\1\0\23\35\1\331\20\35\36\0"+ "\1\332\47\0\1\333\47\0\1\334\72\0\1\227\25\0"+ "\4\6\2\0\1\6\2\0\20\6\1\335\31\6\2\0"+ "\1\6\2\0\20\6\1\336\31\6\2\0\1\6\2\0"+ "\16\6\1\337\33\6\2\0\1\6\2\0\33\6\1\340"+ "\16\6\2\0\1\6\2\0\33\6\1\341\16\6\2\0"+ "\1\6\2\0\16\6\1\342\33\6\2\0\1\6\2\0"+ "\13\6\1\113\36\6\2\0\1\6\2\0\20\6\1\343"+ "\31\6\2\0\1\6\2\0\14\6\1\344\35\6\2\0"+ "\1\6\2\0\20\6\1\345\31\6\2\0\1\6\2\0"+ "\23\6\1\346\26\6\2\0\1\6\2\0\25\6\1\347"+ "\24\6\2\0\1\6\2\0\25\6\1\350\24\6\2\0"+ "\1\6\2\0\34\6\1\351\15\6\2\0\1\6\2\0"+ "\20\6\1\352\31\6\2\0\1\6\2\0\14\6\1\353"+ "\35\6\2\0\1\6\2\0\13\6\1\354\36\6\2\0"+ "\1\6\2\0\20\6\1\355\31\6\2\0\1\6\2\0"+ "\20\6\1\356\31\6\2\0\1\6\2\0\16\6\1\357"+ "\33\6\2\0\1\6\2\0\41\6\1\360\10\6\2\0"+ "\1\6\2\0\27\6\1\361\1\362\4\6\1\363\14\6"+ "\2\0\1\6\2\0\12\6\1\364\37\6\2\0\1\6"+ "\2\0\34\6\1\365\15\6\2\0\1\6\2\0\17\6"+ "\1\366\32\6\2\0\1\6\2\0\33\6\1\367\16\6"+ "\2\0\1\6\2\0\33\6\1\370\16\6\2\0\1\6"+ "\2\0\13\6\1\371\36\6\2\0\1\6\2\0\21\6"+ "\1\313\23\6\1\313\4\6\2\0\1\6\2\0\26\6"+ "\1\372\23\6\2\0\1\6\2\0\13\6\1\373\36\6"+ "\2\0\1\6\2\0\31\6\1\374\20\6\2\0\1\6"+ "\2\0\31\6\1\375\20\6\2\0\1\6\2\0\24\6"+ "\1\376\1\347\24\6\2\0\1\6\2\0\23\6\1\377"+ "\26\6\2\0\1\6\2\0\25\6\1\u0100\24\6\2\0"+ "\1\6\2\0\17\6\1\u0101\32\6\2\0\1\6\2\0"+ "\11\6\1\u0102\31\6\1\u0102\6\6\2\0\1\6\2\0"+ "\34\6\1\u0103\15\6\2\0\1\6\2\0\20\6\1\u0104"+ "\31\6\2\0\1\6\2\0\12\6\1\271\4\6\1\u0105"+ "\3\6\1\u0106\1\6\1\u0107\1\6\1\u0108\1\u0109\1\6"+ "\1\u010a\1\6\1\u010b\15\6\2\0\1\6\2\0\40\6"+ "\1\u010c\11\6\2\0\1\6\2\0\14\6\1\u010d\35\6"+ "\2\0\1\6\2\0\20\6\1\u010e\31\6\2\0\1\6"+ "\2\0\16\6\1\u010f\33\6\2\0\1\6\2\0\23\6"+ "\1\u0110\26\6\2\0\1\6\2\0\26\6\1\u0111\23\6"+ "\2\0\1\6\2\0\33\6\1\313\16\6\2\0\1\6"+ "\2\0\24\6\1\u0112\25\6\2\0\1\6\2\0\34\6"+ "\1\u0113\15\6\2\0\1\6\2\0\14\6\1\u0114\35\6"+ "\2\0\1\6\2\0\16\6\1\u0115\33\6\2\0\1\6"+ "\2\0\16\6\1\u0116\33\6\2\0\1\6\2\0\35\6"+ "\1\u0117\14\6\2\0\1\6\2\0\33\6\1\u0118\16\6"+ "\2\0\1\6\2\0\36\6\1\u0119\13\6\2\0\1\6"+ "\2\0\16\6\1\u011a\1\6\1\u011b\31\6\2\0\1\6"+ "\2\0\12\6\1\232\37\6\2\0\1\6\2\0\14\6"+ "\1\u011c\1\u011d\11\6\1\u011e\14\6\1\u011d\5\6\2\0"+ "\1\6\2\0\16\6\1\u011f\33\6\2\0\1\6\2\0"+ "\11\6\1\u0120\31\6\1\u0120\2\6\7\35\1\0\5\35"+ "\1\330\7\35\1\222\26\35\3\0\7\35\1\0\3\35"+ "\1\u0121\40\35\3\0\1\35\2\331\4\35\1\0\1\331"+ "\2\35\41\331\3\332\1\0\2\u0122\5\0\1\u0122\2\0"+ "\1\332\3\u0122\14\332\1\u0122\17\332\1\u0122\3\332\15\0"+ "\1\334\7\0\1\227\44\0\1\u0123\43\0\4\6\2\0"+ "\1\6\2\0\33\6\1\u0124\16\6\2\0\1\6\2\0"+ "\25\6\1\u0125\24\6\2\0\1\6\2\0\35\6\1\u0126"+ "\14\6\2\0\1\6\2\0\33\6\1\u0127\16\6\2\0"+ "\1\6\2\0\26\6\1\u0128\23\6\2\0\1\6\2\0"+ "\13\6\1\u0129\36\6\2\0\1\6\2\0\37\6\1\u012a"+ "\12\6\2\0\1\6\2\0\20\6\1\u012b\31\6\2\0"+ "\1\6\2\0\33\6\1\u012c\16\6\2\0\1\6\2\0"+ "\25\6\1\u012d\24\6\2\0\1\6\2\0\13\6\1\u012e"+ "\36\6\2\0\1\6\2\0\36\6\1\u012f\13\6\2\0"+ "\1\6\2\0\12\6\1\347\37\6\2\0\1\6\2\0"+ "\33\6\1\u0130\16\6\2\0\1\6\2\0\15\6\1\205"+ "\26\6\1\205\5\6\2\0\1\6\2\0\12\6\1\u0131"+ "\37\6\2\0\1\6\2\0\12\6\1\u0132\37\6\2\0"+ "\1\6\2\0\12\6\1\271\4\6\1\u0133\32\6\2\0"+ "\1\6\2\0\15\6\1\u0134\1\6\1\u0135\3\6\1\u0136"+ "\7\6\1\u0137\10\6\1\u0134\5\6\2\0\1\6\2\0"+ "\16\6\1\u0138\7\6\1\u0139\23\6\2\0\1\6\2\0"+ "\20\6\1\u013a\31\6\2\0\1\6\2\0\23\6\1\u013b"+ "\26\6\2\0\1\6\2\0\20\6\1\u013c\31\6\2\0"+ "\1\6\2\0\33\6\1\u013d\5\6\1\u013e\10\6\2\0"+ "\1\6\2\0\23\6\1\u013f\26\6\2\0\1\6\2\0"+ "\20\6\1\u0140\31\6\2\0\1\6\2\0\27\6\1\u0141"+ "\22\6\2\0\1\6\2\0\20\6\1\u0142\31\6\2\0"+ "\1\6\2\0\17\6\1\u0143\32\6\2\0\1\6\2\0"+ "\25\6\1\313\24\6\2\0\1\6\2\0\12\6\1\u0144"+ "\37\6\2\0\1\6\2\0\35\6\1\u0145\14\6\2\0"+ "\1\6\2\0\13\6\1\u0143\36\6\2\0\1\6\2\0"+ "\26\6\1\u0146\23\6\2\0\1\6\2\0\25\6\1\u0147"+ "\24\6\2\0\1\6\2\0\24\6\1\u0148\25\6\2\0"+ "\1\6\2\0\12\6\1\u0149\37\6\2\0\1\6\2\0"+ "\23\6\1\u014a\26\6\2\0\1\6\2\0\12\6\1\u014b"+ "\37\6\2\0\1\6\2\0\14\6\1\u014c\1\u014d\26\6"+ "\1\u014d\5\6\2\0\1\6\2\0\27\6\1\u014e\22\6"+ "\2\0\1\6\2\0\34\6\1\u014f\15\6\2\0\1\6"+ "\2\0\23\6\1\u0150\26\6\2\0\1\6\2\0\16\6"+ "\1\u0151\11\6\1\u0152\21\6\2\0\1\6\2\0\23\6"+ "\1\u0153\26\6\2\0\1\6\2\0\33\6\1\u0154\16\6"+ "\2\0\1\6\2\0\14\6\1\u0155\35\6\2\0\1\6"+ "\2\0\14\6\1\u0156\35\6\2\0\1\6\2\0\20\6"+ "\1\u0157\31\6\2\0\1\6\2\0\25\6\1\u0158\24\6"+ "\2\0\1\6\2\0\20\6\1\u0159\31\6\2\0\1\6"+ "\2\0\13\6\1\u015a\36\6\2\0\1\6\2\0\25\6"+ "\1\u015b\24\6\2\0\1\6\2\0\12\6\1\u015c\37\6"+ "\2\0\1\6\2\0\17\6\1\u015d\32\6\2\0\1\6"+ "\2\0\20\6\1\u015e\31\6\2\0\1\6\2\0\12\6"+ "\1\u015f\37\6\2\0\1\6\2\0\12\6\1\u0160\37\6"+ "\2\0\1\6\2\0\20\6\1\u0161\31\6\2\0\1\6"+ "\2\0\20\6\1\u0162\31\6\2\0\1\6\2\0\20\6"+ "\1\u0163\31\6\2\0\1\6\2\0\33\6\1\u0143\16\6"+ "\2\0\1\6\2\0\14\6\1\u0164\35\6\2\0\1\6"+ "\2\0\34\6\1\u0165\15\6\2\0\1\6\2\0\16\6"+ "\1\u0166\33\6\2\0\1\6\2\0\16\6\1\310\33\6"+ "\2\0\1\6\2\0\36\6\1\u0167\13\6\2\0\1\6"+ "\2\0\23\6\1\u0168\22\6\7\35\1\0\3\35\1\331"+ "\40\35\16\0\1\332\43\0\4\6\2\0\1\6\2\0"+ "\25\6\1\u0107\24\6\2\0\1\6\2\0\36\6\1\313"+ "\13\6\2\0\1\6\2\0\20\6\1\u0169\31\6\2\0"+ "\1\6\2\0\26\6\1\u016a\23\6\2\0\1\6\2\0"+ "\41\6\1\u016b\10\6\2\0\1\6\2\0\11\6\1\u016c"+ "\31\6\1\u016c\6\6\2\0\1\6\2\0\34\6\1\u016d"+ "\15\6\2\0\1\6\2\0\33\6\1\u0161\16\6\2\0"+ "\1\6\2\0\16\6\1\u016e\33\6\2\0\1\6\2\0"+ "\27\6\1\u016f\22\6\2\0\1\6\2\0\34\6\1\u0170"+ "\15\6\2\0\1\6\2\0\16\6\1\u0171\33\6\2\0"+ "\1\6\2\0\14\6\1\u0172\35\6\2\0\1\6\2\0"+ "\16\6\1\u0173\33\6\2\0\1\6\2\0\23\6\1\u0174"+ "\26\6\2\0\1\6\2\0\23\6\1\77\26\6\2\0"+ "\1\6\2\0\23\6\1\u0175\26\6\2\0\1\6\2\0"+ "\26\6\1\u0176\23\6\2\0\1\6\2\0\13\6\1\u0177"+ "\36\6\2\0\1\6\2\0\20\6\1\u0178\31\6\2\0"+ "\1\6\2\0\32\6\1\u0179\17\6\2\0\1\6\2\0"+ "\13\6\1\113\17\6\1\u017a\16\6\2\0\1\6\2\0"+ "\15\6\1\u017b\26\6\1\u017b\5\6\2\0\1\6\2\0"+ "\14\6\1\u0143\35\6\2\0\1\6\2\0\25\6\1\u017c"+ "\24\6\2\0\1\6\2\0\20\6\1\u017d\31\6\2\0"+ "\1\6\2\0\35\6\1\u017e\14\6\2\0\1\6\2\0"+ "\32\6\1\u017f\17\6\2\0\1\6\2\0\14\6\1\u0180"+ "\20\6\1\u0181\14\6\2\0\1\6\2\0\26\6\1\u0182"+ "\23\6\2\0\1\6\2\0\14\6\1\u0183\35\6\2\0"+ "\1\6\2\0\20\6\1\313\31\6\2\0\1\6\2\0"+ "\13\6\1\u0184\36\6\2\0\1\6\2\0\26\6\1\u0185"+ "\23\6\2\0\1\6\2\0\25\6\1\u0149\24\6\2\0"+ "\1\6\2\0\32\6\1\u0186\17\6\2\0\1\6\2\0"+ "\26\6\1\u0187\23\6\2\0\1\6\2\0\30\6\1\u0188"+ "\21\6\2\0\1\6\2\0\33\6\1\u0189\16\6\2\0"+ "\1\6\2\0\13\6\1\u018a\36\6\2\0\1\6\2\0"+ "\24\6\1\u018b\25\6\2\0\1\6\2\0\23\6\1\u018c"+ "\26\6\2\0\1\6\2\0\23\6\1\u018d\26\6\2\0"+ "\1\6\2\0\12\6\1\u018e\37\6\2\0\1\6\2\0"+ "\35\6\1\u0143\14\6\2\0\1\6\2\0\32\6\1\u018f"+ "\17\6\2\0\1\6\2\0\35\6\1\u0190\14\6\2\0"+ "\1\6\2\0\14\6\1\u0191\35\6\2\0\1\6\2\0"+ "\26\6\1\u0192\23\6\2\0\1\6\2\0\20\6\1\u0193"+ "\31\6\2\0\1\6\2\0\13\6\1\u0194\36\6\2\0"+ "\1\6\2\0\12\6\1\u0195\37\6\2\0\1\6\2\0"+ "\12\6\1\u0196\37\6\2\0\1\6\2\0\12\6\1\u0197"+ "\1\6\1\u0198\3\6\1\u0199\4\6\1\u0107\1\6\1\u019a"+ "\22\6\2\0\1\6\2\0\20\6\1\u019b\31\6\2\0"+ "\1\6\2\0\14\6\1\313\35\6\2\0\1\6\2\0"+ "\26\6\1\u019c\23\6\2\0\1\6\2\0\12\6\1\u019d"+ "\37\6\2\0\1\6\2\0\33\6\1\u019e\16\6\2\0"+ "\1\6\2\0\24\6\1\u019f\1\u01a0\7\6\1\u01a1\14\6"+ "\2\0\1\6\2\0\20\6\1\u01a2\31\6\2\0\1\6"+ "\2\0\24\6\1\u01a3\25\6\2\0\1\6\2\0\11\6"+ "\1\243\1\271\3\6\1\244\1\273\1\274\3\6\1\276"+ "\1\6\1\246\14\6\1\243\6\6\2\0\1\6\2\0"+ "\12\6\1\u01a4\37\6\2\0\1\6\2\0\15\6\1\u01a5"+ "\26\6\1\u01a5\5\6\2\0\1\6\2\0\17\6\1\u01a6"+ "\32\6\2\0\1\6\2\0\16\6\1\u01a7\33\6\2\0"+ "\1\6\2\0\24\6\1\u01a8\25\6\2\0\1\6\2\0"+ "\15\6\1\u01a9\26\6\1\u01a9\5\6\2\0\1\6\2\0"+ "\33\6\1\u01aa\16\6\2\0\1\6\2\0\31\6\1\u01ab"+ "\20\6\2\0\1\6\2\0\20\6\1\u01ac\31\6\2\0"+ "\1\6\2\0\16\6\1\u01ad\33\6\2\0\1\6\2\0"+ "\15\6\1\u01ae\26\6\1\u01ae\5\6\2\0\1\6\2\0"+ "\17\6\1\202\32\6\2\0\1\6\2\0\12\6\1\u01af"+ "\37\6\2\0\1\6\2\0\15\6\1\u01b0\26\6\1\u01b0"+ "\5\6\2\0\1\6\2\0\16\6\1\u01b1\33\6\2\0"+ "\1\6\2\0\25\6\1\u01b2\24\6\2\0\1\6\2\0"+ "\32\6\1\313\17\6\2\0\1\6\2\0\40\6\1\u01b3"+ "\11\6\2\0\1\6\2\0\32\6\1\u01b4\17\6\2\0"+ "\1\6\2\0\13\6\1\u01b5\36\6\2\0\1\6\2\0"+ "\23\6\1\u01b6\26\6\2\0\1\6\2\0\25\6\1\u01b7"+ "\24\6\2\0\1\6\2\0\27\6\1\u01b8\22\6\2\0"+ "\1\6\2\0\23\6\1\u01b9\26\6\2\0\1\6\2\0"+ "\34\6\1\313\15\6\2\0\1\6\2\0\37\6\1\u01ba"+ "\12\6\2\0\1\6\2\0\17\6\1\u01bb\32\6\2\0"+ "\1\6\2\0\20\6\1\u01bc\31\6\2\0\1\6\2\0"+ "\20\6\1\u01bd\31\6\2\0\1\6\2\0\35\6\1\u01be"+ "\14\6\2\0\1\6\2\0\24\6\1\u01bf\25\6\2\0"+ "\1\6\2\0\23\6\1\u01c0\3\6\1\361\1\u01c1\21\6"+ "\2\0\1\6\2\0\23\6\1\u01c2\26\6\2\0\1\6"+ "\2\0\34\6\1\u01c3\15\6\2\0\1\6\2\0\34\6"+ "\1\u01c4\15\6\2\0\1\6\2\0\27\6\1\u01c5\22\6"+ "\2\0\1\6\2\0\31\6\1\u01c6\20\6\2\0\1\6"+ "\2\0\14\6\1\u01c7\35\6\2\0\1\6\2\0\34\6"+ "\1\u01c8\15\6\2\0\1\6\2\0\33\6\1\u01c9\16\6"+ "\2\0\1\6\2\0\34\6\1\u01ca\15\6\2\0\1\6"+ "\2\0\13\6\1\u01cb\36\6\2\0\1\6\2\0\11\6"+ "\1\u01cc\31\6\1\u01cc\6\6\2\0\1\6\2\0\20\6"+ "\1\u01cd\31\6\2\0\1\6\2\0\12\6\1\271\10\6"+ "\1\u0106\6\6\1\u010a\1\6\1\u010b\15\6\2\0\1\6"+ "\2\0\16\6\1\u01ce\33\6\2\0\1\6\2\0\34\6"+ "\1\u01cf\15\6\2\0\1\6\2\0\33\6\1\u01d0\16\6"+ "\2\0\1\6\2\0\20\6\1\u01d1\31\6\2\0\1\6"+ "\2\0\14\6\1\u01d2\11\6\1\237\1\361\22\6\2\0"+ "\1\6\2\0\27\6\1\u01d3\22\6\2\0\1\6\2\0"+ "\33\6\1\u01d4\16\6\2\0\1\6\2\0\12\6\1\u01d5"+ "\37\6\2\0\1\6\2\0\41\6\1\u01d6\10\6\2\0"+ "\1\6\2\0\26\6\1\u01d7\23\6\2\0\1\6\2\0"+ "\41\6\1\u01d8\10\6\2\0\1\6\2\0\33\6\1\u01d9"+ "\16\6\2\0\1\6\2\0\12\6\1\271\3\6\1\u01da"+ "\1\273\32\6\2\0\1\6\2\0\35\6\1\u01db\14\6"+ "\2\0\1\6\2\0\13\6\1\u017c\36\6\2\0\1\6"+ "\2\0\13\6\1\u01dc\36\6\2\0\1\6\2\0\20\6"+ "\1\u01dd\31\6\2\0\1\6\2\0\20\6\1\u01de\3\6"+ "\1\u01df\1\6\1\237\1\6\1\362\2\6\1\u01e0\16\6"+ "\2\0\1\6\2\0\12\6\1\u01e1\37\6\2\0\1\6"+ "\2\0\11\6\1\u01e2\31\6\1\u01e2\6\6\2\0\1\6"+ "\2\0\15\6\1\u01e3\26\6\1\u01e3\5\6\2\0\1\6"+ "\2\0\20\6\1\u015b\31\6\2\0\1\6\2\0\20\6"+ "\1\u01e4\31\6\2\0\1\6\2\0\40\6\1\313\11\6"+ "\2\0\1\6\2\0\26\6\1\u01e5\23\6\2\0\1\6"+ "\2\0\35\6\1\u01e6\14\6\2\0\1\6\2\0\24\6"+ "\1\236\11\6\1\u01e7\13\6\2\0\1\6\2\0\33\6"+ "\1\u01e8\16\6\2\0\1\6\2\0\33\6\1\u01e9\16\6"+ "\2\0\1\6\2\0\31\6\1\u01ea\20\6\2\0\1\6"+ "\2\0\15\6\1\u01eb\26\6\1\u01eb\5\6\2\0\1\6"+ "\2\0\25\6\1\u01ec\24\6\2\0\1\6\2\0\32\6"+ "\1\u01ed\17\6\2\0\1\6\2\0\12\6\1\u01ee\37\6"+ "\2\0\1\6\2\0\20\6\1\u01ef\31\6\2\0\1\6"+ "\2\0\25\6\1\u01f0\24\6\2\0\1\6\2\0\20\6"+ "\1\u01f1\31\6\2\0\1\6\2\0\27\6\1\u01f2\22\6"+ "\2\0\1\6\2\0\26\6\1\u011a\23\6\2\0\1\6"+ "\2\0\20\6\1\u01f3\31\6\2\0\1\6\2\0\34\6"+ "\1\u01f4\15\6\2\0\1\6\2\0\34\6\1\u01f5\15\6"+ "\2\0\1\6\2\0\33\6\1\u013d\16\6\2\0\1\6"+ "\2\0\13\6\1\u01f6\36\6\2\0\1\6\2\0\25\6"+ "\1\u01f7\24\6\2\0\1\6\2\0\23\6\1\u01f8\26\6"+ "\2\0\1\6\2\0\34\6\1\u01f9\15\6\2\0\1\6"+ "\2\0\24\6\1\u01fa\25\6\2\0\1\6\2\0\31\6"+ "\1\u01fb\20\6\2\0\1\6\2\0\12\6\1\u01fc\37\6"+ "\2\0\1\6\2\0\14\6\1\u01fd\35\6\2\0\1\6"+ "\2\0\23\6\1\u01fe\26\6\2\0\1\6\2\0\16\6"+ "\1\u01ff\33\6\2\0\1\6\2\0\12\6\1\271\5\6"+ "\1\274\31\6\2\0\1\6\2\0\20\6\1\u0200\31\6"+ "\2\0\1\6\2\0\12\6\1\u0201\37\6\2\0\1\6"+ "\2\0\16\6\1\u0202\33\6\2\0\1\6\2\0\17\6"+ "\1\u0203\32\6\2\0\1\6\2\0\15\6\1\u0204\2\6"+ "\1\u0205\2\6\1\u0106\1\u0206\2\6\1\u0207\1\u0208\1\6"+ "\1\u0209\1\u020a\1\u020b\7\6\1\u0204\5\6\2\0\1\6"+ "\2\0\26\6\1\u020c\23\6\2\0\1\6\2\0\14\6"+ "\1\u020d\35\6\2\0\1\6\2\0\24\6\1\u020e\25\6"+ "\2\0\1\6\2\0\13\6\1\u01d0\36\6\2\0\1\6"+ "\2\0\15\6\1\u020f\26\6\1\u020f\5\6\2\0\1\6"+ "\2\0\17\6\1\u0210\32\6\2\0\1\6\2\0\26\6"+ "\1\u0211\23\6\2\0\1\6\2\0\16\6\1\u0212\33\6"+ "\2\0\1\6\2\0\23\6\1\u0213\26\6\2\0\1\6"+ "\2\0\31\6\1\371\20\6\2\0\1\6\2\0\13\6"+ "\1\u0214\36\6\2\0\1\6\2\0\35\6\1\u0215\14\6"+ "\2\0\1\6\2\0\12\6\1\u0216\37\6\2\0\1\6"+ "\2\0\31\6\1\u0217\20\6\2\0\1\6\2\0\24\6"+ "\1\266\25\6\2\0\1\6\2\0\23\6\1\u0218\26\6"+ "\2\0\1\6\2\0\33\6\1\u0219\16\6\2\0\1\6"+ "\2\0\35\6\1\313\14\6\2\0\1\6\2\0\25\6"+ "\1\u021a\24\6\2\0\1\6\2\0\26\6\1\u021b\23\6"+ "\2\0\1\6\2\0\34\6\1\371\15\6\2\0\1\6"+ "\2\0\12\6\1\u021c\1\u021d\21\6\1\u021e\14\6\2\0"+ "\1\6\2\0\20\6\1\u021f\31\6\2\0\1\6\2\0"+ "\16\6\1\u0220\33\6\2\0\1\6\2\0\21\6\1\u0221"+ "\23\6\1\u0221\4\6\2\0\1\6\2\0\33\6\1\u0222"+ "\16\6\2\0\1\6\2\0\14\6\1\u0174\35\6\2\0"+ "\1\6\2\0\20\6\1\u0223\31\6\2\0\1\6\2\0"+ "\14\6\1\u0224\35\6\2\0\1\6\2\0\20\6\1\u0225"+ "\31\6\2\0\1\6\2\0\24\6\1\u0226\2\6\1\u0227"+ "\22\6\2\0\1\6\2\0\16\6\1\u0228\33\6\2\0"+ "\1\6\2\0\26\6\1\u0229\23\6\2\0\1\6\2\0"+ "\25\6\1\u022a\24\6\2\0\1\6\2\0\20\6\1\u022b"+ "\31\6\2\0\1\6\2\0\23\6\1\u022c\26\6\2\0"+ "\1\6\2\0\26\6\1\u022d\23\6\2\0\1\6\2\0"+ "\25\6\1\u022e\24\6\2\0\1\6\2\0\23\6\1\u022f"+ "\26\6\2\0\1\6\2\0\33\6\1\u0230\16\6\2\0"+ "\1\6\2\0\17\6\1\u0200\32\6\2\0\1\6\2\0"+ "\20\6\1\u0231\31\6\2\0\1\6\2\0\33\6\1\u0232"+ "\16\6\2\0\1\6\2\0\27\6\1\u01d0\22\6\2\0"+ "\1\6\2\0\13\6\1\313\36\6\2\0\1\6\2\0"+ "\35\6\1\u0233\14\6\2\0\1\6\2\0\12\6\1\u0234"+ "\37\6\2\0\1\6\2\0\12\6\1\271\37\6\2\0"+ "\1\6\2\0\11\6\1\u0235\31\6\1\u0235\3\6\1\u0236"+ "\2\6\2\0\1\6\2\0\52\6\2\0\1\6\2\0"+ "\32\6\1\u0143\17\6\2\0\1\6\2\0\25\6\1\u0174"+ "\24\6\2\0\1\6\2\0\12\6\1\313\37\6\2\0"+ "\1\6\2\0\15\6\1\u0237\26\6\1\u0237\5\6\2\0"+ "\1\6\2\0\13\6\1\u0238\36\6\2\0\1\6\2\0"+ "\12\6\1\u0239\37\6\2\0\1\6\2\0\33\6\1\u023a"+ "\16\6\2\0\1\6\2\0\25\6\1\u023b\24\6\2\0"+ "\1\6\2\0\26\6\1\u023c\23\6\2\0\1\6\2\0"+ "\20\6\1\u023d\31\6\2\0\1\6\2\0\16\6\1\u023e"+ "\33\6\2\0\1\6\2\0\33\6\1\u023f\16\6\2\0"+ "\1\6\2\0\20\6\1\u0240\31\6\2\0\1\6\2\0"+ "\33\6\1\u0241\16\6\2\0\1\6\2\0\33\6\1\u0242"+ "\16\6\2\0\1\6\2\0\12\6\1\u0243\37\6\2\0"+ "\1\6\2\0\13\6\1\u0244\7\6\1\u0106\26\6\2\0"+ "\1\6\2\0\16\6\1\371\33\6\2\0\1\6\2\0"+ "\17\6\1\u01c5\32\6\2\0\1\6\2\0\34\6\1\u0245"+ "\15\6\2\0\1\6\2\0\32\6\1\u0246\17\6\2\0"+ "\1\6\2\0\24\6\1\u0247\25\6\2\0\1\6\2\0"+ "\16\6\1\u0248\33\6\2\0\1\6\2\0\23\6\1\u0249"+ "\26\6\2\0\1\6\2\0\20\6\1\u024a\31\6\2\0"+ "\1\6\2\0\14\6\1\u024b\1\6\1\u024c\33\6\2\0"+ "\1\6\2\0\12\6\1\u024d\37\6\2\0\1\6\2\0"+ "\26\6\1\u024e\23\6\2\0\1\6\2\0\32\6\1\u024f"+ "\17\6\2\0\1\6\2\0\25\6\1\u0250\24\6\2\0"+ "\1\6\2\0\20\6\1\u0251\31\6\2\0\1\6\2\0"+ "\20\6\1\u0252\31\6\2\0\1\6\2\0\23\6\1\u0253"+ "\26\6\2\0\1\6\2\0\23\6\1\114\26\6\2\0"+ "\1\6\2\0\41\6\1\313\10\6\2\0\1\6\2\0"+ "\14\6\1\u0254\35\6\2\0\1\6\2\0\35\6\1\u0255"+ "\14\6\2\0\1\6\2\0\33\6\1\u0256\16\6\2\0"+ "\1\6\2\0\34\6\1\u0257\15\6\2\0\1\6\2\0"+ "\14\6\1\u0258\35\6\2\0\1\6\2\0\17\6\1\u0259"+ "\32\6\2\0\1\6\2\0\20\6\1\u025a\31\6\2\0"+ "\1\6\2\0\17\6\1\u025b\32\6\2\0\1\6\2\0"+ "\24\6\1\362\25\6\2\0\1\6\2\0\23\6\1\u025c"+ "\26\6\2\0\1\6\2\0\33\6\1\u025d\16\6\2\0"+ "\1\6\2\0\14\6\1\u025e\35\6\2\0\1\6\2\0"+ "\12\6\1\u025f\37\6\2\0\1\6\2\0\27\6\1\u0260"+ "\22\6\2\0\1\6\2\0\11\6\1\u0261\31\6\1\u0261"+ "\6\6\2\0\1\6\2\0\27\6\1\361\22\6\2\0"+ "\1\6\2\0\14\6\1\u0262\35\6\2\0\1\6\2\0"+ "\16\6\1\u0263\33\6\2\0\1\6\2\0\20\6\1\u0264"+ "\31\6\2\0\1\6\2\0\16\6\1\u0265\33\6\2\0"+ "\1\6\2\0\16\6\1\u0266\33\6\2\0\1\6\2\0"+ "\17\6\1\u0267\3\6\1\u0106\1\6\1\u0268\7\6\1\u0269"+ "\1\u026a\13\6\2\0\1\6\2\0\16\6\1\u026b\33\6"+ "\2\0\1\6\2\0\12\6\1\167\37\6\2\0\1\6"+ "\2\0\24\6\1\276\25\6\2\0\1\6\2\0\26\6"+ "\1\u026c\23\6\2\0\1\6\2\0\23\6\1\u026d\26\6"+ "\2\0\1\6\2\0\35\6\1\u026e\14\6\2\0\1\6"+ "\2\0\33\6\1\u026f\16\6\2\0\1\6\2\0\25\6"+ "\1\u0270\24\6\2\0\1\6\2\0\26\6\1\u0271\23\6"+ "\2\0\1\6\2\0\35\6\1\u0272\14\6\2\0\1\6"+ "\2\0\17\6\1\313\32\6\2\0\1\6\2\0\16\6"+ "\1\u0273\33\6\2\0\1\6\2\0\15\6\1\u020f\5\6"+ "\1\u0274\1\6\1\u0275\1\6\1\u019a\2\6\1\u010a\4\6"+ "\1\u0276\4\6\1\u020f\5\6\2\0\1\6\2\0\33\6"+ "\1\u0277\16\6\2\0\1\6\2\0\33\6\1\u0278\16\6"+ "\2\0\1\6\2\0\20\6\1\u0279\31\6\2\0\1\6"+ "\2\0\40\6\1\u01c5\11\6\2\0\1\6\2\0\33\6"+ "\1\u01a6\16\6\2\0\1\6\2\0\16\6\1\372\33\6"+ "\2\0\1\6\2\0\25\6\1\u027a\24\6\2\0\1\6"+ "\2\0\17\6\1\u027b\32\6\2\0\1\6\2\0\25\6"+ "\1\u027c\24\6\2\0\1\6\2\0\24\6\1\u027d\25\6"+ "\2\0\1\6\2\0\24\6\1\313\25\6\2\0\1\6"+ "\2\0\16\6\1\u027e\33\6\2\0\1\6\2\0\27\6"+ "\1\313\22\6\2\0\1\6\2\0\35\6\1\u01f8\14\6"+ "\2\0\1\6\2\0\33\6\1\u027f\16\6\2\0\1\6"+ "\2\0\12\6\1\u0280\37\6\2\0\1\6\2\0\35\6"+ "\1\u021e\14\6\2\0\1\6\2\0\23\6\1\u0200\26\6"+ "\2\0\1\6\2\0\16\6\1\u0281\33\6\2\0\1\6"+ "\2\0\16\6\1\u0282\33\6\2\0\1\6\2\0\14\6"+ "\1\u0241\35\6\2\0\1\6\2\0\16\6\1\u0233\33\6"+ "\2\0\1\6\2\0\13\6\1\u0283\36\6\2\0\1\6"+ "\2\0\12\6\1\202\37\6\2\0\1\6\2\0\12\6"+ "\1\u0284\37\6\2\0\1\6\2\0\13\6\1\u0285\36\6"+ "\2\0\1\6\2\0\31\6\1\u0286\20\6\2\0\1\6"+ "\2\0\14\6\1\u0287\35\6\2\0\1\6\2\0\17\6"+ "\1\u0288\32\6\2\0\1\6\2\0\20\6\1\u0289\31\6"+ "\2\0\1\6\2\0\12\6\1\u028a\37\6\2\0\1\6"+ "\2\0\26\6\1\u028b\23\6\2\0\1\6\2\0\25\6"+ "\1\u0200\24\6\2\0\1\6\2\0\36\6\1\u0143\13\6"+ "\2\0\1\6\2\0\25\6\1\u028c\24\6\2\0\1\6"+ "\2\0\26\6\1\u028d\23\6\2\0\1\6\2\0\26\6"+ "\1\u028e\23\6\2\0\1\6\2\0\34\6\1\u028f\15\6"+ "\2\0\1\6\2\0\20\6\1\u0290\31\6\2\0\1\6"+ "\2\0\17\6\1\u0291\32\6\2\0\1\6\2\0\25\6"+ "\1\u0292\24\6\2\0\1\6\2\0\30\6\1\u0293\21\6"+ "\2\0\1\6\2\0\13\6\1\u0294\36\6\2\0\1\6"+ "\2\0\20\6\1\u0295\31\6\2\0\1\6\2\0\27\6"+ "\1\u0296\22\6\2\0\1\6\2\0\34\6\1\u0297\15\6"+ "\2\0\1\6\2\0\26\6\1\u0298\23\6\2\0\1\6"+ "\2\0\12\6\1\u0299\37\6\2\0\1\6\2\0\17\6"+ "\1\u029a\32\6\2\0\1\6\2\0\26\6\1\u029b\23\6"+ "\2\0\1\6\2\0\26\6\1\u01f8\23\6\2\0\1\6"+ "\2\0\26\6\1\u029c\23\6\2\0\1\6\2\0\24\6"+ "\1\u029d\25\6\2\0\1\6\2\0\14\6\1\u0200\35\6"+ "\2\0\1\6\2\0\14\6\1\167\35\6\2\0\1\6"+ "\2\0\23\6\1\u029e\26\6\2\0\1\6\2\0\27\6"+ "\1\u029f\22\6\2\0\1\6\2\0\11\6\1\u01b0\31\6"+ "\1\u01b0\6\6\2\0\1\6\2\0\25\6\1\u0143\24\6"+ "\2\0\1\6\2\0\35\6\1\u02a0\14\6\2\0\1\6"+ "\2\0\24\6\1\u02a1\25\6\2\0\1\6\2\0\15\6"+ "\1\u02a2\26\6\1\u02a2\5\6\2\0\1\6\2\0\12\6"+ "\1\u0143\37\6\2\0\1\6\2\0\12\6\1\u02a1\37\6"+ "\2\0\1\6\2\0\34\6\1\u011a\15\6\2\0\1\6"+ "\2\0\33\6\1\u02a3\16\6\2\0\1\6\2\0\25\6"+ "\1\u024e\24\6\2\0\1\6\2\0\34\6\1\u02a4\15\6"+ "\2\0\1\6\2\0\26\6\1\u02a5\23\6\2\0\1\6"+ "\2\0\23\6\1\u02a6\26\6\2\0\1\6\2\0\30\6"+ "\1\u02a7\21\6\2\0\1\6\2\0\33\6\1\u02a8\16\6"+ "\2\0\1\6\2\0\15\6\1\u02a9\26\6\1\u02a9\5\6"+ "\2\0\1\6\2\0\32\6\1\u02aa\17\6\2\0\1\6"+ "\2\0\34\6\1\u02ab\15\6\2\0\1\6\2\0\14\6"+ "\1\u02ac\35\6\2\0\1\6\2\0\33\6\1\u02ad\16\6"+ "\2\0\1\6\2\0\12\6\1\u02ae\37\6\2\0\1\6"+ "\2\0\12\6\1\u02af\37\6\2\0\1\6\2\0\17\6"+ "\1\u02b0\32\6\2\0\1\6\2\0\23\6\1\u02b1\26\6"+ "\2\0\1\6\2\0\15\6\1\u02b2\26\6\1\u02b2\5\6"+ "\2\0\1\6\2\0\13\6\1\u02b3\13\6\1\372\22\6"+ "\2\0\1\6\2\0\13\6\1\u02b4\36\6\2\0\1\6"+ "\2\0\12\6\1\u02b5\37\6\2\0\1\6\2\0\23\6"+ "\1\u01fa\26\6\2\0\1\6\2\0\32\6\1\u02b6\17\6"+ "\2\0\1\6\2\0\25\6\1\u02b7\24\6\2\0\1\6"+ "\2\0\36\6\1\u02b8\13\6\2\0\1\6\2\0\20\6"+ "\1\u02b9\31\6\2\0\1\6\2\0\14\6\1\u02a1\35\6"+ "\2\0\1\6\2\0\20\6\1\u0220\31\6\2\0\1\6"+ "\2\0\23\6\1\u02ba\26\6\2\0\1\6\2\0\11\6"+ "\1\313\31\6\1\313\6\6\2\0\1\6\2\0\31\6"+ "\1\u02bb\20\6\2\0\1\6\2\0\20\6\1\u02bc\31\6"+ "\2\0\1\6\2\0\13\6\1\u02bd\36\6\2\0\1\6"+ "\2\0\32\6\1\u02be\17\6\2\0\1\6\2\0\27\6"+ "\1\u02bf\22\6\2\0\1\6\2\0\26\6\1\u02c0\23\6"+ "\2\0\1\6\2\0\16\6\1\u02c1\33\6\2\0\1\6"+ "\2\0\26\6\1\313\23\6\2\0\1\6\2\0\20\6"+ "\1\u02c2\31\6\2\0\1\6\2\0\14\6\1\u02c3\35\6"+ "\2\0\1\6\2\0\12\6\1\u02c4\37\6\2\0\1\6"+ "\2\0\16\6\1\u02c5\33\6\2\0\1\6\2\0\20\6"+ "\1\u02c6\31\6\2\0\1\6\2\0\13\6\1\u02c7\36\6"+ "\2\0\1\6\2\0\20\6\1\u0250\31\6\2\0\1\6"+ "\2\0\33\6\1\u02c8\16\6\2\0\1\6\2\0\20\6"+ "\1\u02c9\31\6\2\0\1\6\2\0\23\6\1\u02ca\26\6"+ "\2\0\1\6\2\0\23\6\1\u02cb\26\6\2\0\1\6"+ "\2\0\20\6\1\u02cc\31\6\2\0\1\6\2\0\26\6"+ "\1\u02cd\23\6\2\0\1\6\2\0\24\6\1\u02ce\25\6"+ "\2\0\1\6\2\0\16\6\1\114\33\6\2\0\1\6"+ "\2\0\20\6\1\u0286\31\6\2\0\1\6\2\0\25\6"+ "\1\u0233\24\6\2\0\1\6\2\0\27\6\1\u0227\22\6"+ "\2\0\1\6\2\0\12\6\1\u02cf\37\6\2\0\1\6"+ "\2\0\13\6\1\u02d0\36\6\2\0\1\6\2\0\12\6"+ "\1\u02d1\37\6\2\0\1\6\2\0\30\6\1\u02d2\21\6"+ "\2\0\1\6\2\0\27\6\1\205\22\6\2\0\1\6"+ "\2\0\12\6\1\205\37\6\2\0\1\6\2\0\35\6"+ "\1\u02d3\14\6\2\0\1\6\2\0\20\6\1\u02d4\31\6"+ "\2\0\1\6\2\0\32\6\1\u02d5\17\6\2\0\1\6"+ "\2\0\15\6\1\u02d6\26\6\1\u02d6\5\6\2\0\1\6"+ "\2\0\33\6\1\u02d7\16\6\2\0\1\6\2\0\23\6"+ "\1\u02d8\26\6\2\0\1\6\2\0\20\6\1\u02d9\31\6"+ "\2\0\1\6\2\0\33\6\1\u02da\16\6\2\0\1\6"+ "\2\0\14\6\1\u02db\35\6\2\0\1\6\2\0\12\6"+ "\1\u02dc\37\6\2\0\1\6\2\0\34\6\1\u02dd\15\6"+ "\2\0\1\6\2\0\33\6\1\u02de\16\6\2\0\1\6"+ "\2\0\20\6\1\u02df\31\6\2\0\1\6\2\0\20\6"+ "\1\u02e0\31\6\2\0\1\6\2\0\26\6\1\u02e1\23\6"+ "\2\0\1\6\2\0\26\6\1\u02e2\23\6\2\0\1\6"+ "\2\0\34\6\1\u02e3\15\6\2\0\1\6\2\0\23\6"+ "\1\u02e4\26\6\2\0\1\6\2\0\33\6\1\u02e5\16\6"+ "\2\0\1\6\2\0\16\6\1\u02e6\33\6\2\0\1\6"+ "\2\0\31\6\1\u02aa\20\6\2\0\1\6\2\0\30\6"+ "\1\u01c1\21\6\2\0\1\6\2\0\32\6\1\u02e7\17\6"+ "\2\0\1\6\2\0\27\6\1\u02e8\22\6\2\0\1\6"+ "\2\0\20\6\1\u02e9\31\6\2\0\1\6\2\0\14\6"+ "\1\u02ea\35\6\2\0\1\6\2\0\12\6\1\u02eb\37\6"+ "\2\0\1\6\2\0\14\6\1\u02ec\35\6\2\0\1\6"+ "\2\0\16\6\1\u02ed\33\6\2\0\1\6\2\0\15\6"+ "\1\u01a9\1\6\1\u02ee\24\6\1\u01a9\5\6\2\0\1\6"+ "\2\0\33\6\1\u02ef\16\6\2\0\1\6\2\0\33\6"+ "\1\u02f0\16\6\2\0\1\6\2\0\20\6\1\u02f1\16\6"+ "\1\u02f2\12\6\2\0\1\6\2\0\15\6\1\u02f3\26\6"+ "\1\u02f3\5\6\2\0\1\6\2\0\16\6\1\u0241\33\6"+ "\2\0\1\6\2\0\16\6\1\u0250\33\6\2\0\1\6"+ "\2\0\36\6\1\u02f4\13\6\2\0\1\6\2\0\20\6"+ "\1\326\31\6\2\0\1\6\2\0\25\6\1\u02f5\24\6"+ "\2\0\1\6\2\0\25\6\1\u02f6\24\6\2\0\1\6"+ "\2\0\21\6\1\u02f7\23\6\1\u02f7\4\6\2\0\1\6"+ "\2\0\33\6\1\u02f8\16\6\2\0\1\6\2\0\20\6"+ "\1\u02f9\31\6\2\0\1\6\2\0\12\6\1\u02fa\37\6"+ "\2\0\1\6\2\0\16\6\1\u02fb\33\6\2\0\1\6"+ "\2\0\14\6\1\u02fc\35\6\2\0\1\6\2\0\12\6"+ "\1\u02b0\37\6\2\0\1\6\2\0\33\6\1\u02fd\16\6"+ "\2\0\1\6\2\0\34\6\1\u02fe\15\6\2\0\1\6"+ "\2\0\15\6\1\202\26\6\1\202\5\6\2\0\1\6"+ "\2\0\20\6\1\u02aa\31\6\2\0\1\6\2\0\26\6"+ "\1\u02ff\23\6\2\0\1\6\2\0\24\6\1\u0300\25\6"+ "\2\0\1\6\2\0\26\6\1\u0301\23\6\2\0\1\6"+ "\2\0\16\6\1\u0302\33\6\2\0\1\6\2\0\33\6"+ "\1\u0303\16\6\2\0\1\6\2\0\11\6\1\u01dd\31\6"+ "\1\u01dd\6\6\2\0\1\6\2\0\15\6\1\u0304\26\6"+ "\1\u0304\5\6\2\0\1\6\2\0\26\6\1\u0305\23\6"+ "\2\0\1\6\2\0\33\6\1\u0306\16\6\2\0\1\6"+ "\2\0\20\6\1\u0307\31\6\2\0\1\6\2\0\25\6"+ "\1\u0308\24\6\2\0\1\6\2\0\20\6\1\u0309\31\6"+ "\2\0\1\6\2\0\33\6\1\u0250\16\6\2\0\1\6"+ "\2\0\30\6\1\u030a\21\6\2\0\1\6\2\0\16\6"+ "\1\u030b\33\6\2\0\1\6\2\0\20\6\1\u030c\31\6"+ "\2\0\1\6\2\0\34\6\1\u030d\15\6\2\0\1\6"+ "\2\0\26\6\1\u030e\23\6\2\0\1\6\2\0\33\6"+ "\1\205\16\6\2\0\1\6\2\0\14\6\1\u030f\35\6"+ "\2\0\1\6\2\0\23\6\1\u0310\26\6\2\0\1\6"+ "\2\0\34\6\1\u0311\15\6\2\0\1\6\2\0\14\6"+ "\1\u0312\35\6\2\0\1\6\2\0\12\6\1\u0313\37\6"+ "\2\0\1\6\2\0\33\6\1\u0314\16\6\2\0\1\6"+ "\2\0\33\6\1\u015b\16\6\2\0\1\6\2\0\20\6"+ "\1\u0315\31\6\2\0\1\6\2\0\17\6\1\u0316\32\6"+ "\2\0\1\6\2\0\12\6\1\u0317\37\6\2\0\1\6"+ "\2\0\27\6\1\372\22\6\2\0\1\6\2\0\16\6"+ "\1\u0150\33\6\2\0\1\6\2\0\24\6\1\u0143\25\6"+ "\2\0\1\6\2\0\33\6\1\u0318\16\6\2\0\1\6"+ "\2\0\16\6\1\u0319\33\6\2\0\1\6\2\0\20\6"+ "\1\u031a\31\6\2\0\1\6\2\0\36\6\1\202\13\6"+ "\2\0\1\6\2\0\23\6\1\u031b\26\6\2\0\1\6"+ "\2\0\14\6\1\u01a6\31\6"; private static int [] zzUnpackTrans() { int [] result = new int[36754]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\3\0\6\1\2\11\22\1\1\11\10\1\4\11\1\1"+ "\1\11\2\1\1\0\52\1\4\0\2\1\1\11\1\1"+ "\1\11\62\1\4\0\102\1\2\0\105\1\2\0\u01f8\1"; private static int [] zzUnpackAttribute() { int [] result = new int[795]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Type specific to HtaccessTokenMaker denoting a line ending with an * unclosed double-quote attribute. */ public static final int INTERNAL_ATTR_DOUBLE = -1; /** * Type specific to HtaccessTokenMaker denoting a line ending with an * unclosed single-quote attribute. */ public static final int INTERNAL_ATTR_SINGLE = -2; /** * Token type specific to HtaccessTokenMaker denoting a line ending with an * unclosed XML tag; thus a new line is beginning still inside of the tag. */ public static final int INTERNAL_INTAG = -3; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public HtaccessTokenMaker() { } /** * Adds the token specified to the current linked list of tokens as an * "end token;" that is, at zzMarkedPos. * * @param tokenType The token's type. */ private void addEndToken(int tokenType) { addToken(zzMarkedPos,zzMarkedPos, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * Returns how to transform a line into a line comment. * * @return The line comment start and end text for .htaccess files. */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "#", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = YYINITIAL; switch (initialTokenType) { case INTERNAL_ATTR_DOUBLE: state = INATTR_DOUBLE; break; case INTERNAL_ATTR_SINGLE: state = INATTR_SINGLE; break; case INTERNAL_INTAG: state = INTAG; break; default: state = YYINITIAL; } start = text.offset; s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public HtaccessTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public HtaccessTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 172) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 12: { yybegin(INTAG); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } case 20: break; case 4: { addNullToken(); return firstToken; } case 21: break; case 15: { int count = yylength(); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-(count-2), zzMarkedPos-1, Token.MARKUP_TAG_NAME); yybegin(INTAG); } case 22: break; case 3: { addToken(Token.WHITESPACE); } case 23: break; case 17: { addToken(Token.ERROR_STRING_DOUBLE); } case 24: break; case 2: { addToken(Token.IDENTIFIER); } case 25: break; case 6: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } case 26: break; case 18: { addToken(Token.FUNCTION); } case 27: break; case 14: { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } case 28: break; case 13: { int count = yylength(); addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-(count-1), zzMarkedPos-1, Token.MARKUP_TAG_NAME); yybegin(INTAG); } case 29: break; case 9: { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE); } case 30: break; case 8: { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } case 31: break; case 16: { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } case 32: break; case 10: { start = zzMarkedPos-1; yybegin(INATTR_SINGLE); } case 33: break; case 19: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } case 34: break; case 5: { start = zzMarkedPos-1; yybegin(EOL_COMMENT); } case 35: break; case 11: { addToken(Token.OPERATOR); } case 36: break; case 7: { addToken(Token.MARKUP_TAG_ATTRIBUTE); } case 37: break; case 1: { } case 38: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case EOL_COMMENT: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } case 796: break; case INTAG: { addToken(start,zzStartRead-1, INTERNAL_INTAG); return firstToken; } case 797: break; case INATTR_DOUBLE: { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; } case 798: break; case YYINITIAL: { addNullToken(); return firstToken; } case 799: break; case INATTR_SINGLE: { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; } case 800: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JSPTokenMaker.flex000066400000000000000000001715231257417003700312360ustar00rootroot00000000000000/* * 02/11/2008 * * JSPTokenMaker.java - Generates tokens for JSP syntax highlighting. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for JSP files (supporting HTML 5). * * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated JSPTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.9 */ %% %public %class JSPTokenMaker %extends AbstractMarkupTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Type specific to JSPTokenMaker denoting a line ending with an unclosed * double-quote attribute. */ private static final int INTERNAL_ATTR_DOUBLE = -1; /** * Type specific to JSPTokenMaker denoting a line ending with an unclosed * single-quote attribute. */ private static final int INTERNAL_ATTR_SINGLE = -2; /** * Token type specific to JSPTokenMaker; this signals that the user has * ended a line with an unclosed HTML tag; thus a new line is beginning * still inside of the tag. */ private static final int INTERNAL_INTAG = -3; /** * Token type specific to JSPTokenMaker; this signals that the user has * ended a line with an unclosed <script> tag. */ private static final int INTERNAL_INTAG_SCRIPT = -4; /** * Token type specifying we're in a double-qouted attribute in a * script tag. */ private static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -5; /** * Token type specifying we're in a single-qouted attribute in a * script tag. */ private static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -6; /** * Token type specifying that the user has * ended a line with an unclosed <style> tag. */ private static final int INTERNAL_INTAG_STYLE = -7; /** * Token type specifying we're in a double-qouted attribute in a * style tag. */ private static final int INTERNAL_ATTR_DOUBLE_QUOTE_STYLE = -8; /** * Token type specifying we're in a single-qouted attribute in a * style tag. */ private static final int INTERNAL_ATTR_SINGLE_QUOTE_STYLE = -9; /** * Token type specifying we're in a JSP hidden comment ("<%-- ... --%>"). */ private static final int INTERNAL_IN_HIDDEN_COMMENT = -10; /** * Token type specifying we're in a JSP directive (either include, page * or taglib). */ private static final int INTERNAL_IN_JSP_DIRECTIVE = -11; /** * Token type specifying we're in JavaScript. */ static final int INTERNAL_IN_JS = -12; /** * Token type specifying we're in a JavaScript multi-line comment. */ private static final int INTERNAL_IN_JS_MLC = -13; /** * Token type specifying we're in an invalid multi-line JS string. */ private static final int INTERNAL_IN_JS_STRING_INVALID = -14; /** * Token type specifying we're in a valid multi-line JS string. */ private static final int INTERNAL_IN_JS_STRING_VALID = -15; /** * Token type specifying we're in an invalid multi-line JS single-quoted string. */ private static final int INTERNAL_IN_JS_CHAR_INVALID = -16; /** * Token type specifying we're in a valid multi-line JS single-quoted string. */ private static final int INTERNAL_IN_JS_CHAR_VALID = -17; /** * Internal type denoting a line ending in CSS. */ private static final int INTERNAL_CSS = -18; /** * Internal type denoting a line ending in a CSS property. */ private static final int INTERNAL_CSS_PROPERTY = -19; /** * Internal type denoting a line ending in a CSS property value. */ private static final int INTERNAL_CSS_VALUE = -20; /** * Internal type denoting line ending in a CSS double-quote string. * The state to return to is embedded in the actual end token type. */ private static final int INTERNAL_CSS_STRING = -(1<<11); /** * Internal type denoting line ending in a CSS single-quote string. * The state to return to is embedded in the actual end token type. */ private static final int INTERNAL_CSS_CHAR = -(2<<11); /** * Internal type denoting line ending in a CSS multi-line comment. * The state to return to is embedded in the actual end token type. */ private static final int INTERNAL_CSS_MLC = -(3<<11); /** * Token type specifying we're in a Java documentation comment. */ private static final int INTERNAL_IN_JAVA_DOCCOMMENT = -(4<<11); /** * Token type specifying we're in Java code. */ static final int INTERNAL_IN_JAVA_EXPRESSION = -(5<<11); /** * Token type specifying we're in Java multiline comment. */ private static final int INTERNAL_IN_JAVA_MLC = -(6<<11); /** * The state previous CSS-related state we were in before going into a CSS * string, multi-line comment, etc. */ private int cssPrevState; /** * The state JSP was started in (YYINITIAL, INTERNAL_IN_JS, etc.). */ private int jspInState; /** * Whether closing markup tags are automatically completed for JSP. */ private static boolean completeCloseTags; /** * When in the JS_STRING state, whether the current string is valid. */ private boolean validJSString; /** * Language state set on HTML tokens. Must be 0. */ private static final int LANG_INDEX_DEFAULT = 0; /** * Language state set on JavaScript tokens. */ private static final int LANG_INDEX_JS = 1; /** * Language state set on CSS tokens. */ private static final int LANG_INDEX_CSS = 2; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public JSPTokenMaker() { super(); } /** * Adds the token specified to the current linked list of tokens as an * "end token;" that is, at zzMarkedPos. * * @param tokenType The token's type. */ private void addEndToken(int tokenType) { addToken(zzMarkedPos,zzMarkedPos, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override protected OccurrenceMarker createOccurrenceMarker() { return new HtmlOccurrenceMarker(); } /** * Sets whether markup close tags should be completed. You might not want * this to be the case, since some tags in standard HTML aren't usually * closed. * * @return Whether closing markup tags are completed. * @see #setCompleteCloseTags(boolean) */ @Override public boolean getCompleteCloseTags() { return completeCloseTags; } @Override public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { return languageIndex==LANG_INDEX_CSS || languageIndex==LANG_INDEX_JS; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { switch (languageIndex) { case LANG_INDEX_JS: return new String[] { "//", null }; case LANG_INDEX_CSS: return new String[] { "/*", "*/" }; default: return new String[] { "" }; } } /** * {@inheritDoc} */ @Override public boolean getMarkOccurrencesOfTokenType(int type) { return type==Token.FUNCTION || type==Token.VARIABLE || type==Token.MARKUP_TAG_NAME; } /** * Overridden to handle newlines in JS and CSS differently than those in * markup. */ @Override public boolean getShouldIndentNextLineAfter(Token token) { int languageIndex = token==null ? 0 : token.getLanguageIndex(); if (getCurlyBracesDenoteCodeBlocks(languageIndex)) { if (token!=null && token.length()==1) { char ch = token.charAt(0); return ch=='{' || ch=='('; } } return false; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; jspInState = YYINITIAL; // Shouldn't be necessary cssPrevState = CSS; // Shouldn't be necessary int languageIndex = 0; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.MARKUP_COMMENT: state = COMMENT; break; case Token.PREPROCESSOR: state = PI; break; case Token.VARIABLE: state = DTD; break; case INTERNAL_INTAG: state = INTAG; break; case INTERNAL_INTAG_SCRIPT: state = INTAG_SCRIPT; break; case INTERNAL_INTAG_STYLE: state = INTAG_STYLE; break; case INTERNAL_ATTR_DOUBLE: state = INATTR_DOUBLE; break; case INTERNAL_ATTR_SINGLE: state = INATTR_SINGLE; break; case INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT: state = INATTR_DOUBLE_SCRIPT; break; case INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT: state = INATTR_SINGLE_SCRIPT; break; case INTERNAL_ATTR_DOUBLE_QUOTE_STYLE: state = INATTR_DOUBLE_STYLE; break; case INTERNAL_ATTR_SINGLE_QUOTE_STYLE: state = INATTR_SINGLE_STYLE; break; case INTERNAL_IN_HIDDEN_COMMENT: state = HIDDEN_COMMENT; break; case INTERNAL_IN_JSP_DIRECTIVE: state = JSP_DIRECTIVE; break; case INTERNAL_IN_JS: state = JAVASCRIPT; languageIndex = LANG_INDEX_JS; break; case INTERNAL_IN_JS_MLC: state = JS_MLC; languageIndex = LANG_INDEX_JS; break; case INTERNAL_IN_JS_STRING_INVALID: state = JS_STRING; languageIndex = LANG_INDEX_JS; validJSString = false; break; case INTERNAL_IN_JS_STRING_VALID: state = JS_STRING; languageIndex = LANG_INDEX_JS; validJSString = true; break; case INTERNAL_IN_JS_CHAR_INVALID: state = JS_CHAR; languageIndex = LANG_INDEX_JS; validJSString = false; break; case INTERNAL_IN_JS_CHAR_VALID: state = JS_CHAR; languageIndex = LANG_INDEX_JS; validJSString = true; break; case INTERNAL_CSS: state = CSS; languageIndex = LANG_INDEX_CSS; break; case INTERNAL_CSS_PROPERTY: state = CSS_PROPERTY; languageIndex = LANG_INDEX_CSS; break; case INTERNAL_CSS_VALUE: state = CSS_VALUE; languageIndex = LANG_INDEX_CSS; break; default: if (initialTokenType<-1024) { // INTERNAL_IN_JAVAxxx - jspInState or // INTERNAL_IN_CSSxxx - cssPrevState int main = -(-initialTokenType & 0xffffff00); switch (main) { default: // Should never happen case INTERNAL_IN_JAVA_DOCCOMMENT: state = JAVA_DOCCOMMENT; jspInState = -initialTokenType&0xff; break; case INTERNAL_IN_JAVA_EXPRESSION: state = JAVA_EXPRESSION; jspInState = -initialTokenType&0xff; break; case INTERNAL_IN_JAVA_MLC: state = JAVA_MLC; jspInState = -initialTokenType&0xff; break; case INTERNAL_CSS_STRING: state = CSS_STRING; languageIndex = LANG_INDEX_CSS; cssPrevState = -initialTokenType&0xff; break; case INTERNAL_CSS_CHAR: state = CSS_CHAR_LITERAL; languageIndex = LANG_INDEX_CSS; cssPrevState = -initialTokenType&0xff; break; case INTERNAL_CSS_MLC: state = CSS_C_STYLE_COMMENT; languageIndex = LANG_INDEX_CSS; cssPrevState = -initialTokenType&0xff; break; } } else { state = Token.NULL; } break; } setLanguageIndex(languageIndex); start = text.offset; s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Sets whether markup close tags should be completed. You might not want * this to be the case, since some tags in standard HTML aren't usually * closed. * * @param complete Whether closing markup tags are completed. * @see #getCompleteCloseTags() */ public static void setCompleteCloseTags(boolean complete) { completeCloseTags = complete; } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} // HTML-specific stuff. Whitespace = ([ \t\f]) LineTerminator = ([\n]) Identifier = ([^ \t\n<&]+) EntityReference = ([&][^; \t]*[;]?) InTagIdentifier = ([^ \t\n\"\'/=>]+) UnclosedStringLiteral = ([\"][^\"]*) StringLiteral = ({UnclosedStringLiteral}[\"]) UnclosedCharLiteral = ([\'][^\']*) CharLiteral = ({UnclosedCharLiteral}[\']) EndScriptTag = ("") EndStyleTag = ("") JspExpressionStart = ("<%=") JspScriptletStart = ("<%") JspDeclarationStart = ("<%!") JspStart = ({JspExpressionStart}|{JspScriptletStart}|{JspDeclarationStart}) // General stuff. Letter = [A-Za-z] NonzeroDigit = [1-9] BinaryDigit = ([0-1]) Digit = ("0"|{NonzeroDigit}) HexDigit = ({Digit}|[A-Fa-f]) OctalDigit = ([0-7]) LetterOrUnderscore = ({Letter}|"_") LetterOrUnderscoreOrDash = ({LetterOrUnderscore}|[\-]) // Java stuff. AnyCharacterButApostropheOrBackSlash = ([^\\']) AnyCharacterButDoubleQuoteOrBackSlash = ([^\\\"\n]) EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) Escape = ("\\"(([btnfr\"'\\])|([0123]{OctalDigit}?{OctalDigit}?)|({OctalDigit}{OctalDigit}?)|{EscapedSourceCharacter})) NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\") IdentifierStart = ({LetterOrUnderscore}|"$") IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) WhiteSpace = ([ \t\f]) JCharLiteral = ([\']({AnyCharacterButApostropheOrBackSlash}|{Escape})[\']) JUnclosedCharLiteral = ([\'][^\'\n]*) JErrorCharLiteral = ({UnclosedCharLiteral}[\']) JStringLiteral = ([\"]({AnyCharacterButDoubleQuoteOrBackSlash}|{Escape})*[\"]) JUnclosedStringLiteral = ([\"]([\\].|[^\\\"])*[^\"]?) JErrorStringLiteral = ({UnclosedStringLiteral}[\"]) MLCBegin = "/*" MLCEnd = "*/" DocCommentBegin = "/**" LineCommentBegin = "//" DigitOrUnderscore = ({Digit}|[_]) DigitsAndUnderscoresEnd = ({DigitOrUnderscore}*{Digit}) IntegerHelper = (({NonzeroDigit}{DigitsAndUnderscoresEnd}?)|"0") IntegerLiteral = ({IntegerHelper}[lL]?) BinaryDigitOrUnderscore = ({BinaryDigit}|[_]) BinaryDigitsAndUnderscores = ({BinaryDigit}({BinaryDigitOrUnderscore}*{BinaryDigit})?) BinaryLiteral = ("0"[bB]{BinaryDigitsAndUnderscores}) HexDigitOrUnderscore = ({HexDigit}|[_]) HexDigitsAndUnderscores = ({HexDigit}({HexDigitOrUnderscore}*{HexDigit})?) OctalDigitOrUnderscore = ({OctalDigit}|[_]) OctalDigitsAndUnderscoresEnd= ({OctalDigitOrUnderscore}*{OctalDigit}) HexHelper = ("0"(([xX]{HexDigitsAndUnderscores})|({OctalDigitsAndUnderscoresEnd}))) HexLiteral = ({HexHelper}[lL]?) FloatHelper1 = ([fFdD]?) FloatHelper2 = ([eE][+-]?{Digit}+{FloatHelper1}) FloatLiteral1 = ({Digit}+"."({FloatHelper1}|{FloatHelper2}|{Digit}+({FloatHelper1}|{FloatHelper2}))) FloatLiteral2 = ("."{Digit}+({FloatHelper1}|{FloatHelper2})) FloatLiteral3 = ({Digit}+{FloatHelper2}) FloatLiteral = ({FloatLiteral1}|{FloatLiteral2}|{FloatLiteral3}|({Digit}+[fFdD])) ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+) BooleanLiteral = ("true"|"false") Separator = ([\(\)\{\}\[\]]) Separator2 = ([\;,.]) NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"|"|"||"|"&&"|">>>") AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") Operator = ({NonAssignmentOperator}|{AssignmentOperator}) JIdentifier = ({IdentifierStart}{IdentifierPart}*) ErrorIdentifier = ({NonSeparator}+) Annotation = ("@"{JIdentifier}?) PrimitiveTypes = ("boolean"|"byte"|"char"|"double" |"float"|"int"|"long"|"short") CurrentBlockTag = ("author"|"deprecated"|"exception"|"param"|"return"|"see"|"serial"|"serialData"|"serialField"|"since"|"throws"|"version") ProposedBlockTag = ("category"|"example"|"tutorial"|"index"|"exclude"|"todo"|"internal"|"obsolete"|"threadsafety") BlockTag = ({CurrentBlockTag}|{ProposedBlockTag}) InlineTag = ("code"|"docRoot"|"inheritDoc"|"link"|"linkplain"|"literal"|"value") URLGenDelim = ([:\/\?#\[\]@]) URLSubDelim = ([\!\$&'\(\)\*\+,;=]) URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) URLCharacters = ({URLCharacter}*) URLEndCharacter = ([\/\$]|{Letter}|{Digit}) URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) // JavaScript stuff. JS_MLCBegin = ({MLCBegin}) JS_MLCEnd = ({MLCEnd}) JS_LineCommentBegin = ({LineCommentBegin}) JS_IntegerLiteral = ({IntegerLiteral}) JS_HexLiteral = ({HexLiteral}) JS_FloatLiteral = ({FloatLiteral}) JS_ErrorNumberFormat = ({ErrorNumberFormat}) JS_Separator = ({Separator}) JS_Separator2 = ({Separator2}) JS_Operator = ({Operator}) JS_Identifier = ({JIdentifier}) JS_ErrorIdentifier = ({ErrorIdentifier}) JS_Regex = ("/"([^\*\\/]|\\.)([^/\\]|\\.)*"/"[gim]*) // CSS stuff. CSS_SelectorPiece = (("*"|"."|{LetterOrUnderscoreOrDash})({LetterOrUnderscoreOrDash}|"."|{Digit})*) CSS_PseudoClass = (":"("root"|"nth-child"|"nth-last-child"|"nth-of-type"|"nth-last-of-type"|"first-child"|"last-child"|"first-of-type"|"last-of-type"|"only-child"|"only-of-type"|"empty"|"link"|"visited"|"active"|"hover"|"focus"|"target"|"lang"|"enabled"|"disabled"|"checked"|":first-line"|":first-letter"|":before"|":after"|"not")) CSS_AtKeyword = ("@"{CSS_SelectorPiece}) CSS_Id = ("#"{CSS_SelectorPiece}) CSS_Separator = ([;\(\)\[\]]) CSS_MlcStart = ({JS_MLCBegin}) CSS_MlcEnd = ({JS_MLCEnd}) CSS_Property = ([\*]?{LetterOrUnderscoreOrDash}({LetterOrUnderscoreOrDash}|{Digit})*) CSS_ValueChar = ({LetterOrUnderscoreOrDash}|[\\/]) CSS_Value = ({CSS_ValueChar}*) CSS_Function = ({CSS_Value}\() CSS_Digits = ([\-]?{Digit}+([0-9\.]+)?(pt|pc|in|mm|cm|em|ex|px|ms|s|%)?) CSS_Hex = ("#"[0-9a-fA-F]+) CSS_Number = ({CSS_Digits}|{CSS_Hex}) %state COMMENT %state PI %state DTD %state INTAG %state INTAG_CHECK_TAG_NAME %state INATTR_DOUBLE %state INATTR_SINGLE %state INTAG_SCRIPT %state INATTR_DOUBLE_SCRIPT %state INATTR_SINGLE_SCRIPT %state INTAG_STYLE %state INATTR_DOUBLE_STYLE %state INATTR_SINGLE_STYLE %state JAVASCRIPT %state JS_STRING %state JS_CHAR %state JS_MLC %state JS_EOL_COMMENT %state HIDDEN_COMMENT %state JAVA_DOCCOMMENT %state JAVA_EXPRESSION %state JAVA_MLC %state JSP_DIRECTIVE %state CSS %state CSS_PROPERTY %state CSS_VALUE %state CSS_STRING %state CSS_CHAR_LITERAL %state CSS_C_STYLE_COMMENT %% { "" { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); } "-" {} {LineTerminator} | <> { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; } } { [^hwf\n\-]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addHyperlinkToken(temp,zzMarkedPos-1, Token.MARKUP_COMMENT); start = zzMarkedPos; } [hwf] {} "--%>" { yybegin(YYINITIAL); addToken(start,zzStartRead+3, Token.MARKUP_COMMENT); } "-" {} {LineTerminator} | <> { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addEndToken(INTERNAL_IN_HIDDEN_COMMENT); return firstToken; } } { [^\n\?]+ {} {LineTerminator} { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } "?>" { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.MARKUP_PROCESSING_INSTRUCTION); } "?" {} <> { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } } { [^\n>]+ {} {LineTerminator} { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } ">" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.MARKUP_DTD); } <> { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } } { [Aa] | [aA][bB][bB][rR] | [aA][cC][rR][oO][nN][yY][mM] | [aA][dD][dD][rR][eE][sS][sS] | [aA][pP][pP][lL][eE][tT] | [aA][rR][eE][aA] | [aA][rR][tT][iI][cC][lL][eE] | [aA][sS][iI][dD][eE] | [aA][uU][dD][iI][oO] | [bB] | [bB][aA][sS][eE] | [bB][aA][sS][eE][fF][oO][nN][tT] | [bB][dD][oO] | [bB][gG][sS][oO][uU][nN][dD] | [bB][iI][gG] | [bB][lL][iI][nN][kK] | [bB][lL][oO][cC][kK][qQ][uU][oO][tT][eE] | [bB][oO][dD][yY] | [bB][rR] | [bB][uU][tT][tT][oO][nN] | [cC][aA][nN][vV][aA][sS] | [cC][aA][pP][tT][iI][oO][nN] | [cC][eE][nN][tT][eE][rR] | [cC][iI][tT][eE] | [cC][oO][dD][eE] | [cC][oO][lL] | [cC][oO][lL][gG][rR][oO][uU][pP] | [cC][oO][mM][mM][aA][nN][dD] | [cC][oO][mM][mM][eE][nN][tT] | [dD][dD] | [dD][aA][tT][aA][gG][rR][iI][dD] | [dD][aA][tT][aA][lL][iI][sS][tT] | [dD][aA][tT][aA][tT][eE][mM][pP][lL][aA][tT][eE] | [dD][eE][lL] | [dD][eE][tT][aA][iI][lL][sS] | [dD][fF][nN] | [dD][iI][aA][lL][oO][gG] | [dD][iI][rR] | [dD][iI][vV] | [dD][lL] | [dD][tT] | [eE][mM] | [eE][mM][bB][eE][dD] | [eE][vV][eE][nN][tT][sS][oO][uU][rR][cC][eE] | [fF][iI][eE][lL][dD][sS][eE][tT] | [fF][iI][gG][uU][rR][eE] | [fF][oO][nN][tT] | [fF][oO][oO][tT][eE][rR] | [fF][oO][rR][mM] | [fF][rR][aA][mM][eE] | [fF][rR][aA][mM][eE][sS][eE][tT] | [hH][123456] | [hH][eE][aA][dD] | [hH][eE][aA][dD][eE][rR] | [hH][rR] | [hH][tT][mM][lL] | [iI] | [iI][fF][rR][aA][mM][eE] | [iI][lL][aA][yY][eE][rR] | [iI][mM][gG] | [iI][nN][pP][uU][tT] | [iI][nN][sS] | [iI][sS][iI][nN][dD][eE][xX] | [kK][bB][dD] | [kK][eE][yY][gG][eE][nN] | [lL][aA][bB][eE][lL] | [lL][aA][yY][eE][rR] | [lL][eE][gG][eE][nN][dD] | [lL][iI] | [lL][iI][nN][kK] | [mM][aA][pP] | [mM][aA][rR][kK] | [mM][aA][rR][qQ][uU][eE][eE] | [mM][eE][nN][uU] | [mM][eE][tT][aA] | [mM][eE][tT][eE][rR] | [mM][uU][lL][tT][iI][cC][oO][lL] | [nN][aA][vV] | [nN][eE][sS][tT] | [nN][oO][bB][rR] | [nN][oO][eE][mM][bB][eE][dD] | [nN][oO][fF][rR][aA][mM][eE][sS] | [nN][oO][lL][aA][yY][eE][rR] | [nN][oO][sS][cC][rR][iI][pP][tT] | [oO][bB][jJ][eE][cC][tT] | [oO][lL] | [oO][pP][tT][gG][rR][oO][uU][pP] | [oO][pP][tT][iI][oO][nN] | [oO][uU][tT][pP][uU][tT] | [pP] | [pP][aA][rR][aA][mM] | [pP][lL][aA][iI][nN][tT][eE][xX][tT] | [pP][rR][eE] | [pP][rR][oO][gG][rR][eE][sS][sS] | [qQ] | [rR][uU][lL][eE] | [sS] | [sS][aA][mM][pP] | [sS][cC][rR][iI][pP][tT] | [sS][eE][cC][tT][iI][oO][nN] | [sS][eE][lL][eE][cC][tT] | [sS][eE][rR][vV][eE][rR] | [sS][mM][aA][lL][lL] | [sS][oO][uU][rR][cC][eE] | [sS][pP][aA][cC][eE][rR] | [sS][pP][aA][nN] | [sS][tT][rR][iI][kK][eE] | [sS][tT][rR][oO][nN][gG] | [sS][tT][yY][lL][eE] | [sS][uU][bB] | [sS][uU][pP] | [tT][aA][bB][lL][eE] | [tT][bB][oO][dD][yY] | [tT][dD] | [tT][eE][xX][tT][aA][rR][eE][aA] | [tT][fF][oO][oO][tT] | [tT][hH] | [tT][hH][eE][aA][dD] | [tT][iI][mM][eE] | [tT][iI][tT][lL][eE] | [tT][rR] | [tT][tT] | [uU] | [uU][lL] | [vV][aA][rR] | [vV][iI][dD][eE][oO] { addToken(Token.MARKUP_TAG_NAME); } {InTagIdentifier} { /* A non-recognized HTML tag name */ yypushback(yylength()); yybegin(INTAG); } . { /* Shouldn't happen */ yypushback(1); yybegin(INTAG); } <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } } { {JspStart} { addToken(Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); } "/" { addToken(Token.MARKUP_TAG_DELIMITER); } {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } {Whitespace} { addToken(Token.WHITESPACE); } "=" { addToken(Token.OPERATOR); } "/>" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } ">" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE); } [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE); } <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } } { {JspStart} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); } [^\"<]* {} "<" { /* Allowing JSP expressions, etc. */ } [\"] { addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); yybegin(INTAG); } <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; } } { {JspStart} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); } [^\'<]* {} "<" { /* Allowing JSP expressions, etc. */ } [\'] { addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); yybegin(INTAG); } <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; } } { {JspStart} { addToken(Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); } {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } "/>" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } "/" { addToken(Token.MARKUP_TAG_DELIMITER); } // Won't appear in valid HTML. {Whitespace}+ { addToken(Token.WHITESPACE); } "=" { addToken(Token.OPERATOR); } ">" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(JAVASCRIPT, LANG_INDEX_JS); } [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_SCRIPT); } [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_SCRIPT); } <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_SCRIPT); return firstToken; } } { {JspStart} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); } [^\"<]* {} "<" { /* Allowing JSP expressions, etc. */ } [\"] { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); return firstToken; } } { {JspStart} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); } [^\'<]* {} "<" { /* Allowing JSP expressions, etc. */ } [\'] { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); return firstToken; } } { {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } "/>" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } "/" { addToken(Token.MARKUP_TAG_DELIMITER); } // Won't appear in valid HTML. {Whitespace} { addToken(Token.WHITESPACE); } "=" { addToken(Token.OPERATOR); } ">" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(CSS, LANG_INDEX_CSS); } [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_STYLE); } [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_STYLE); } <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_STYLE); return firstToken; } } { [^\"]* {} [\"] { yybegin(INTAG_STYLE); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_STYLE); return firstToken; } } { [^\']* {} [\'] { yybegin(INTAG_STYLE); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_STYLE); return firstToken; } } { {EndScriptTag} { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } // ECMA 3+ keywords. "break" | "continue" | "delete" | "else" | "for" | "function" | "if" | "in" | "new" | "this" | "typeof" | "var" | "void" | "while" | "with" { addToken(Token.RESERVED_WORD); } "return" { addToken(Token.RESERVED_WORD_2); } //JavaScript 1.6 "each" {if(JavaScriptTokenMaker.isJavaScriptCompatible("1.6")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } //JavaScript 1.7 "let" {if(JavaScriptTokenMaker.isJavaScriptCompatible("1.7")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } // Reserved (but not yet used) ECMA keywords. "abstract" | "case" | "catch" | "class" | "const" | "debugger" | "default" | "do" | "enum" | "export" | "extends" | "final" | "finally" | "goto" | "implements" | "import" | "instanceof" | "interface" | "native" | "package" | "private" | "protected" | "public" | "static" | "super" | "switch" | "synchronized" | "throw" | "throws" | "transient" | "try" | "volatile" | "null" { addToken(Token.RESERVED_WORD); } {PrimitiveTypes} { addToken(Token.DATA_TYPE); } // Literals. {BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } "NaN" { addToken(Token.RESERVED_WORD); } "Infinity" { addToken(Token.RESERVED_WORD); } // Functions. "eval" | "parseInt" | "parseFloat" | "escape" | "unescape" | "isNaN" | "isFinite" { addToken(Token.FUNCTION); } {LineTerminator} { addEndToken(INTERNAL_IN_JS); return firstToken; } {JS_Identifier} { addToken(Token.IDENTIFIER); } {Whitespace}+ { addToken(Token.WHITESPACE); } /* String/Character literals. */ [\'] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); } [\"] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); } /* Comment literals. */ "/**/" { addToken(Token.COMMENT_MULTILINE); } {JS_MLCBegin} { start = zzMarkedPos-2; yybegin(JS_MLC); } {JS_LineCommentBegin} { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); } /* Attempt to identify regular expressions (not foolproof) - do after comments! */ {JS_Regex} { boolean highlightedAsRegex = false; if (firstToken==null) { addToken(Token.REGEX); highlightedAsRegex = true; } else { // If this is *likely* to be a regex, based on // the previous token, highlight it as such. Token t = firstToken.getLastNonCommentNonWhitespaceToken(); if (RSyntaxUtilities.regexCanFollowInJavaScript(t)) { addToken(Token.REGEX); highlightedAsRegex = true; } } // If it doesn't *appear* to be a regex, highlight it as // individual tokens. if (!highlightedAsRegex) { int temp = zzStartRead + 1; addToken(zzStartRead, zzStartRead, Token.OPERATOR); zzStartRead = zzCurrentPos = zzMarkedPos = temp; } } /* Separators. */ {JS_Separator} { addToken(Token.SEPARATOR); } {JS_Separator2} { addToken(Token.IDENTIFIER); } {JspStart} { addToken(Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); } /* Operators. */ {JS_Operator} { addToken(Token.OPERATOR); } /* Numbers */ {JS_IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {JS_HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } {JS_FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } {JS_ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } {JS_ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } /* Ended with a line not in a string or comment. */ <> { addEndToken(INTERNAL_IN_JS); return firstToken; } /* Catch any other (unhandled) characters and flag them as bad. */ . { addToken(Token.ERROR_IDENTIFIER); } } { [^\n\\\"]+ {} \n { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } \\x{HexDigit}{2} {} \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } \\u{HexDigit}{4} {} \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } \\. { /* Skip all escaped chars. */ } \\ { /* Line ending in '\' => continue to next line. */ if (validJSString) { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_IN_JS_STRING_VALID); } else { addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS_STRING_INVALID); } return firstToken; } \" { int type = validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } <> { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } } { [^\n\\\']+ {} \n { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; } \\x{HexDigit}{2} {} \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } \\u{HexDigit}{4} {} \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } \\. { /* Skip all escaped chars. */ } \\ { /* Line ending in '\' => continue to next line. */ if (validJSString) { addToken(start,zzStartRead, Token.LITERAL_CHAR); addEndToken(INTERNAL_IN_JS_CHAR_VALID); } else { addToken(start,zzStartRead, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS_CHAR_INVALID); } return firstToken; } \' { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } <> { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; } } { // JavaScript MLC's. This state is essentially Java's MLC state. [^hwf<\n\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } [hwf] {} {EndScriptTag} { yybegin(YYINITIAL); int temp = zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } "<" {} \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } {JS_MLCEnd} { yybegin(JAVASCRIPT); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } \* {} <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } } { [^hwf<\n]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } [hwf] {} {EndScriptTag} { int temp = zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); yybegin(YYINITIAL, LANG_INDEX_DEFAULT); addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } "<" {} \n { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } } { {EndStyleTag} { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } {CSS_SelectorPiece} { addToken(Token.DATA_TYPE); } {CSS_PseudoClass} { addToken(Token.RESERVED_WORD); } ":" { /* Unknown pseudo class */ addToken(Token.DATA_TYPE); } {CSS_AtKeyword} { addToken(Token.REGEX); } {CSS_Id} { addToken(Token.VARIABLE); } "{" { addToken(Token.SEPARATOR); yybegin(CSS_PROPERTY); } [,] { addToken(Token.IDENTIFIER); } \" { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } \' { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } [+>~\^$\|=] { addToken(Token.OPERATOR); } {CSS_Separator} { addToken(Token.SEPARATOR); } {Whitespace} { addToken(Token.WHITESPACE); } {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } . { /*System.out.println("CSS: " + yytext());*/ addToken(Token.IDENTIFIER); } "\n" | <> { addEndToken(INTERNAL_CSS); return firstToken; } } { {EndStyleTag} { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } {CSS_Property} { addToken(Token.RESERVED_WORD); } "}" { addToken(Token.SEPARATOR); yybegin(CSS); } ":" { addToken(Token.OPERATOR); yybegin(CSS_VALUE); } {Whitespace} { addToken(Token.WHITESPACE); } {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } . { /*System.out.println("css_property: " + yytext());*/ addToken(Token.IDENTIFIER); } "\n" | <> { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; } } { {EndStyleTag} { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } {CSS_Value} { addToken(Token.IDENTIFIER); } "!important" { addToken(Token.ANNOTATION); } {CSS_Function} { int temp = zzMarkedPos - 2; addToken(zzStartRead, temp, Token.FUNCTION); addToken(zzMarkedPos-1, zzMarkedPos-1, Token.SEPARATOR); zzStartRead = zzCurrentPos = zzMarkedPos; } {CSS_Number} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } \" { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } \' { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } ")" { /* End of a function */ addToken(Token.SEPARATOR); } [;] { addToken(Token.OPERATOR); yybegin(CSS_PROPERTY); } [,\.] { addToken(Token.IDENTIFIER); } "}" { addToken(Token.SEPARATOR); yybegin(CSS); } {Whitespace} { addToken(Token.WHITESPACE); } {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } . { /*System.out.println("css_value: " + yytext());*/ addToken(Token.IDENTIFIER); } "\n" | <> { addEndToken(INTERNAL_CSS_VALUE); return firstToken; } } { [^\n\\\"]+ {} \\.? { /* Skip escaped chars. */ } \" { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(cssPrevState); } \n | <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; } } { [^\n\\\']+ {} \\.? { /* Skip escaped chars. */ } \' { addToken(start,zzStartRead, Token.LITERAL_CHAR); yybegin(cssPrevState); } \n | <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; } } { [^hwf\n\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } [hwf] {} {CSS_MlcEnd} { addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(cssPrevState); } \* {} \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; } } { "%>" { addToken(Token.MARKUP_TAG_DELIMITER); start = zzMarkedPos; yybegin(jspInState); } /* Keywords */ "abstract"| "assert" | "break" | "case" | "catch" | "class" | "const" | "continue" | "default" | "do" | "else" | "enum" | "extends" | "final" | "finally" | "for" | "goto" | "if" | "implements" | "import" | "instanceof" | "interface" | "native" | "new" | "null" | "package" | "private" | "protected" | "public" | "static" | "strictfp" | "super" | "switch" | "synchronized" | "this" | "throw" | "throws" | "transient" | "try" | "void" | "volatile" | "while" { addToken(Token.RESERVED_WORD); } "return" { addToken(Token.RESERVED_WORD_2); } /* Data types. */ {PrimitiveTypes} { addToken(Token.DATA_TYPE); } /* Booleans. */ {BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } /* java.lang classes */ "Appendable" | "AutoCloseable" | "CharSequence" | "Cloneable" | "Comparable" | "Iterable" | "Readable" | "Runnable" | "Thread.UncaughtExceptionHandler" | "Boolean" | "Byte" | "Character" | "Character.Subset" | "Character.UnicodeBlock" | "Class" | "ClassLoader" | "ClassValue" | "Compiler" | "Double" | "Enum" | "Float" | "InheritableThreadLocal" | "Integer" | "Long" | "Math" | "Number" | "Object" | "Package" | "Process" | "ProcessBuilder" | "ProcessBuilder.Redirect" | "Runtime" | "RuntimePermission" | "SecurityManager" | "Short" | "StackTraceElement" | "StrictMath" | "String" | "StringBuffer" | "StringBuilder" | "System" | "Thread" | "ThreadGroup" | "ThreadLocal" | "Throwable" | "Void" | "Character.UnicodeScript" | "ProcessBuilder.Redirect.Type" | "Thread.State" | "ArithmeticException" | "ArrayIndexOutOfBoundsException" | "ArrayStoreException" | "ClassCastException" | "ClassNotFoundException" | "CloneNotSupportedException" | "EnumConstantNotPresentException" | "Exception" | "IllegalAccessException" | "IllegalArgumentException" | "IllegalMonitorStateException" | "IllegalStateException" | "IllegalThreadStateException" | "IndexOutOfBoundsException" | "InstantiationException" | "InterruptedException" | "NegativeArraySizeException" | "NoSuchFieldException" | "NoSuchMethodException" | "NullPointerException" | "NumberFormatException" | "RuntimeException" | "SecurityException" | "StringIndexOutOfBoundsException" | "TypeNotPresentException" | "UnsupportedOperationException" | "AbstractMethodError" | "AssertionError" | "BootstrapMethodError" | "ClassCircularityError" | "ClassFormatError" | "Error" | "ExceptionInInitializerError" | "IllegalAccessError" | "IncompatibleClassChangeError" | "InstantiationError" | "InternalError" | "LinkageError" | "NoClassDefFoundError" | "NoSuchFieldError" | "NoSuchMethodError" | "OutOfMemoryError" | "StackOverflowError" | "ThreadDeath" | "UnknownError" | "UnsatisfiedLinkError" | "UnsupportedClassVersionError" | "VerifyError" | "VirtualMachineError" | /* java.io classes*/ "Closeable" | "DataInput" | "DataOutput" | "Externalizable" | "FileFilter" | "FilenameFilter" | "Flushable" | "ObjectInput" | "ObjectInputValidation" | "ObjectOutput" | "ObjectStreamConstants" | "Serializable" | "BufferedInputStream" | "BufferedOutputStream" | "BufferedReader" | "BufferedWriter" | "ByteArrayInputStream" | "ByteArrayOutputStream" | "CharArrayReader" | "CharArrayWriter" | "Console" | "DataInputStream" | "DataOutputStream" | "File" | "FileDescriptor" | "FileInputStream" | "FileOutputStream" | "FilePermission" | "FileReader" | "FileWriter" | "FilterInputStream" | "FilterOutputStream" | "FilterReader" | "FilterWriter" | "InputStream" | "InputStreamReader" | "LineNumberInputStream" | "LineNumberReader" | "ObjectInputStream" | "ObjectInputStream.GetField" | "ObjectOutputStream" | "ObjectOutputStream.PutField" | "ObjectStreamClass" | "ObjectStreamField" | "OutputStream" | "OutputStreamWriter" | "PipedInputStream" | "PipedOutputStream" | "PipedReader" | "PipedWriter" | "PrintStream" | "PrintWriter" | "PushbackInputStream" | "PushbackReader" | "RandomAccessFile" | "Reader" | "SequenceInputStream" | "SerializablePermission" | "StreamTokenizer" | "StringBufferInputStream" | "StringReader" | "StringWriter" | "Writer" | "CharConversionException" | "EOFException" | "FileNotFoundException" | "InterruptedIOException" | "InvalidClassException" | "InvalidObjectException" | "IOException" | "NotActiveException" | "NotSerializableException" | "ObjectStreamException" | "OptionalDataException" | "StreamCorruptedException" | "SyncFailedException" | "UncheckedIOException" | "UnsupportedEncodingException" | "UTFDataFormatException" | "WriteAbortedException" | "IOError" | /* java.util classes */ "Collection" | "Comparator" | "Deque" | "Enumeration" | "EventListener" | "Formattable" | "Iterator" | "List" | "ListIterator" | "Map" | "Map.Entry" | "NavigableMap" | "NavigableSet" | "Observer" | "PrimitiveIterator" | "PrimitiveIterator.OfDouble" | "PrimitiveIterator.OfInt" | "PrimitiveIterator.OfLong" | "Queue" | "RandomAccess" | "Set" | "SortedMap" | "SortedSet" | "Spliterator" | "Spliterator.OfDouble" | "Spliterator.OfInt" | "Spliterator.OfLong" | "Spliterator.OfPrimitive" | "AbstractCollection" | "AbstractList" | "AbstractMap" | "AbstractMap.SimpleEntry" | "AbstractMap.SimpleImmutableEntry" | "AbstractQueue" | "AbstractSequentialList" | "AbstractSet" | "ArrayDeque" | "ArrayList" | "Arrays" | "Base64" | "Base64.Decoder" | "Base64.Encoder" | "BitSet" | "Calendar" | "Calendar.Builder" | "Collections" | "Currency" | "Date" | "Dictionary" | "DoubleSummaryStatistics" | "EnumMap" | "EnumSet" | "EventListenerProxy" | "EventObject" | "FormattableFlags" | "Formatter" | "GregorianCalendar" | "HashMap" | "HashSet" | "Hashtable" | "IdentityHashMap" | "IntSummaryStatistics" | "LinkedHashMap" | "LinkedHashSet" | "LinkedList" | "ListResourceBundle" | "Locale" | "Locale.Builder" | "Locale.LanguageRange" | "LongSummaryStatistics" | "Objects" | "Observable" | "Optional" | "OptionalDouble" | "OptionalInt" | "OptionalLong" | "PriorityQueue" | "Properties" | "PropertyPermission" | "PropertyResourceBundle" | "Random" | "ResourceBundle" | "ResourceBundle.Control" | "Scanner" | "ServiceLoader" | "SimpleTimeZone" | "Spliterators" | "Spliterators.AbstractDoubleSpliterator" | "Spliterators.AbstractIntSpliterator" | "Spliterators.AbstractLongSpliterator" | "Spliterators.AbstractSpliterator" | "SpliteratorRandom" | "Stack" | "StringJoiner" | "StringTokenizer" | "Timer" | "TimerTask" | "TimeZone" | "TreeMap" | "TreeSet" | "UUID" | "Vector" | "WeakHashMap" | "Formatter.BigDecimalLayoutForm" | "Locale.Category" | "Locale.FilteringMode" | "ConcurrentModificationException" | "DuplicateFormatFlagsException" | "EmptyStackException" | "FormatFlagsConversionMismatchException" | "FormatterClosedException" | "IllegalFormatCodePointException" | "IllegalFormatConversionException" | "IllegalFormatException" | "IllegalFormatFlagsException" | "IllegalFormatPrecisionException" | "IllegalFormatWidthException" | "IllformedLocaleException" | "InputMismatchException" | "InvalidPropertiesFormatException" | "MissingFormatArgumentException" | "MissingFormatWidthException" | "MissingResourceException" | "NoSuchElementException" | "TooManyListenersException" | "UnknownFormatConversionException" | "UnknownFormatFlagsException" | "ServiceConfigurationError" { addToken(Token.FUNCTION); } {LineTerminator} { addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; } {JIdentifier} { addToken(Token.IDENTIFIER); } {WhiteSpace}+ { addToken(Token.WHITESPACE); } /* String/Character literals. */ {JCharLiteral} { addToken(Token.LITERAL_CHAR); } {JUnclosedCharLiteral} { addToken(Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; } {JErrorCharLiteral} { addToken(Token.ERROR_CHAR); } {JStringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } {JUnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; } {JErrorStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); } /* Comment literals. */ "/**/" { addToken(Token.COMMENT_MULTILINE); } {MLCBegin} { start = zzMarkedPos-2; yybegin(JAVA_MLC); } {DocCommentBegin} { start = zzMarkedPos-3; yybegin(JAVA_DOCCOMMENT); } {LineCommentBegin}.* { addToken(Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; } /* Annotations. */ {Annotation} { addToken(Token.ANNOTATION); } /* Separators. */ {Separator} { addToken(Token.SEPARATOR); } {Separator2} { addToken(Token.IDENTIFIER); } /* Operators. */ {Operator} { addToken(Token.OPERATOR); } /* Numbers */ {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {BinaryLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } {FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } {ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } /* Ended with a line not in a string or comment. */ <> { addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; } /* Catch any other (unhandled) characters and flag them as bad. */ . { addToken(Token.ERROR_IDENTIFIER); } } { [^hwf\n\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } [hwf] {} {MLCEnd} { yybegin(JAVA_EXPRESSION); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } \* {} \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JAVA_MLC - jspInState); return firstToken; } } { [^hwf\@\{\n\<\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; } [hwf] {} "@"{BlockTag} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_KEYWORD); start = zzMarkedPos; } "@" {} "{@"{InlineTag}[^\}]*"}" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_KEYWORD); start = zzMarkedPos; } "{" {} \n { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JAVA_DOCCOMMENT - jspInState); return firstToken; } "<"[/]?({Letter}[^\>]*)?">" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_MARKUP); start = zzMarkedPos; } \< {} {MLCEnd} { yybegin(JAVA_EXPRESSION); addToken(start,zzStartRead+1, Token.COMMENT_DOCUMENTATION); } \* {} <> { yybegin(JAVA_EXPRESSION); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JAVA_DOCCOMMENT - jspInState); return firstToken; } } { "include" | "page" | "taglib" { addToken(Token.RESERVED_WORD); } "/" { addToken(Token.RESERVED_WORD); } {InTagIdentifier} { addToken(Token.IDENTIFIER); } {Whitespace}+ { addToken(Token.WHITESPACE); } "=" { addToken(Token.OPERATOR); } "%>" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } "%" { addToken(Token.IDENTIFIER); } ">" { addToken(Token.IDENTIFIER); /* Needed as InTagIdentifier ignores it. */ } {UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); } {StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } {UnclosedCharLiteral} { addToken(Token.ERROR_CHAR); } {CharLiteral} { addToken(Token.LITERAL_CHAR); } <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_IN_JSP_DIRECTIVE); return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JSPTokenMaker.java000066400000000000000000013723741257417003700312310ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 3/23/15 10:57 PM */ /* * 02/11/2008 * * JSPTokenMaker.java - Generates tokens for JSP syntax highlighting. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for JSP files (supporting HTML 5). * * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated JSPTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.9 */ public class JSPTokenMaker extends AbstractMarkupTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int INATTR_SINGLE_SCRIPT = 10; public static final int JS_CHAR = 16; public static final int JAVA_EXPRESSION = 21; public static final int CSS_STRING = 27; public static final int HIDDEN_COMMENT = 19; public static final int JS_MLC = 17; public static final int CSS_CHAR_LITERAL = 28; public static final int JAVA_DOCCOMMENT = 20; public static final int INTAG_SCRIPT = 8; public static final int CSS_PROPERTY = 25; public static final int CSS_C_STYLE_COMMENT = 29; public static final int CSS = 24; public static final int CSS_VALUE = 26; public static final int JSP_DIRECTIVE = 23; public static final int COMMENT = 1; public static final int INATTR_DOUBLE_SCRIPT = 9; public static final int PI = 2; public static final int JAVASCRIPT = 14; public static final int INTAG = 4; public static final int INTAG_CHECK_TAG_NAME = 5; public static final int INATTR_SINGLE_STYLE = 13; public static final int DTD = 3; public static final int JS_EOL_COMMENT = 18; public static final int INATTR_DOUBLE_STYLE = 12; public static final int INATTR_SINGLE = 7; public static final int YYINITIAL = 0; public static final int INATTR_DOUBLE = 6; public static final int JS_STRING = 15; public static final int JAVA_MLC = 22; public static final int INTAG_STYLE = 11; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\4\1\2\1\0\1\1\1\46\22\0\1\4\1\26\1\10"+ "\1\47\1\50\1\25\1\5\1\11\1\114\1\113\1\51\1\56\1\65"+ "\1\36\1\57\1\12\1\31\1\32\2\45\1\136\1\126\1\135\1\34"+ "\2\30\1\70\1\6\1\3\1\7\1\21\1\67\1\73\1\33\1\52"+ "\1\14\1\106\1\24\1\55\1\121\1\125\1\16\1\127\1\122\1\23"+ "\1\117\1\116\1\115\1\17\1\123\1\15\1\13\1\20\1\120\1\124"+ "\1\134\1\54\1\22\1\27\1\112\1\37\1\112\1\66\1\35\1\0"+ "\1\61\1\53\1\76\1\100\1\60\1\44\1\102\1\77\1\101\1\133"+ "\1\111\1\62\1\105\1\43\1\74\1\103\1\132\1\41\1\63\1\42"+ "\1\40\1\110\1\107\1\104\1\75\1\130\1\131\1\72\1\64\1\71"+ "\uff81\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\6\0\2\1\1\0\2\1\1\0\2\1\14\0\1\2"+ "\3\0\2\2\1\3\1\4\1\5\1\6\1\1\1\7"+ "\5\1\1\10\2\1\1\11\1\12\2\13\1\5\1\14"+ "\1\15\1\16\1\17\1\20\1\21\1\22\1\23\2\21"+ "\2\23\3\21\2\23\2\21\1\23\6\21\1\23\1\1"+ "\1\24\1\25\1\1\1\13\1\26\1\27\1\17\1\30"+ "\1\31\1\32\1\33\1\34\1\1\1\35\1\1\1\36"+ "\1\37\2\14\1\2\1\14\1\40\1\41\1\14\2\2"+ "\1\14\2\42\1\14\5\2\1\36\1\2\1\14\5\2"+ "\1\43\1\14\10\2\1\1\1\44\1\45\1\46\1\1"+ "\1\47\1\50\1\51\1\1\1\52\6\1\1\53\4\1"+ "\1\54\2\1\1\55\7\1\1\56\1\14\1\57\1\60"+ "\1\14\10\2\1\14\1\42\11\2\1\61\17\2\1\1"+ "\1\62\1\1\2\2\1\63\1\64\1\65\1\66\4\2"+ "\1\67\1\70\1\67\1\71\1\72\1\67\1\73\1\67"+ "\1\74\1\67\1\75\1\76\1\77\2\76\1\65\1\76"+ "\1\100\1\101\1\102\1\103\1\102\1\104\2\2\1\102"+ "\1\42\1\2\1\102\1\105\1\106\1\107\1\110\1\111"+ "\1\112\1\113\1\114\1\1\1\4\2\115\1\116\1\117"+ "\1\120\1\6\5\0\1\121\1\116\32\21\2\23\2\21"+ "\1\23\44\21\1\122\1\123\2\0\1\116\1\0\1\14"+ "\1\124\1\0\1\125\1\36\1\2\1\14\1\126\1\42"+ "\2\126\2\127\1\126\1\130\2\126\43\2\3\65\12\2"+ "\1\131\1\132\1\133\3\0\1\134\12\0\1\135\2\0"+ "\1\136\16\0\1\57\1\137\1\57\1\60\1\0\1\64"+ "\1\60\1\140\1\141\46\2\1\142\1\126\20\2\1\61"+ "\34\2\1\143\1\144\3\2\1\0\1\145\1\146\15\0"+ "\1\147\1\0\1\42\5\0\1\42\1\111\1\150\1\151"+ "\2\115\1\116\1\0\1\152\1\0\1\153\4\0\1\116"+ "\14\21\1\23\63\21\1\122\1\0\1\154\1\0\1\36"+ "\1\2\1\127\1\0\1\42\3\130\30\2\1\155\16\2"+ "\1\73\16\2\44\0\1\63\1\57\1\0\2\57\1\60"+ "\1\0\1\64\3\60\1\156\3\2\1\157\65\2\1\42"+ "\21\2\1\36\21\2\1\157\21\2\25\0\2\115\1\160"+ "\1\161\2\0\1\162\31\21\1\23\2\21\1\23\6\21"+ "\1\0\1\163\1\36\1\2\1\126\1\2\1\164\11\2"+ "\1\73\1\165\26\2\1\0\1\1\3\0\1\166\3\0"+ "\1\167\1\170\11\0\1\171\11\0\1\172\5\0\3\57"+ "\1\60\70\2\1\157\3\2\1\157\1\2\1\157\5\2"+ "\1\126\12\2\1\157\4\2\1\157\1\2\1\36\22\2"+ "\1\0\16\2\1\65\23\0\2\115\2\0\12\21\1\23"+ "\11\21\1\0\1\36\4\2\1\65\1\2\1\65\17\2"+ "\37\0\3\57\1\60\3\2\1\157\14\2\1\157\47\2"+ "\1\157\43\2\1\36\22\2\1\0\15\2\16\0\1\115"+ "\1\173\12\21\1\0\1\36\1\2\1\174\16\2\24\0"+ "\2\57\1\60\1\2\1\157\31\2\1\157\27\2\1\157"+ "\2\2\1\157\24\2\1\157\16\2\1\36\6\2\1\157"+ "\2\2\1\157\6\2\1\0\13\2\12\0\1\175\3\21"+ "\1\0\7\2\4\0\1\171\6\0\1\57\33\2\1\157"+ "\21\2\1\157\7\2\1\0\3\2\1\0\21\2\1\0"+ "\14\2\1\36\23\2\1\0\13\2\6\0\1\21\1\0"+ "\2\2\13\0\1\57\16\2\1\157\50\2\2\0\2\2"+ "\4\0\16\2\2\0\22\2\1\157\11\2\1\0\12\2"+ "\1\176\4\0\1\21\1\177\1\2\1\200\1\201\5\0"+ "\14\2\1\0\10\2\1\157\33\2\2\0\1\2\4\0"+ "\5\2\1\157\7\2\1\0\2\2\1\157\7\2\1\157"+ "\17\2\1\157\11\2\10\0\16\2\1\157\2\2\1\0"+ "\30\2\6\0\10\2\1\0\2\2\1\0\35\2\3\0"+ "\1\61\2\0\10\2\1\157\4\2\2\0\10\2\1\157"+ "\14\2\6\0\7\2\1\157\1\2\1\0\1\157\4\2"+ "\1\157\17\2\1\157\2\2\1\157\3\2\1\0\1\157"+ "\3\2\2\0\1\2\1\157\17\2\5\0\6\2\1\0"+ "\1\2\1\0\3\2\1\157\3\2\1\157\17\2\2\0"+ "\3\2\2\0\16\2\4\0\2\2\1\157\3\2\2\0"+ "\25\2\2\0\2\2\2\0\1\157\11\2\1\157\2\2"+ "\3\0\4\2\2\0\22\2\5\0\1\2\3\0\10\2"+ "\1\0\1\2\3\0\4\2\2\0\15\2\4\0\1\2"+ "\2\0\10\2\1\0\1\2\3\0\3\2\2\0\7\2"+ "\6\0\5\2\1\0\1\157\3\0\2\2\2\0\2\2"+ "\1\157\3\2\6\0\3\2\5\0\2\2\2\0\2\2"+ "\1\0\1\157\2\2\5\0\2\2\3\0\1\2\2\0"+ "\2\2\2\0\1\2\5\0\1\2\3\0\1\2\2\0"+ "\1\2\11\0\1\2\2\0\1\2\16\0\1\157\43\0"; private static int [] zzUnpackAction() { int [] result = new int[2523]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\137\0\276\0\u011d\0\u017c\0\u01db\0\u023a\0\u0299"+ "\0\u02f8\0\u0357\0\u03b6\0\u0415\0\u0474\0\u04d3\0\u0532\0\u0591"+ "\0\u05f0\0\u064f\0\u06ae\0\u070d\0\u076c\0\u07cb\0\u082a\0\u0889"+ "\0\u08e8\0\u0947\0\u09a6\0\u0a05\0\u0a64\0\u0ac3\0\u0b22\0\u0b81"+ "\0\u0be0\0\u0c3f\0\u0c9e\0\u0cfd\0\u0d5c\0\u0be0\0\u0dbb\0\u0e1a"+ "\0\u0e79\0\u0ed8\0\u0f37\0\u0be0\0\u0f96\0\u0ff5\0\u0be0\0\u0be0"+ "\0\u1054\0\u10b3\0\u0be0\0\u0be0\0\u0be0\0\u0be0\0\u1112\0\u0be0"+ "\0\u1171\0\u0be0\0\u11d0\0\u122f\0\u128e\0\u12ed\0\u134c\0\u13ab"+ "\0\u140a\0\u1469\0\u14c8\0\u1527\0\u1586\0\u15e5\0\u1644\0\u16a3"+ "\0\u1702\0\u1761\0\u17c0\0\u181f\0\u187e\0\u1171\0\u18dd\0\u193c"+ "\0\u0be0\0\u199b\0\u19fa\0\u0be0\0\u0be0\0\u1a59\0\u0be0\0\u0be0"+ "\0\u0be0\0\u0be0\0\u0be0\0\u1ab8\0\u0be0\0\u1b17\0\u1b76\0\u0be0"+ "\0\u1bd5\0\u1c34\0\u0be0\0\u1c93\0\u0be0\0\u0be0\0\u1cf2\0\u1d51"+ "\0\u1db0\0\u1e0f\0\u1e6e\0\u1ecd\0\u1f2c\0\u1f8b\0\u1fea\0\u2049"+ "\0\u20a8\0\u2107\0\u0be0\0\u2166\0\u21c5\0\u2224\0\u2283\0\u22e2"+ "\0\u2341\0\u23a0\0\u0be0\0\u23ff\0\u245e\0\u24bd\0\u251c\0\u257b"+ "\0\u25da\0\u2639\0\u2698\0\u26f7\0\u2756\0\u0be0\0\u0be0\0\u27b5"+ "\0\u2814\0\u0be0\0\u0be0\0\u27b5\0\u2873\0\u0be0\0\u28d2\0\u2931"+ "\0\u2990\0\u29ef\0\u2a4e\0\u2aad\0\u0be0\0\u2b0c\0\u2b6b\0\u2bca"+ "\0\u2c29\0\u0be0\0\u2c88\0\u2ce7\0\u0be0\0\u2d46\0\u2da5\0\u2e04"+ "\0\u2e63\0\u2ec2\0\u2f21\0\u2f80\0\u0be0\0\u2fdf\0\u303e\0\u309d"+ "\0\u30fc\0\u315b\0\u31ba\0\u3219\0\u3278\0\u32d7\0\u3336\0\u3395"+ "\0\u33f4\0\u3453\0\u34b2\0\u3511\0\u3570\0\u35cf\0\u362e\0\u368d"+ "\0\u36ec\0\u374b\0\u37aa\0\u3809\0\u3868\0\u38c7\0\u3926\0\u3985"+ "\0\u39e4\0\u3a43\0\u3aa2\0\u3b01\0\u3b60\0\u3bbf\0\u3c1e\0\u3c7d"+ "\0\u3cdc\0\u3d3b\0\u3d9a\0\u3df9\0\u3e58\0\u0be0\0\u3eb7\0\u3f16"+ "\0\u3f75\0\u3fd4\0\u4033\0\u0be0\0\u0be0\0\u4092\0\u40f1\0\u4150"+ "\0\u41af\0\u0be0\0\u0be0\0\u420e\0\u0be0\0\u0be0\0\u426d\0\u42cc"+ "\0\u432b\0\u438a\0\u43e9\0\u0be0\0\u0be0\0\u0be0\0\u420e\0\u426d"+ "\0\u4448\0\u44a7\0\u0be0\0\u0be0\0\u0be0\0\u0be0\0\u420e\0\u0be0"+ "\0\u4506\0\u4565\0\u45c4\0\u4623\0\u4682\0\u46e1\0\u0be0\0\u0be0"+ "\0\u0be0\0\u0be0\0\u4740\0\u0be0\0\u0be0\0\u0be0\0\u479f\0\u47fe"+ "\0\u485d\0\u48bc\0\u491b\0\u497a\0\u0be0\0\u0be0\0\u49d9\0\u4a38"+ "\0\u4a97\0\u4af6\0\u4b55\0\u0be0\0\u4bb4\0\u4c13\0\u4c72\0\u4cd1"+ "\0\u4d30\0\u4d8f\0\u4dee\0\u4e4d\0\u4eac\0\u4f0b\0\u4f6a\0\u4fc9"+ "\0\u5028\0\u5087\0\u50e6\0\u5145\0\u51a4\0\u5203\0\u5262\0\u52c1"+ "\0\u5320\0\u537f\0\u53de\0\u543d\0\u549c\0\u54fb\0\u555a\0\u55b9"+ "\0\u5618\0\u5677\0\u56d6\0\u5735\0\u5794\0\u57f3\0\u5852\0\u58b1"+ "\0\u5910\0\u596f\0\u59ce\0\u5a2d\0\u5a8c\0\u5aeb\0\u5b4a\0\u5ba9"+ "\0\u5c08\0\u5c67\0\u5cc6\0\u5d25\0\u5d84\0\u5de3\0\u5e42\0\u5ea1"+ "\0\u5f00\0\u5f5f\0\u5fbe\0\u601d\0\u607c\0\u60db\0\u613a\0\u6199"+ "\0\u61f8\0\u6257\0\u62b6\0\u6315\0\u6374\0\u63d3\0\u6432\0\u6491"+ "\0\u64f0\0\u0be0\0\u1c93\0\u654f\0\u65ae\0\u660d\0\u660d\0\u0be0"+ "\0\u666c\0\u66cb\0\u672a\0\u6789\0\u67e8\0\u6847\0\u6847\0\u68a6"+ "\0\u6905\0\u6847\0\u6964\0\u69c3\0\u6a22\0\u6a81\0\u6ae0\0\u6b3f"+ "\0\u6b9e\0\u6bfd\0\u6c5c\0\u6cbb\0\u6d1a\0\u6d79\0\u6dd8\0\u6e37"+ "\0\u6e96\0\u6ef5\0\u6f54\0\u6fb3\0\u7012\0\u7071\0\u70d0\0\u712f"+ "\0\u718e\0\u71ed\0\u724c\0\u72ab\0\u730a\0\u7369\0\u73c8\0\u7427"+ "\0\u7486\0\u74e5\0\u7544\0\u75a3\0\u7602\0\u7661\0\u76c0\0\u771f"+ "\0\u777e\0\u77dd\0\u783c\0\u789b\0\u1d51\0\u78fa\0\u7959\0\u79b8"+ "\0\u7a17\0\u7a76\0\u7ad5\0\u7b34\0\u7b93\0\u7bf2\0\u7c51\0\u0be0"+ "\0\u7cb0\0\u7d0f\0\u7d6e\0\u7dcd\0\u7e2c\0\u0be0\0\u7e8b\0\u7eea"+ "\0\u7f49\0\u7fa8\0\u8007\0\u8066\0\u80c5\0\u8124\0\u8183\0\u81e2"+ "\0\u0be0\0\u8241\0\u82a0\0\u0be0\0\u82ff\0\u835e\0\u83bd\0\u841c"+ "\0\u847b\0\u84da\0\u8539\0\u8598\0\u85f7\0\u8656\0\u86b5\0\u8714"+ "\0\u8773\0\u87d2\0\u8831\0\u0be0\0\u8890\0\u88ef\0\u894e\0\u0be0"+ "\0\u89ad\0\u8a0c\0\u8a6b\0\u8aca\0\u8b29\0\u8b88\0\u8be7\0\u8c46"+ "\0\u8ca5\0\u8d04\0\u8d63\0\u8dc2\0\u8e21\0\u8e80\0\u8edf\0\u8f3e"+ "\0\u8f9d\0\u8ffc\0\u905b\0\u90ba\0\u9119\0\u9178\0\u91d7\0\u9236"+ "\0\u9295\0\u92f4\0\u9353\0\u93b2\0\u9411\0\u9470\0\u94cf\0\u952e"+ "\0\u958d\0\u95ec\0\u964b\0\u96aa\0\u9709\0\u9768\0\u97c7\0\u9826"+ "\0\u9885\0\u0be0\0\u98e4\0\u9943\0\u99a2\0\u9a01\0\u9a60\0\u9abf"+ "\0\u9b1e\0\u9b7d\0\u9bdc\0\u9c3b\0\u9c9a\0\u9cf9\0\u9d58\0\u9db7"+ "\0\u9e16\0\u9e75\0\u9ed4\0\u9f33\0\u9f92\0\u789b\0\u9ff1\0\ua050"+ "\0\ua0af\0\ua10e\0\ua16d\0\ua1cc\0\ua22b\0\ua28a\0\ua2e9\0\ua348"+ "\0\ua3a7\0\ua406\0\ua465\0\ua4c4\0\ua523\0\ua582\0\ua5e1\0\ua640"+ "\0\ua69f\0\ua6fe\0\ua75d\0\ua7bc\0\ua81b\0\ua87a\0\ua8d9\0\ua938"+ "\0\u0be0\0\u0be0\0\ua997\0\ua9f6\0\uaa55\0\uaab4\0\u0be0\0\uab13"+ "\0\uab72\0\uabd1\0\uac30\0\uac8f\0\uacee\0\uad4d\0\uadac\0\uae0b"+ "\0\uae6a\0\uaec9\0\uaf28\0\uaf87\0\uafe6\0\ub045\0\ub0a4\0\u0be0"+ "\0\ub103\0\ub162\0\ub1c1\0\ub220\0\ub27f\0\u46e1\0\u0be0\0\u0be0"+ "\0\u47fe\0\ub2de\0\ub33d\0\u0be0\0\ub39c\0\u0be0\0\ub3fb\0\u0be0"+ "\0\ub45a\0\ub4b9\0\ub518\0\ub577\0\u1054\0\ub5d6\0\ub635\0\ub694"+ "\0\ub6f3\0\ub752\0\ub7b1\0\ub810\0\ub86f\0\ub8ce\0\ub92d\0\ub98c"+ "\0\ub9eb\0\uba4a\0\ubaa9\0\ubb08\0\ubb67\0\ubbc6\0\ubc25\0\ubc84"+ "\0\ubce3\0\ubd42\0\ubda1\0\ube00\0\ube5f\0\ubebe\0\ubf1d\0\ubf7c"+ "\0\ubfdb\0\uc03a\0\uc099\0\uc0f8\0\uc157\0\uc1b6\0\uc215\0\uc274"+ "\0\uc2d3\0\uc332\0\uc391\0\uc3f0\0\uc44f\0\uc4ae\0\uc50d\0\uc56c"+ "\0\uc5cb\0\uc62a\0\u5618\0\uc689\0\uc6e8\0\uc747\0\uc7a6\0\uc805"+ "\0\uc864\0\uc8c3\0\u1527\0\uc922\0\uc981\0\uc9e0\0\uca3f\0\uca9e"+ "\0\ucafd\0\ucb5c\0\ucbbb\0\ucc1a\0\ucc79\0\u0be0\0\uccd8\0\ucd37"+ "\0\ucd96\0\ucdf5\0\uce54\0\uceb3\0\ucf12\0\ucf71\0\u6847\0\ucfd0"+ "\0\ud02f\0\ud08e\0\ud0ed\0\ud14c\0\ud1ab\0\ud20a\0\ud269\0\ud2c8"+ "\0\ud327\0\ud386\0\ud3e5\0\ud444\0\ud4a3\0\ud502\0\ud561\0\ud5c0"+ "\0\ud61f\0\ud67e\0\ud6dd\0\ud73c\0\ud79b\0\ud7fa\0\ud859\0\ud8b8"+ "\0\ud917\0\u1d51\0\ud976\0\ud9d5\0\uda34\0\uda93\0\udaf2\0\udb51"+ "\0\udbb0\0\udc0f\0\udc6e\0\udccd\0\udd2c\0\udd8b\0\uddea\0\ude49"+ "\0\udea8\0\udf07\0\udf66\0\udfc5\0\ue024\0\ue083\0\ue0e2\0\ue141"+ "\0\ue1a0\0\ue1ff\0\ue25e\0\ue2bd\0\ue31c\0\ue37b\0\ue3da\0\ue439"+ "\0\ue498\0\ue4f7\0\ue556\0\ue5b5\0\ue614\0\ue673\0\ue6d2\0\ue731"+ "\0\ue790\0\ue7ef\0\ue84e\0\ue8ad\0\ue90c\0\ue96b\0\ue9ca\0\uea29"+ "\0\uea88\0\ueae7\0\ueb46\0\ueba5\0\uec04\0\uec63\0\uecc2\0\ued21"+ "\0\ued80\0\ueddf\0\uee3e\0\uee9d\0\ueefc\0\uef5b\0\uefba\0\uf019"+ "\0\uf078\0\uf0d7\0\uf136\0\u0be0\0\uf195\0\uf1f4\0\uf253\0\uf2b2"+ "\0\uf311\0\uf370\0\uf3cf\0\uf42e\0\uf48d\0\uf4ec\0\ucd96\0\uf54b"+ "\0\uf5aa\0\uf609\0\u1d51\0\uf668\0\uf6c7\0\uf726\0\uf785\0\uf7e4"+ "\0\uf843\0\uf8a2\0\uf901\0\uf960\0\uf9bf\0\ufa1e\0\ufa7d\0\ufadc"+ "\0\ufb3b\0\ufb9a\0\ufbf9\0\ufc58\0\ufcb7\0\ufd16\0\ufd75\0\ufdd4"+ "\0\ufe33\0\ufe92\0\ufef1\0\uff50\0\uffaf\1\16\1\155\1\314"+ "\1\u012b\1\u018a\1\u01e9\1\u0248\1\u02a7\1\u0306\1\u0365\1\u03c4"+ "\1\u0423\1\u0482\1\u04e1\1\u0540\1\u059f\1\u05fe\1\u065d\1\u06bc"+ "\1\u071b\1\u077a\1\u07d9\1\u0838\1\u0897\1\u08f6\1\u0955\1\u09b4"+ "\1\u0a13\1\u0a72\1\u0ad1\1\u0b30\1\u0b8f\1\u0bee\1\u0c4d\1\u0cac"+ "\1\u0d0b\1\u0d6a\1\u0dc9\1\u0e28\1\u0e87\1\u0ee6\1\u0f45\1\u0fa4"+ "\1\u1003\1\u1062\1\u10c1\1\u1120\1\u117f\1\u11de\1\u123d\1\u129c"+ "\1\u12fb\1\u135a\1\u13b9\1\u1418\1\u1477\1\u14d6\1\u1535\1\u1594"+ "\1\u15f3\1\u1652\1\u16b1\1\u1710\1\u176f\1\u17ce\1\u182d\1\u188c"+ "\1\u18eb\1\u194a\1\u19a9\1\u1a08\1\u1a67\1\u1ac6\1\u1b25\1\u1b84"+ "\1\u1be3\1\u1c42\1\u1ca1\1\u1d00\1\u1d5f\1\u1dbe\1\u1e1d\1\u1e7c"+ "\1\u1edb\1\u1f3a\1\u1f99\1\u1ff8\1\u2057\1\u20b6\1\u2115\1\u2174"+ "\1\u21d3\1\u2232\1\u2291\1\u22f0\1\u234f\1\u23ae\1\u240d\1\u246c"+ "\1\u24cb\1\u252a\1\u2589\1\u25e8\1\u2647\0\u0be0\0\u0be0\1\u26a6"+ "\1\u2705\1\u2764\1\u27c3\1\u2822\1\u2881\1\u28e0\1\u293f\1\u299e"+ "\1\u29fd\1\u2a5c\1\u2abb\1\u2b1a\1\u2b79\1\u2bd8\1\u2c37\1\u2c96"+ "\1\u2cf5\1\u2d54\1\u2db3\1\u2e12\1\u2e71\0\u5735\1\u2ed0\1\u2f2f"+ "\1\u2f8e\1\u2fed\1\u304c\1\u30ab\1\u310a\1\u3169\0\ubf7c\1\u31c8"+ "\1\u3227\1\u3286\1\u32e5\1\u3344\1\u33a3\1\u3402\0\u0be0\1\u3461"+ "\1\u34c0\1\u351f\1\u357e\0\u1d51\1\u35dd\1\u363c\1\u369b\1\u36fa"+ "\1\u3759\1\u37b8\1\u3817\1\u3876\1\u38d5\0\u1d51\0\u1d51\1\u3934"+ "\1\u3993\1\u39f2\1\u3a51\1\u3ab0\1\u3b0f\1\u3b6e\1\u3bcd\1\u3c2c"+ "\1\u3c8b\1\u3cea\1\u3d49\1\u3da8\1\u3e07\1\u3e66\1\u3ec5\1\u3f24"+ "\1\u3f83\1\u3fe2\1\u4041\1\u40a0\1\u40ff\0\u7d0f\0\u0be0\1\u415e"+ "\1\u41bd\1\u421c\1\u427b\1\u42da\1\u4339\1\u4398\1\u43f7\0\u0be0"+ "\1\u4456\1\u44b5\1\u4514\1\u4573\1\u45d2\1\u4631\1\u4690\1\u46ef"+ "\1\u474e\0\u0be0\1\u47ad\1\u480c\1\u486b\1\u48ca\1\u4929\1\u4988"+ "\1\u49e7\1\u4a46\1\u4aa5\1\u4b04\1\u4b63\1\u4bc2\1\u4c21\1\u4c80"+ "\1\u4cdf\1\u4d3e\1\u4d9d\1\u4dfc\1\u4e5b\1\u4eba\1\u4f19\1\u4f78"+ "\1\u4fd7\1\u5036\1\u5095\1\u50f4\1\u5153\1\u51b2\1\u5211\1\u5270"+ "\1\u52cf\1\u532e\1\u538d\1\u53ec\1\u544b\1\u54aa\1\u5509\1\u5568"+ "\1\u55c7\1\u5626\1\u5685\1\u56e4\1\u5743\1\u57a2\1\u5801\1\u5860"+ "\1\u58bf\1\u591e\1\u597d\1\u59dc\1\u5a3b\1\u5a9a\1\u5af9\1\u5b58"+ "\1\u5bb7\1\u5c16\1\u5c75\1\u5cd4\1\u5d33\1\u5d92\1\u5df1\1\u5e50"+ "\1\u5eaf\1\u5f0e\1\u5f6d\1\u5fcc\1\u602b\1\u608a\1\u60e9\1\u6148"+ "\1\u61a7\1\u6206\1\u6265\1\u62c4\1\u6323\1\u6382\1\u63e1\1\u6440"+ "\1\u649f\1\u64fe\1\u655d\1\u65bc\1\u661b\1\u667a\1\u66d9\1\u6738"+ "\1\u6797\1\u0a13\1\u67f6\1\u6855\1\u68b4\1\u6913\1\u6972\1\u69d1"+ "\1\u6a30\1\u6a8f\1\u6aee\1\u6b4d\1\u6bac\1\u6c0b\1\u6c6a\1\u6cc9"+ "\1\u6d28\1\u6d87\1\u6de6\1\u6e45\1\u6ea4\1\u6f03\1\u6f62\1\u6fc1"+ "\1\u7020\1\u707f\1\u70de\1\u713d\1\u719c\1\u71fb\1\u725a\1\u72b9"+ "\1\u7318\1\u7377\1\u73d6\1\u7435\1\u7494\1\u74f3\1\u7552\1\u75b1"+ "\1\u7610\1\u766f\1\u76ce\1\u772d\1\u778c\1\u77eb\1\u784a\1\u78a9"+ "\1\u7908\1\u7967\1\u79c6\1\u7a25\1\u7a84\0\u3f16\1\u7ae3\1\u7b42"+ "\1\u7ba1\1\u7c00\1\u7c5f\1\u7cbe\1\u7d1d\1\u7d7c\1\u7ddb\1\u7e3a"+ "\1\u7e99\1\u7ef8\1\u7f57\1\u7fb6\1\u8015\1\u8074\1\u80d3\1\u8132"+ "\1\u8191\1\u81f0\1\u824f\1\u82ae\1\u2764\1\u830d\1\u836c\1\u83cb"+ "\1\u842a\1\u8489\1\u84e8\1\u8547\1\u85a6\1\u8605\1\u8664\1\u86c3"+ "\1\u86c3\1\u8722\1\u8781\1\u87e0\1\u883f\1\u889e\1\u88fd\1\u895c"+ "\1\u89bb\1\u8a1a\1\u8a79\1\u8ad8\1\u8b37\1\u8b96\1\u8bf5\0\ud2c8"+ "\1\u8c54\1\u8cb3\1\u8d12\1\u8d71\1\u8dd0\1\u8e2f\1\u8e8e\1\u8eed"+ "\1\u8f4c\1\u8fab\1\u900a\1\u9069\1\u90c8\1\u9127\1\u9186\1\u91e5"+ "\1\u9244\1\u92a3\1\u9302\1\u427b\1\u9361\1\u93c0\1\u43f7\1\u941f"+ "\1\u947e\1\u94dd\1\u953c\1\u959b\1\u95fa\1\u9659\1\u96b8\1\u9717"+ "\1\u9776\1\u97d5\1\u9834\1\u9893\1\u98f2\1\u9951\1\u99b0\1\u9a0f"+ "\1\u9a6e\1\u4b04\1\u9acd\1\u9b2c\1\u9b8b\1\u9bea\1\u9c49\1\u9ca8"+ "\1\u9d07\1\u9d66\1\u9dc5\1\u9e24\1\u9e83\1\u9ee2\1\u9f41\1\u9fa0"+ "\1\u9fff\1\ua05e\1\ua0bd\1\ua11c\1\ua17b\1\ua1da\1\ua239\1\ua298"+ "\1\ua2f7\1\ua356\1\ua3b5\1\ua414\1\ua473\1\ua4d2\1\ua531\1\ua590"+ "\1\ua5ef\1\ua64e\1\ua6ad\1\ua70c\1\ua76b\1\ua7ca\1\ua829\1\ua888"+ "\1\ua8e7\1\ua946\1\ua9a5\1\uaa04\1\uaa63\1\uaac2\1\uab21\1\uab80"+ "\1\uabdf\1\uac3e\1\uac9d\1\uacfc\1\uad5b\1\uadba\1\uae19\1\uae78"+ "\1\uaed7\1\uaf36\1\uaf95\1\uaff4\1\ub053\1\ub0b2\1\ub111\1\ub170"+ "\1\ub1cf\1\ub22e\1\ub28d\1\ub2ec\1\ub34b\1\ub3aa\1\ub409\1\ub468"+ "\1\ub4c7\1\ub526\1\ub585\1\ub5e4\1\ub643\1\ub6a2\1\ub701\1\ub760"+ "\1\ub7bf\1\ub81e\1\ub87d\1\ub8dc\1\ub93b\1\ub99a\1\ub9f9\1\uba58"+ "\1\ubab7\1\ubb16\1\ubb75\1\ubbd4\1\ubc33\1\ubc92\1\ubcf1\1\ubd50"+ "\1\ubdaf\1\ube0e\1\ube6d\1\ubecc\1\ubf2b\1\ubf8a\1\ubfe9\1\uc048"+ "\1\uc0a7\1\uc106\1\uc165\1\uc1c4\1\uc223\1\uc282\1\uc2e1\1\uc340"+ "\1\uc39f\1\uc3fe\1\uc45d\1\uc4bc\1\uc51b\1\uc57a\1\uc5d9\1\uc638"+ "\1\uc697\1\uc6f6\1\uc755\1\uc7b4\1\uc813\1\uc872\1\uc8d1\1\uc930"+ "\1\uc98f\1\uc9ee\1\uca4d\1\ucaac\1\ucb0b\1\ucb6a\1\ucbc9\1\ucc28"+ "\1\ucc87\1\ucce6\1\ucd45\1\ucda4\1\uce03\1\uce62\1\ucec1\1\ucf20"+ "\1\ucf7f\1\ucfde\1\ud03d\1\ud09c\1\ud0fb\1\ud15a\1\ud1b9\1\ud218"+ "\0\u48bc\1\ud277\1\ud2d6\1\ud335\1\ud394\1\ud3f3\1\ud452\1\ud4b1"+ "\1\ud510\1\ud56f\1\ud5ce\1\ud62d\1\ud68c\1\ud6eb\0\u1d51\1\ud74a"+ "\1\ud7a9\1\ud808\1\ud867\1\ud8c6\1\ud925\1\ud984\1\ud9e3\1\uda42"+ "\1\udaa1\1\udb00\1\udb5f\1\udbbe\1\udc1d\1\udc7c\1\udcdb\1\udd3a"+ "\1\udd99\1\uddf8\1\ude57\1\udeb6\1\udf15\1\udf74\1\udfd3\1\ue032"+ "\1\ue091\1\ue0f0\1\ue14f\1\ue1ae\1\ue20d\1\ue26c\1\ue2cb\1\ue32a"+ "\1\ue389\1\ue3e8\1\ue447\1\ue4a6\1\ue505\1\ue564\1\ue5c3\1\ue622"+ "\1\ue681\1\ue6e0\1\ue73f\1\ue79e\1\ue7fd\1\ue85c\1\ue8bb\1\ue91a"+ "\1\ue979\1\ue9d8\1\uea37\1\uea96\1\ueaf5\1\ueb54\1\uebb3\1\uec12"+ "\1\uec71\1\uecd0\1\ued2f\1\ued8e\1\ueded\1\uee4c\1\ueeab\1\uef0a"+ "\1\uef69\1\uefc8\1\uf027\1\uf086\1\uf0e5\1\uf144\1\uf1a3\1\uf202"+ "\1\uf261\1\uf2c0\1\uf31f\1\uf37e\1\uf3dd\1\uf43c\1\uf49b\1\uf4fa"+ "\1\uf559\1\uf5b8\1\uf617\1\uf676\1\uf6d5\1\uf734\1\uf793\1\uf7f2"+ "\1\uf851\1\uf8b0\1\uf90f\1\uf96e\1\uf9cd\1\ufa2c\1\ufa8b\1\ufaea"+ "\1\ufb49\1\ufba8\1\ufc07\1\ufc66\1\ufcc5\1\ufd24\1\ufd83\1\ufde2"+ "\1\ufe41\1\ufea0\1\ufeff\1\uff5e\1\uffbd\2\34\2\173\2\332"+ "\2\u0139\2\u0198\2\u01f7\2\u0256\2\u02b5\2\u0314\2\u0373\2\u03d2"+ "\2\u0431\2\u0490\2\u04ef\2\u054e\2\u05ad\2\u060c\2\u066b\2\u06ca"+ "\2\u0729\2\u0788\2\u07e7\2\u0846\2\u08a5\2\u0904\2\u0963\2\u09c2"+ "\2\u0a21\2\u0a80\2\u0adf\2\u0b3e\2\u0b9d\2\u0bfc\2\u0c5b\2\u0cba"+ "\2\u0d19\2\u0d78\2\u0dd7\2\u0e36\2\u0e95\2\u0ef4\2\u0f53\2\u0fb2"+ "\2\u1011\2\u1070\2\u10cf\2\u112e\2\u118d\2\u11ec\2\u124b\2\u12aa"+ "\2\u1309\2\u1368\2\u13c7\2\u1426\2\u1485\0\u48bc\2\u14e4\2\u1543"+ "\2\u15a2\2\u1601\2\u1660\2\u16bf\2\u171e\2\u177d\2\u17dc\2\u183b"+ "\2\u189a\2\u18f9\2\u1958\2\u19b7\2\u1a16\2\u1a75\2\u1ad4\2\u1b33"+ "\2\u1b92\2\u1bf1\2\u1c50\2\u1caf\2\u1d0e\2\u1d6d\2\u1dcc\2\u1e2b"+ "\2\u1e8a\2\u1ee9\2\u1f48\2\u1fa7\2\u2006\2\u2065\2\u20c4\2\u2123"+ "\2\u2182\2\u21e1\2\u2240\2\u229f\2\u22fe\2\u235d\2\u23bc\2\u241b"+ "\2\u247a\2\u24d9\2\u2538\2\u2597\2\u25f6\2\u2655\2\u26b4\2\u2713"+ "\2\u2772\2\u27d1\2\u2830\2\u288f\2\u28ee\2\u294d\2\u29ac\2\u2a0b"+ "\2\u2a6a\2\u2ac9\2\u2b28\2\u2b87\2\u2be6\2\u2c45\2\u2ca4\2\u2d03"+ "\2\u2d62\2\u2dc1\2\u2e20\2\u2e7f\2\u2ede\2\u2f3d\2\u2f9c\2\u2ffb"+ "\2\u305a\2\u30b9\2\u3118\2\u3177\2\u31d6\2\u3235\2\u3294\2\u32f3"+ "\2\u3352\2\u33b1\2\u3410\2\u346f\2\u34ce\2\u352d\2\u358c\2\u35eb"+ "\2\u364a\2\u36a9\2\u3708\2\u3767\2\u37c6\2\u3825\2\u3884\2\u38e3"+ "\2\u3942\2\u39a1\2\u3a00\2\u3a5f\2\u3abe\2\u3b1d\2\u3b7c\2\u3bdb"+ "\2\u3c3a\2\u3c99\2\u3cf8\2\u3d57\2\u3db6\2\u3e15\2\u3e74\2\u3ed3"+ "\2\u3f32\2\u3f91\2\u3ff0\2\u404f\2\u40ae\2\u410d\2\u416c\2\u41cb"+ "\2\u422a\2\u4289\2\u42e8\2\u4347\2\u43a6\2\u4405\2\u4464\2\u44c3"+ "\2\u4522\2\u4581\2\u45e0\2\u0a21\2\u463f\2\u469e\2\u46fd\2\u475c"+ "\2\u47bb\2\u481a\2\u4879\2\u48d8\2\u4937\2\u4996\2\u49f5\2\u4a54"+ "\2\u4ab3\2\u4b12\2\u4b71\2\u4bd0\2\u4c2f\2\u4c8e\2\u4ced\2\u4d4c"+ "\2\u4dab\2\u4e0a\2\u4e69\2\u4ec8\2\u4f27\2\u4f86\2\u4fe5\2\u5044"+ "\2\u50a3\2\u5102\2\u5161\2\u51c0\2\u521f\2\u527e\2\u52dd\2\u533c"+ "\2\u539b\2\u53fa\2\u5459\2\u54b8\2\u5517\2\u5576\2\u55d5\2\u5634"+ "\2\u5693\2\u56f2\2\u5751\2\u57b0\2\u580f\2\u586e\2\u58cd\2\u592c"+ "\2\u598b\2\u59ea\2\u5a49\2\u5aa8\2\u5b07\2\u5b66\2\u5bc5\2\u5c24"+ "\2\u5c83\2\u5ce2\2\u5d41\2\u5da0\2\u5dff\2\u5e5e\2\u5ebd\2\u5f1c"+ "\2\u5f7b\2\u5fda\2\u6039\2\u6098\2\u60f7\2\u6156\2\u61b5\2\u6214"+ "\2\u6273\2\u62d2\2\u6331\2\u6390\2\u63ef\2\u644e\2\u64ad\2\u650c"+ "\2\u656b\2\u65ca\2\u6629\2\u6688\2\u66e7\2\u6746\2\u67a5\2\u6804"+ "\2\u6863\2\u68c2\2\u6921\2\u6980\2\u69df\2\u6a3e\2\u6a9d\2\u6afc"+ "\2\u6b5b\2\u6bba\2\u6c19\2\u6c78\2\u6cd7\2\u6d36\2\u6d95\2\u6df4"+ "\2\u6e53\2\u6eb2\2\u6f11\2\u6f70\2\u6fcf\2\u702e\2\u708d\2\u70ec"+ "\2\u714b\2\u71aa\2\u7209\2\u7268\2\u72c7\2\u7326\2\u7385\2\u73e4"+ "\2\u7443\2\u74a2\2\u7501\2\u7560\2\u75bf\2\u761e\2\u767d\2\u76dc"+ "\2\u773b\2\u779a\2\u77f9\2\u7858\2\u78b7\2\u7916\2\u7975\2\u79d4"+ "\2\u7a33\2\u7a92\2\u7af1\2\u7b50\2\u7baf\2\u7c0e\2\u7c6d\2\u7ccc"+ "\2\u7d2b\0\u0be0\2\u7d8a\2\u7de9\2\u7e48\2\u7ea7\2\u7f06\0\u0be0"+ "\2\u7f65\0\u0be0\0\u0be0\2\u7fc4\2\u8023\2\u8082\2\u80e1\2\u8140"+ "\2\u819f\2\u81fe\2\u825d\2\u82bc\2\u831b\2\u837a\2\u83d9\2\u8438"+ "\2\u8497\2\u84f6\2\u8555\2\u85b4\2\u8613\2\u8672\2\u86d1\2\u8730"+ "\2\u878f\2\u87ee\2\u884d\2\u88ac\2\u890b\2\u896a\2\u89c9\2\u8a28"+ "\2\u8a87\2\u8ae6\2\u8b45\2\u8ba4\2\u8c03\2\u8c62\2\u8cc1\2\u8d20"+ "\2\u8d7f\2\u8dde\2\u8e3d\2\u8e9c\2\u8efb\2\u8f5a\2\u8fb9\2\u9018"+ "\2\u9077\2\u90d6\2\u9135\2\u9194\2\u91f3\2\u9252\2\u92b1\2\u9310"+ "\2\u936f\2\u93ce\2\u942d\2\u948c\2\u94eb\2\u954a\2\u95a9\2\u9608"+ "\2\u9667\2\u96c6\2\u9725\2\u9784\2\u97e3\2\u9842\2\u98a1\2\u9900"+ "\2\u995f\2\u99be\2\u9a1d\2\u9a7c\2\u9adb\2\u9b3a\2\u9b99\2\u9bf8"+ "\2\u9c57\2\u9cb6\2\u9d15\2\u9d74\2\u9dd3\2\u9e32\2\u9e91\2\u9ef0"+ "\2\u9d74\2\u9f4f\2\u9fae\2\ua00d\2\ua06c\2\ua0cb\2\ua12a\2\ua189"+ "\2\ua1e8\2\ua247\2\ua2a6\2\ua305\2\ua364\2\ua3c3\2\ua422\2\ua481"+ "\0\u0be0\2\ua4e0\2\ua53f\2\ua59e\2\ua5fd\2\ua65c\2\ua6bb\2\ua71a"+ "\2\ua779\2\ua7d8\2\ua837\2\ua896\2\ua8f5\2\ua954\2\ua9b3\2\uaa12"+ "\2\uaa71\2\uaad0\2\uab2f\2\uab8e\2\uabed\2\uac4c\2\uacab\2\uad0a"+ "\2\uad69\2\uadc8\2\uae27\2\uae86\2\uaee5\2\uaf44\2\uafa3\2\ub002"+ "\2\u91f3\2\ub061\2\ub0c0\2\ub11f\2\ub17e\2\ub1dd\2\ub23c\2\ub29b"+ "\2\ub2fa\2\ub359\2\ub3b8\2\ub417\2\ub476\2\ub4d5\2\ub534\2\ub593"+ "\2\ub5f2\2\ub651\2\ub6b0\2\ub70f\2\ub76e\2\ub7cd\2\ub82c\2\ub88b"+ "\2\ub8ea\2\ub949\2\ub9a8\2\uba07\2\uba66\2\ubac5\2\ubb24\2\ubb83"+ "\2\ubbe2\2\ubc41\2\ubca0\2\ubcff\2\ubd5e\2\ubdbd\2\ube1c\2\ube7b"+ "\2\ubeda\2\ubf39\2\ubf98\2\ubff7\2\uc056\2\uc0b5\2\uc114\2\uc173"+ "\2\uc1d2\2\uc231\2\uc290\2\uc2ef\2\uc34e\2\uc3ad\2\uc40c\2\uc46b"+ "\2\uc4ca\2\uc529\2\uc588\2\uc5e7\2\uc646\2\uc6a5\2\uc704\2\uc763"+ "\2\uc7c2\2\uc821\2\uc880\2\uc8df\2\uc93e\2\uc99d\2\uc9fc\2\uca5b"+ "\2\ucaba\2\ucb19\2\ucb78\2\ucbd7\2\ucc36\2\ucc95\0\u0be0\2\uccf4"+ "\2\ucd53\2\ucdb2\2\uce11\2\uce70\2\ucecf\2\ucf2e\2\ucf8d\2\ucfec"+ "\2\ud04b\2\ud0aa\2\ud109\2\ud168\2\ud1c7\2\ud226\2\ud285\2\ud2e4"+ "\2\ud343\2\ud3a2\2\ud401\2\ud460\2\ud4bf\2\ud51e\2\ud57d\2\ud5dc"+ "\2\ud63b\2\ud69a\2\ud6f9\2\ud758\2\ud7b7\2\ud816\2\ud875\2\ud8d4"+ "\2\ud933\2\ud992\2\ud9f1\2\uda50\2\udaaf\2\udb0e\2\udb6d\2\udbcc"+ "\2\udc2b\2\udc8a\2\udce9\2\udd48\2\udda7\2\ude06\2\ude65\2\udec4"+ "\2\udf23\2\udf82\2\udfe1\2\ue040\2\ue09f\2\ue0fe\2\ue15d\2\ue1bc"+ "\2\ue21b\2\ue27a\2\ue2d9\2\ue338\2\ue397\2\ue3f6\2\ue455\2\ue4b4"+ "\2\ue513\2\ue572\2\ue5d1\2\ue630\2\ue68f\2\ue6ee\2\ue74d\2\ue7ac"+ "\2\ue80b\2\ue86a\2\u5576\2\ue8c9\2\ue928\2\ue987\2\ue9e6\2\uea45"+ "\2\ueaa4\2\ueb03\2\ueb62\2\uebc1\2\uec20\2\uec7f\2\uecde\2\ued3d"+ "\2\ued9c\2\uedfb\2\uee5a\2\ueeb9\2\uef18\2\uef77\2\uefd6\2\uf035"+ "\2\uf094\2\uf0f3\2\uf152\2\uf1b1\2\uf210\2\uf26f\2\uf2ce\2\uf32d"+ "\2\uf38c\2\uf3eb\2\uf44a\2\uf4a9\2\uf508\2\uf567\2\uf5c6\2\uf625"+ "\2\uf684\2\uf6e3\2\uf742\2\uf7a1\2\uf800\2\uf85f\2\uf8be\2\uf91d"+ "\2\uf97c\2\uf9db\2\ufa3a\2\ufa99\2\ufaf8\2\ufb57\2\ufbb6\2\ufc15"+ "\2\ufc74\2\ufcd3\2\ufd32\2\ufd91\2\ufdf0\2\ufe4f\2\ufeae\2\uff0d"+ "\2\uff6c\2\uffcb\3\52\3\211\3\350\3\u0147\3\u01a6\3\u0205"+ "\3\u0264\3\u02c3\3\u0322\3\u0381\3\u03e0\3\u043f\3\u049e\3\u04fd"+ "\3\u055c\3\u05bb\3\u061a\3\u0679\3\u06d8\3\u0737\3\u0796\3\u07f5"+ "\3\u0854\3\u08b3\3\u0912\3\u0971\3\u09d0\3\u0a2f\3\u0a8e\3\u0aed"+ "\3\u0b4c\3\u0bab\3\u0c0a\3\u0c69\3\u0cc8\3\u0d27\3\u0d86\3\u0de5"+ "\3\u0e44\3\u0ea3\3\u0f02\3\u0f61\3\u0fc0\3\u101f\3\u107e\3\u10dd"+ "\3\u113c\3\u119b\3\u11fa\3\u1259\3\u12b8\3\u1317\3\u1376\3\u13d5"+ "\3\u1434\3\u1493\3\u14f2\3\u1551\3\u15b0\3\u160f\3\u166e\3\u16cd"+ "\3\u172c\3\u178b\3\u17ea\3\u1849\3\u18a8\3\u1907\3\u1966\3\u19c5"+ "\3\u1a24\3\u1a83\3\u1ae2\3\u1b41\3\u1ba0\3\u1bff\3\u1c5e\3\u1cbd"+ "\3\u1d1c\3\u1d7b\3\u1dda\3\u1e39\3\u1e98\3\u1ef7\3\u1f56\3\u1fb5"+ "\3\u2014\3\u2073\3\u20d2\3\u2131\3\u2190\3\u21ef\3\u224e\3\u22ad"+ "\3\u230c\3\u236b\3\u23ca\3\u2429\3\u2488\3\u24e7\3\u2546\3\u25a5"+ "\3\u2604\3\u2663\3\u26c2\3\u2721\3\u2780\3\u27df\3\u283e\3\u289d"+ "\3\u28fc\3\u295b\3\u29ba\3\u2a19\3\u2a78\3\u2ad7\3\u2b36\3\u2b95"+ "\3\u2bf4\3\u2c53\3\u2cb2\3\u2d11\3\u2d70\3\u2dcf\3\u2e2e\3\u2e8d"+ "\3\u2eec\3\u2f4b\3\u2faa\3\u3009\3\u3068\3\u30c7\3\u3126\3\u3185"+ "\3\u31e4\3\u3243\3\u32a2\3\u3301\3\u3360\3\u33bf\3\u341e\3\u347d"+ "\3\u34dc\3\u353b\3\u359a\3\u35f9\3\u3658\3\u36b7\3\u3716\3\u3775"+ "\3\u37d4\3\u3833\3\u3892\3\u38f1\3\u3950\3\u39af\3\u3a0e\3\u3a6d"+ "\3\u3acc\3\u3b2b\3\u3b8a\3\u3be9\3\u3c48\3\u3ca7\3\u3d06\3\u3d65"+ "\3\u3dc4\3\u3e23\3\u3e82\3\u3ee1\3\u3f40\3\u3f9f\3\u3ffe\3\u405d"+ "\3\u40bc\3\u411b\3\u417a\3\u41d9\3\u4238\3\u4297\3\u42f6\3\u4355"+ "\3\u43b4\3\u4413\3\u4472\3\u44d1\3\u4530\3\u458f\3\u45ee\3\u464d"+ "\3\u46ac\3\u470b\3\u476a\3\u47c9\3\u4828\3\u4887\3\u48e6\3\u4945"+ "\3\u49a4\3\u4a03\3\u4a62\3\u4ac1\3\u4b20\3\u4b7f\3\u4bde\3\u4c3d"+ "\3\u4c9c\3\u4cfb\3\u4d5a\3\u4db9\3\u4e18\3\u4e77\3\u4ed6\3\u4f35"+ "\3\u4f94\3\u4ff3\3\u5052\3\u50b1\3\u5110\3\u516f\3\u51ce\3\u522d"+ "\3\u528c\3\u52eb\3\u534a\3\u53a9\3\u5408\3\u5467\3\u54c6\3\u5525"+ "\3\u5584\3\u55e3\3\u5642\3\u56a1\3\u5700\3\u575f\3\u57be\3\u581d"+ "\3\u587c\3\u58db\3\u593a\3\u5999\3\u59f8\3\u5a57\3\u5ab6\3\u5b15"+ "\3\u5b74\3\u5bd3\3\u5c32\3\u5c91\3\u5cf0\3\u5d4f\3\u5dae\3\u5e0d"+ "\3\u5e6c\3\u5ecb\3\u5f2a\3\u5f89\3\u5fe8\3\u6047\3\u60a6\3\u6105"+ "\3\u6164\3\u61c3\3\u6222\3\u6281\3\u62e0\3\u633f\3\u639e\3\u63fd"+ "\3\u645c\3\u64bb\3\u651a\3\u6579\3\u65d8\3\u6637\3\u6696\3\u66f5"+ "\3\u6754\3\u67b3\3\u6812\3\u6871\3\u68d0\3\u692f\3\u698e\3\u69ed"+ "\3\u6a4c\3\u6aab\3\u6b0a\3\u6b69\3\u6bc8\3\u6c27\3\u6c86\3\u6ce5"+ "\3\u6d44\3\u6da3\3\u6e02\3\u6e61\3\u6ec0\3\u6f1f\3\u6f7e\3\u6fdd"+ "\3\u703c\3\u709b\3\u70fa\3\u7159\3\u71b8\3\u7217\3\u7276\3\u72d5"+ "\3\u7334\3\u7393\3\u73f2\3\u7451\3\u74b0\3\u750f\3\u756e\3\u75cd"+ "\3\u762c\3\u768b\3\u76ea"; private static int [] zzUnpackRowMap() { int [] result = new int[2523]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\37\1\40\1\41\1\42\1\43\1\44\131\37\2\45"+ "\1\46\33\45\1\47\5\45\1\50\32\45\1\51\7\45"+ "\1\52\27\45\2\53\1\54\64\53\1\55\47\53\2\56"+ "\1\57\16\56\1\60\115\56\2\61\1\0\1\62\1\63"+ "\2\61\1\64\1\65\1\66\1\67\6\61\1\70\115\61"+ "\2\71\1\0\1\71\1\72\2\71\4\72\1\73\1\74"+ "\1\75\1\76\1\77\1\100\1\72\1\71\1\101\1\102"+ "\6\71\1\103\4\71\1\104\1\75\1\100\1\105\1\106"+ "\5\71\2\107\1\71\1\106\2\71\1\102\1\103\1\101"+ "\1\73\10\71\1\110\1\71\1\74\1\111\1\112\1\76"+ "\1\71\1\77\1\71\1\113\1\112\1\71\1\114\1\115"+ "\3\71\1\110\1\105\1\113\1\104\1\71\1\115\1\116"+ "\1\114\1\111\4\71\1\116\4\71\3\117\1\120\4\117"+ "\1\121\126\117\3\122\1\120\5\122\1\121\125\122\1\61"+ "\1\123\1\0\1\62\1\43\2\61\1\64\1\124\1\125"+ "\1\126\6\61\1\127\115\61\3\117\1\120\4\117\1\130"+ "\126\117\3\122\1\120\5\122\1\130\125\122\2\61\1\0"+ "\1\61\1\63\2\61\1\64\1\131\1\132\1\126\6\61"+ "\1\133\115\61\10\134\1\135\126\134\11\136\1\135\125\136"+ "\1\137\1\43\1\140\1\141\1\43\1\142\1\143\1\144"+ "\1\145\1\146\1\147\3\150\1\151\2\150\1\152\3\150"+ "\2\144\1\150\1\153\1\154\1\153\1\150\1\153\1\150"+ "\1\155\1\137\1\156\1\157\1\160\1\161\1\162\1\153"+ "\1\163\1\137\1\150\1\144\1\150\1\164\2\150\1\165"+ "\1\166\1\167\1\170\1\171\1\172\1\173\1\143\1\144"+ "\3\64\1\174\1\137\2\150\1\175\1\150\1\176\1\177"+ "\1\200\1\201\3\150\1\202\1\203\1\150\3\173\1\150"+ "\1\204\7\150\1\153\2\150\1\173\3\150\2\153\2\205"+ "\1\206\5\205\1\207\26\205\1\210\77\205\2\211\1\212"+ "\6\211\1\213\25\211\1\214\77\211\2\215\1\216\1\217"+ "\40\215\1\220\4\215\1\221\25\215\1\222\7\215\1\223"+ "\27\215\2\224\1\225\1\226\40\224\1\227\32\224\1\230"+ "\7\224\1\231\27\224\2\45\1\232\33\45\1\233\5\45"+ "\1\50\32\45\1\51\7\45\1\52\27\45\2\234\1\235"+ "\1\236\40\234\1\237\4\234\1\240\21\234\1\241\3\234"+ "\1\242\7\234\1\243\21\234\1\244\5\234\1\137\1\43"+ "\1\245\1\246\1\43\1\142\1\143\1\144\1\247\1\250"+ "\1\251\1\252\1\253\1\254\1\255\1\256\1\257\1\152"+ "\1\150\1\260\1\261\1\262\1\144\1\150\1\153\1\263"+ "\1\153\1\264\1\153\1\150\1\155\1\137\1\150\1\157"+ "\1\265\1\161\1\266\1\153\1\163\1\137\1\150\1\144"+ "\1\267\1\164\1\150\1\270\1\165\1\166\1\271\1\272"+ "\1\273\1\274\1\173\1\143\1\144\3\64\1\174\1\275"+ "\2\150\1\175\1\150\1\276\1\277\1\200\1\300\2\150"+ "\1\301\1\302\1\303\1\150\3\173\1\304\1\305\1\306"+ "\1\307\1\310\1\150\1\311\1\312\1\313\1\153\2\150"+ "\1\173\2\150\1\314\2\153\2\315\1\316\41\315\1\220"+ "\4\315\1\317\25\315\1\222\7\315\1\223\27\315\1\320"+ "\1\321\1\0\1\320\1\43\2\320\1\64\1\322\1\323"+ "\1\324\6\320\1\325\3\320\1\326\14\320\1\327\36\320"+ "\1\330\1\320\1\331\33\320\1\332\1\63\1\333\1\334"+ "\1\63\1\332\1\173\1\64\1\335\1\336\1\337\6\340"+ "\1\64\3\340\2\332\1\340\3\332\1\340\1\332\2\340"+ "\1\332\5\340\2\332\1\341\1\64\5\340\1\64\5\340"+ "\1\332\1\143\1\64\1\332\1\342\2\64\1\343\16\340"+ "\3\173\11\340\1\332\2\340\1\344\3\340\2\332\1\345"+ "\1\63\1\346\1\347\1\63\5\345\1\350\6\351\1\345"+ "\3\351\2\345\1\351\3\345\1\351\1\345\2\351\1\345"+ "\5\351\4\345\1\352\4\351\2\345\4\351\1\353\3\345"+ "\1\354\3\345\16\351\3\345\11\351\1\345\2\351\1\345"+ "\3\351\2\345\1\355\1\63\1\356\1\357\1\63\1\355"+ "\1\360\1\355\1\335\1\336\1\361\6\362\1\355\3\362"+ "\1\355\1\363\1\362\3\364\1\362\1\364\1\362\1\365"+ "\6\362\1\364\1\355\1\366\2\355\4\362\1\355\1\143"+ "\4\362\1\353\1\143\6\355\16\362\1\355\1\367\1\370"+ "\11\362\1\364\2\362\1\355\3\362\2\364\2\205\1\371"+ "\5\205\1\372\26\205\1\373\77\205\2\211\1\374\6\211"+ "\1\375\25\211\1\373\77\211\2\315\1\376\41\315\1\220"+ "\4\315\1\377\25\315\1\222\7\315\1\223\27\315\2\37"+ "\4\0\132\37\1\40\2\0\1\43\1\0\131\37\151\0"+ "\1\u0100\1\u0101\5\u0102\1\0\3\u0102\1\u0103\1\u0104\6\u0102"+ "\3\0\6\u0102\4\0\4\u0102\2\0\3\u0102\1\u0101\3\0"+ "\1\u0105\4\0\16\u0102\3\0\14\u0102\1\0\5\u0102\1\0"+ "\1\43\2\0\1\43\132\0\4\44\1\0\1\44\1\u0106"+ "\130\44\2\45\1\0\33\45\1\0\5\45\1\0\32\45"+ "\1\0\7\45\1\0\27\45\36\0\1\u0107\142\0\1\u0108"+ "\36\0\1\u0109\77\0\1\u010a\203\0\1\u010b\27\0\2\53"+ "\1\0\64\53\1\0\47\53\21\0\1\u010c\115\0\2\56"+ "\1\0\16\56\1\0\115\56\2\61\1\0\1\61\1\0"+ "\2\61\4\0\6\61\1\0\117\61\1\0\1\61\1\0"+ "\2\61\4\0\6\61\1\0\3\61\1\u010d\111\61\21\0"+ "\1\70\115\0\2\71\1\0\1\71\1\0\2\71\4\0"+ "\6\71\1\0\117\71\1\0\1\71\1\0\2\71\4\0"+ "\1\71\1\u010e\2\71\1\u010f\1\u0110\1\0\2\71\1\u0111"+ "\6\71\1\u0112\4\71\1\u0113\1\71\1\u0110\15\71\1\u0111"+ "\1\u0112\12\71\1\u0114\1\71\1\u010e\4\71\1\u010f\1\71"+ "\1\u0115\7\71\1\u0114\1\71\1\u0115\1\u0113\20\71\1\0"+ "\1\71\1\0\2\71\4\0\3\71\1\u0116\2\71\1\0"+ "\2\71\1\u0117\6\71\1\u0118\24\71\1\u0117\1\u0118\12\71"+ "\1\u0119\4\71\1\u0116\13\71\1\u0119\23\71\1\0\1\71"+ "\1\0\2\71\4\0\6\71\1\0\16\71\1\u011a\57\71"+ "\1\u011a\20\71\1\0\1\71\1\0\2\71\4\0\1\u011b"+ "\5\71\1\0\1\71\1\u011c\17\71\1\u011d\1\u011e\10\71"+ "\1\u011e\4\71\1\u011c\1\u011b\21\71\1\u011f\10\71\1\u011d"+ "\1\u011f\21\71\1\0\1\71\1\0\2\71\4\0\2\71"+ "\1\u0120\3\71\1\0\1\71\1\u0121\7\71\1\u0122\5\71"+ "\1\u0120\17\71\1\u0122\1\u0121\56\71\1\0\1\71\1\0"+ "\2\71\4\0\2\71\1\116\1\u0123\1\71\1\116\1\0"+ "\2\71\1\u0124\6\71\1\u0125\5\71\2\116\1\71\1\u0126"+ "\5\71\2\u0127\1\71\1\u0126\2\71\1\u0124\1\u0125\15\71"+ "\1\u0128\1\116\1\u0123\4\71\1\116\16\71\1\u0128\13\71"+ "\1\0\1\71\1\0\2\71\4\0\3\71\1\u0129\2\71"+ "\1\0\2\71\1\u012a\6\71\1\u012b\24\71\1\u012a\1\u012b"+ "\17\71\1\u0129\37\71\1\0\1\71\1\0\2\71\4\0"+ "\6\71\1\0\63\71\1\u012c\2\71\1\u012d\6\71\1\u012c"+ "\4\71\1\u012d\14\71\1\0\1\71\1\0\2\71\4\0"+ "\1\u012e\1\u012f\1\u0130\1\71\1\u0131\1\71\1\0\16\71"+ "\1\u0132\1\u0130\10\71\2\u0133\7\71\1\u012e\12\71\1\u012f"+ "\1\71\1\u0134\2\71\1\u0131\2\71\1\u0134\11\71\1\u0132"+ "\20\71\1\0\1\71\1\0\2\71\4\0\6\71\1\0"+ "\1\71\1\116\36\71\1\116\56\71\1\0\1\71\1\0"+ "\2\71\4\0\6\71\1\0\2\71\1\u0135\6\71\1\u0136"+ "\24\71\1\u0135\1\u0136\12\71\1\u0137\20\71\1\u0137\23\71"+ "\1\0\1\71\1\0\2\71\4\0\2\71\1\u0138\1\u0139"+ "\2\71\1\0\17\71\1\u0138\32\71\1\u013a\4\71\1\u0139"+ "\13\71\1\u013a\23\71\1\0\1\71\1\0\2\71\4\0"+ "\2\71\1\116\1\u011f\2\71\1\0\1\71\1\u013b\7\71"+ "\1\u013c\4\71\1\u013d\1\116\17\71\1\u013c\1\u013b\11\71"+ "\1\u013e\3\71\1\u013f\1\u011f\1\u0140\3\71\1\u013f\6\71"+ "\1\u013e\2\71\1\u013d\1\u0140\17\71\1\0\1\71\1\0"+ "\2\71\4\0\4\71\1\u0141\1\71\1\0\1\71\1\116"+ "\14\71\1\u0142\11\71\2\u0143\6\71\1\116\20\71\1\u0141"+ "\14\71\1\u0142\20\71\1\0\1\71\1\0\2\71\4\0"+ "\2\71\1\116\2\71\1\u0144\1\0\2\71\1\u0145\5\71"+ "\1\116\6\71\1\116\1\u0144\2\71\1\116\12\71\1\u0145"+ "\45\71\1\116\6\71\2\116\2\71\1\0\1\71\1\0"+ "\2\71\4\0\3\71\1\u0146\1\71\1\116\1\0\1\71"+ "\1\116\1\u0147\6\71\1\u0148\6\71\1\116\1\71\1\u0149"+ "\10\71\1\u0149\2\71\1\u0147\1\u0148\1\116\15\71\1\116"+ "\1\u0146\4\71\1\116\32\71\1\0\1\71\1\0\2\71"+ "\4\0\6\71\1\0\2\71\1\u014a\6\71\1\u014b\4\71"+ "\1\u014c\17\71\1\u014a\1\u014b\36\71\1\u014c\20\71\1\0"+ "\1\71\1\0\2\71\4\0\3\71\1\u014d\2\71\1\0"+ "\11\71\1\u014e\25\71\1\u014e\17\71\1\u014d\37\71\1\0"+ "\1\71\1\0\2\71\4\0\6\71\1\0\2\71\1\u014f"+ "\25\71\2\u0150\4\71\1\u014f\56\71\3\117\1\0\4\117"+ "\1\0\126\117\25\0\1\u0151\111\0\3\122\1\0\5\122"+ "\1\0\125\122\1\61\1\123\1\0\1\61\1\43\2\61"+ "\4\0\6\61\1\0\115\61\21\0\1\u0152\115\0\10\134"+ "\1\0\126\134\11\136\1\0\125\136\1\137\12\0\6\137"+ "\1\0\3\137\2\0\7\137\1\0\7\137\1\0\2\137"+ "\1\0\4\137\2\0\4\137\7\0\17\137\3\0\14\137"+ "\1\0\5\137\3\0\1\u0153\3\0\1\64\2\0\1\u0154"+ "\12\0\1\u0155\116\0\1\64\1\0\1\64\136\0\1\64"+ "\127\0\7\u0156\1\u0157\2\u0156\1\u0158\24\u0156\1\u0159\11\u0156"+ "\1\u015a\65\u0156\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\3\150\1\u015c\2\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\7\0\1\64\11\0\1\u015d"+ "\115\0\1\u015e\12\0\6\u015e\1\0\1\u015e\1\u015f\1\u0160"+ "\2\0\1\u015e\3\153\1\u015e\1\153\1\u0161\1\0\5\u015e"+ "\1\u0162\1\153\1\0\2\u015e\1\0\3\u015e\1\u0162\1\0"+ "\1\u0163\1\u0160\1\u015e\1\u015f\1\u015e\7\0\5\u015e\1\u0162"+ "\5\u015e\1\u0162\3\u015e\3\0\11\u015e\1\153\2\u015e\1\0"+ "\3\u015e\2\153\1\u015e\12\0\6\u015e\1\0\1\u015e\1\u015f"+ "\1\u0160\2\0\1\u015e\1\u0164\2\u0165\1\u015e\1\u0165\1\u0166"+ "\1\0\5\u015e\1\u0162\1\u0165\1\0\2\u015e\1\0\2\u015e"+ "\1\u0167\1\u0162\1\0\1\u0163\1\u0160\1\u015e\1\u015f\1\u015e"+ "\7\0\5\u015e\1\u0162\3\u015e\1\u0167\1\u015e\1\u0162\3\u015e"+ "\3\0\11\u015e\1\u0165\2\u015e\1\0\3\u015e\2\u0165\7\0"+ "\1\64\26\0\1\64\100\0\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\3\150\1\u0168\2\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u0169\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\1\150\1\u016a\4\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\1\150\1\u016b\1\150\1\u016c"+ "\12\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\1\u016d\5\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u016e\1\u016f"+ "\2\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\1\u0170\5\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\150\1\u0171\1\u0172\1\150\7\0\1\137\1\u0173"+ "\4\150\1\u0174\10\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\1\150\1\u0175\4\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\1\u0176\1\u0177\14\150\3\0"+ "\14\150\1\0\5\150\7\0\1\64\46\0\1\64\110\0"+ "\3\u0163\1\0\1\u0163\10\0\1\u0163\60\0\1\u0163\6\0"+ "\2\u0163\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\3\150\1\u0178\2\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\150\1\u0179\1\u017a\1\u017b\7\0"+ "\1\137\10\150\1\u017c\3\150\1\u017d\1\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\1\150\1\u017e\2\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u017f\3\150\7\0\1\137"+ "\1\u0180\15\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\1\u0181"+ "\1\150\1\u0182\3\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\1\150\1\u0183\1\150\1\u0184"+ "\7\150\1\u0185\2\150\3\0\14\150\1\0\5\150\7\0"+ "\1\64\62\0\1\64\44\0\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\150\1\u0186\1\u0187\1\150"+ "\7\0\1\137\1\u0188\2\150\1\u0189\12\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\u018a\3\150\7\0\1\137\1\u018b\15\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\3\150\1\u018c\1\u018d"+ "\1\150\1\0\1\137\1\150\1\0\4\150\2\0\3\150"+ "\1\u018e\7\0\1\137\11\150\1\u018f\4\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\1\u0190\15\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\1\u0191\1\u0192\4\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\150\1\u0193\2\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\3\150\1\u0194\1\150\1\u0195\10\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\150\1\u0173\2\150\7\0\1\137"+ "\1\u0196\15\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\150\1\u0197"+ "\2\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\2\205\1\0\5\205\1\0\26\205\1\0\77\205\2\u0198"+ "\1\0\35\u0198\1\u0199\43\u0198\1\u019a\32\u0198\2\211\1\0"+ "\6\211\1\0\25\211\1\0\77\211\2\215\2\0\40\215"+ "\1\0\4\215\1\0\25\215\1\0\7\215\1\0\27\215"+ "\12\0\1\u019b\166\0\1\u019c\36\0\1\u019d\47\0\1\u019e"+ "\166\0\1\u019f\203\0\1\u01a0\27\0\2\224\2\0\40\224"+ "\1\0\32\224\1\0\7\224\1\0\27\224\12\0\1\u01a1"+ "\166\0\1\u01a2\36\0\1\u01a3\77\0\1\u01a4\203\0\1\u01a5"+ "\65\0\1\u01a6\100\0\2\234\2\0\40\234\1\0\4\234"+ "\1\0\21\234\1\0\3\234\1\0\7\234\1\0\21\234"+ "\1\0\5\234\12\0\1\u01a7\6\u01a8\1\u01a9\3\u01a8\2\0"+ "\1\u01a8\3\0\1\u01a8\4\0\5\u01a8\5\0\4\u01a8\2\0"+ "\4\u01a8\10\0\16\u01a8\3\0\11\u01a8\1\0\2\u01a8\1\0"+ "\3\u01a8\44\0\1\u01aa\36\0\1\u01ab\47\0\1\u01ac\165\0"+ "\1\u01ad\1\u01ae\15\0\1\u01af\1\u01b0\1\0\1\u01b1\10\0"+ "\1\u01b2\1\0\1\u01b3\1\0\1\u01b4\1\u01b5\1\0\1\u01b6"+ "\4\0\1\u01b7\70\0\1\u01b8\203\0\1\u01b9\122\0\1\u01ba"+ "\46\0\1\u0153\3\0\1\64\127\0\2\247\1\u01bb\5\247"+ "\1\u01bc\26\247\1\u01bd\77\247\2\u01be\1\u01bf\6\u01be\1\u01c0"+ "\25\u01be\1\u01c1\77\u01be\7\0\1\64\2\0\1\u01c2\36\0"+ "\1\u01c3\65\0\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\2\150\1\u01c4\3\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u01c5\3\150\7\0\1\137"+ "\1\u01c6\1\u01c7\1\u01c8\1\u01c9\1\150\1\u01ca\1\150\1\u01cb"+ "\6\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\1\u01cc\5\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\150\1\u01cd"+ "\1\u01ce\1\150\7\0\1\137\1\u01cf\2\150\1\u01d0\12\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\1\u01d1\5\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\u01d2\1\u01d3\2\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\2\150\1\u01d4\1\u01d5\2\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\2\150\1\u01d6\1\150\7\0\1\137\4\150"+ "\1\u01d7\11\150\3\0\1\u01d8\13\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\1\u01d9\1\u01da\4\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\150\1\u01db\2\150\7\0\1\137\5\150\1\u01dc"+ "\10\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\1\150\1\u01dd"+ "\4\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\1\u01de\1\u01df\1\150\1\u01e0\1\150\1\u01e1"+ "\10\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\1\u01e2\4\150\1\u01e3\10\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\1\150\1\u01e4\1\150\1\u01e5\2\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\10\150"+ "\1\u01e6\1\u01e7\2\150\1\u01e8\1\150\3\0\1\u01e9\13\150"+ "\1\0\5\150\7\0\1\64\11\0\1\u01ea\115\0\1\u015e"+ "\12\0\6\u015e\1\0\1\u015e\1\u015f\1\u0160\2\0\1\u015e"+ "\1\u0164\2\u0165\1\u015e\1\u0165\1\u0166\1\0\5\u015e\1\u0162"+ "\1\u0165\1\0\2\u015e\1\0\2\u01eb\1\u0167\1\u0162\1\0"+ "\1\u0163\1\u0160\1\u015e\1\u015f\1\u015e\7\0\5\u015e\1\u0162"+ "\3\u015e\1\u0167\1\u015e\1\u0162\3\u015e\3\0\11\u015e\1\u0165"+ "\2\u015e\1\0\3\u015e\2\u0165\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\1\u01ec\1\u01ed\4\150"+ "\1\0\1\137\1\150\1\0\1\150\1\u01ee\2\150\2\0"+ "\3\150\1\u01ef\7\0\1\137\7\150\1\u01f0\6\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\1\150\1\u016a\4\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\3\150\1\u016c\12\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\150"+ "\1\u0171\1\u0172\1\150\7\0\1\137\1\u0173\4\150\1\u0174"+ "\10\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\1\u01f1\5\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\150\1\u01f2"+ "\2\150\7\0\1\137\1\u01f3\1\u01f4\3\150\1\u01f5\10\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\2\150\1\u01f6\1\150\7\0"+ "\1\137\1\u01f7\4\150\1\u01f8\10\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\3\150\1\u0178\2\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\2\150\1\u017a\1\150\7\0\1\137"+ "\10\150\1\u01f9\5\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\1\150\1\u017e\2\150"+ "\2\0\3\150\1\u01fa\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\1\u0180\15\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\1\u0181\1\150\1\u01fb\3\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\1\150\1\u0183\1\150\1\u0184\7\150\1\u0185\2\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\u01fc\1\0"+ "\3\u01fc\2\0\1\u01fc\3\137\1\u01fc\1\137\1\u01fc\1\0"+ "\1\137\5\u01fc\1\137\1\0\1\137\1\u01fc\1\0\4\u01fc"+ "\2\0\4\u01fc\7\0\1\137\16\u01fc\3\0\11\u01fc\1\137"+ "\2\u01fc\1\0\3\u01fc\3\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\u01fd\3\150\7\0\1\137\1\u018b"+ "\15\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\3\150\1\u01fe"+ "\1\u018d\1\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\11\150\1\u018f\4\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\u0191\1\u0192\4\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\150\1\u01ff\2\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\1\u0200"+ "\5\150\1\0\1\137\1\150\1\0\4\150\2\0\1\u0201"+ "\1\u0202\2\150\7\0\1\137\1\u0203\4\150\1\u0204\10\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\3\150"+ "\1\u0194\12\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\1\u0196\15\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\1\u0205\5\150\1\0\1\137\1\150\1\0\1\150\1\u0206"+ "\2\150\2\0\4\150\7\0\1\137\7\150\1\u0207\6\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\1\u0208\5\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\u0209\1\u020a\2\150"+ "\7\0\1\137\1\u020b\15\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\150\1\u020c\2\150\7\0\1\137\5\150\1\u020d\10\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\5\150\1\u020e"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\3\150\1\u020f"+ "\2\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\3\150\1\u0210\10\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\1\150\1\u0211\4\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\1\u0212\5\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u0213\3\150\7\0\1\137"+ "\1\u0214\4\150\1\u0215\10\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\150\1\u0216\2\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\150\1\u0217\4\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u0218\3\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\2\315\1\0\41\315"+ "\1\0\4\315\1\0\25\315\1\0\7\315\1\0\27\315"+ "\12\0\1\u0219\124\0\2\320\1\0\1\320\1\0\2\320"+ "\4\0\6\320\1\0\116\320\1\321\1\0\1\320\1\43"+ "\2\320\4\0\6\320\1\0\115\320\10\322\1\u01bc\126\322"+ "\11\323\1\u021a\125\323\2\320\1\0\1\320\1\0\2\320"+ "\4\0\6\320\1\70\117\320\1\0\1\320\1\0\2\320"+ "\4\0\6\320\1\0\37\320\1\u021b\57\320\1\0\1\320"+ "\1\0\2\320\4\0\6\320\1\0\21\320\1\u021c\75\320"+ "\1\0\1\320\1\0\2\320\4\0\6\320\1\0\37\320"+ "\1\u021d\55\320\12\0\1\u021e\175\0\1\u021f\100\0\6\340"+ "\1\0\3\340\2\0\10\340\1\0\6\340\4\0\4\340"+ "\1\0\5\340\10\0\16\340\3\0\14\340\1\0\5\340"+ "\13\0\6\u0220\1\0\3\u0220\2\0\1\u0220\3\0\1\u0220"+ "\1\0\2\u0220\1\0\5\u0220\4\0\5\u0220\1\0\5\u0220"+ "\10\0\16\u0220\3\0\11\u0220\1\0\2\u0220\1\0\3\u0220"+ "\43\0\1\u0221\1\u0222\1\u0223\1\u0224\13\0\1\u0225\1\u0226"+ "\1\u0227\5\0\1\u0228\3\0\1\u0229\1\0\1\u022a\1\u022b"+ "\1\u022c\7\0\1\u022d\41\0\6\u022e\1\0\3\u022e\2\0"+ "\1\u022e\3\0\1\u022e\1\0\2\u022e\1\0\5\u022e\4\0"+ "\5\u022e\1\0\5\u022e\10\0\16\u022e\3\0\11\u022e\1\0"+ "\2\u022e\1\0\3\u022e\15\0\6\351\1\0\3\351\2\0"+ "\10\351\1\0\6\351\4\0\4\351\2\0\4\351\10\0"+ "\16\351\3\0\14\351\1\0\5\351\13\0\6\351\1\0"+ "\3\351\2\0\1\351\3\0\1\351\1\0\2\351\1\0"+ "\5\351\5\0\4\351\2\0\4\351\10\0\16\351\3\0"+ "\11\351\1\0\2\351\1\0\3\351\14\0\7\362\1\0"+ "\3\362\2\0\1\362\3\0\1\362\1\0\10\362\4\0"+ "\1\u021f\4\362\2\0\4\362\10\0\16\362\2\0\1\370"+ "\11\362\1\0\2\362\1\0\3\362\14\0\7\362\1\0"+ "\3\362\2\0\1\362\3\0\1\362\1\0\10\362\5\0"+ "\4\362\2\0\4\362\10\0\16\362\2\0\1\370\11\362"+ "\1\0\2\362\1\0\3\362\103\0\1\u022f\62\0\1\u0230"+ "\2\0\3\364\1\0\1\364\10\0\1\364\11\0\1\364"+ "\1\u0231\2\0\1\u0230\12\0\1\u0232\2\0\1\u0233\1\0"+ "\1\u0234\1\0\1\u0235\20\0\1\364\6\0\2\364\12\0"+ "\7\362\1\0\3\362\2\0\1\362\3\364\1\362\1\364"+ "\10\362\1\364\4\0\4\362\2\0\4\362\10\0\16\362"+ "\2\0\1\370\11\362\1\364\2\362\1\0\3\362\2\364"+ "\14\0\1\u0236\7\0\1\u0236\3\0\5\u0236\7\0\2\u0236"+ "\4\0\2\u0236\1\0\1\u0236\2\0\2\u0236\14\0\1\u0236"+ "\1\0\1\u0236\5\0\1\u0236\17\0\1\u0236\6\0\2\u0236"+ "\2\u0237\1\0\134\u0237\12\0\1\u0238\137\0\6\u0239\1\0"+ "\3\u0239\2\0\6\u0239\3\0\6\u0239\4\0\4\u0239\2\0"+ "\4\u0239\10\0\16\u0239\3\0\14\u0239\1\0\5\u0239\13\0"+ "\1\u0102\1\u023a\3\u0102\1\u023b\1\0\3\u0102\2\0\6\u0102"+ "\3\0\2\u0102\1\u023b\3\u0102\4\0\4\u0102\2\0\4\u0102"+ "\10\0\2\u0102\1\u023a\13\u0102\3\0\14\u0102\1\0\5\u0102"+ "\13\0\6\u0102\1\0\3\u0102\2\0\6\u0102\3\0\6\u0102"+ "\4\0\4\u0102\2\0\4\u0102\10\0\16\u0102\3\0\14\u0102"+ "\1\0\5\u0102\7\0\1\u023c\16\0\1\u023c\7\0\1\u023d"+ "\34\0\1\u023e\101\0\1\u023f\121\0\1\u0240\220\0\1\u0241"+ "\115\0\1\u0242\116\0\1\u0243\203\0\1\u0244\27\0\2\61"+ "\1\0\1\61\1\0\2\61\1\u023c\3\0\6\61\1\0"+ "\4\61\1\u0245\110\61\2\71\1\0\1\71\1\0\2\71"+ "\4\0\2\71\1\u0246\3\71\1\0\17\71\1\u0246\77\71"+ "\1\0\1\71\1\0\2\71\4\0\6\71\1\0\11\71"+ "\1\u0247\25\71\1\u0247\57\71\1\0\1\71\1\0\2\71"+ "\4\0\2\71\1\u0248\3\71\1\0\1\u011a\16\71\1\u0248"+ "\33\71\1\u011a\43\71\1\0\1\71\1\0\2\71\4\0"+ "\1\71\1\u0249\1\u024a\3\71\1\0\1\71\1\u024b\15\71"+ "\1\u024a\20\71\1\u024b\13\71\1\u0249\42\71\1\0\1\71"+ "\1\0\2\71\4\0\6\71\1\0\63\71\1\u024c\11\71"+ "\1\u024c\21\71\1\0\1\71\1\0\2\71\4\0\4\71"+ "\1\116\1\71\1\0\30\71\2\116\27\71\1\116\35\71"+ "\1\0\1\71\1\0\2\71\4\0\6\71\1\0\16\71"+ "\1\u024d\57\71\1\u024d\20\71\1\0\1\71\1\0\2\71"+ "\4\0\6\71\1\0\11\71\1\u024e\25\71\1\u024e\57\71"+ "\1\0\1\71\1\0\2\71\4\0\5\71\1\u024f\1\0"+ "\20\71\1\u024f\76\71\1\0\1\71\1\0\2\71\4\0"+ "\6\71\1\0\21\71\1\u0250\52\71\1\u0250\22\71\1\0"+ "\1\71\1\0\2\71\4\0\4\71\1\u0249\1\71\1\0"+ "\21\71\1\u0251\37\71\1\u0249\12\71\1\u0251\22\71\1\0"+ "\1\71\1\0\2\71\4\0\6\71\1\0\1\71\1\u0252"+ "\36\71\1\u0252\15\71\1\u024f\4\71\1\u0253\1\u024f\10\71"+ "\1\u0253\21\71\1\0\1\71\1\0\2\71\4\0\6\71"+ "\1\0\1\71\1\u024f\36\71\1\u024f\56\71\1\0\1\71"+ "\1\0\2\71\4\0\3\71\1\u0254\2\71\1\0\57\71"+ "\1\u0254\37\71\1\0\1\71\1\0\2\71\4\0\6\71"+ "\1\0\11\71\1\u0255\25\71\1\u0255\57\71\1\0\1\71"+ "\1\0\2\71\4\0\1\116\3\71\1\u0256\1\71\1\0"+ "\41\71\1\116\17\71\1\u0256\35\71\1\0\1\71\1\0"+ "\2\71\4\0\2\71\1\u0257\3\71\1\0\17\71\1\u0257"+ "\77\71\1\0\1\71\1\0\2\71\4\0\6\71\1\0"+ "\60\71\1\116\16\71\1\116\17\71\1\0\1\71\1\0"+ "\2\71\4\0\6\71\1\0\2\71\1\116\33\71\1\116"+ "\13\71\1\u0258\20\71\1\u0258\23\71\1\0\1\71\1\0"+ "\2\71\4\0\6\71\1\0\11\71\1\u0259\25\71\1\u0259"+ "\57\71\1\0\1\71\1\0\2\71\4\0\2\71\1\u025a"+ "\3\71\1\0\17\71\1\u025a\77\71\1\0\1\71\1\0"+ "\2\71\4\0\5\71\1\u011a\1\0\20\71\1\u011a\42\71"+ "\1\u024f\11\71\1\u024f\21\71\1\0\1\71\1\0\2\71"+ "\4\0\6\71\1\0\32\71\1\u025b\27\71\1\u025b\34\71"+ "\1\0\1\71\1\0\2\71\4\0\6\71\1\0\30\71"+ "\2\u011a\65\71\1\0\1\71\1\0\2\71\4\0\6\71"+ "\1\0\52\71\1\u025c\20\71\1\u025c\23\71\1\0\1\71"+ "\1\0\2\71\4\0\6\71\1\0\52\71\1\u013e\20\71"+ "\1\u013e\23\71\1\0\1\71\1\0\2\71\4\0\6\71"+ "\1\0\2\71\1\u025d\33\71\1\u025d\60\71\1\0\1\71"+ "\1\0\2\71\4\0\6\71\1\0\21\71\1\u025e\52\71"+ "\1\u025e\22\71\1\0\1\71\1\0\2\71\4\0\6\71"+ "\1\0\60\71\1\u025f\16\71\1\u025f\17\71\1\0\1\71"+ "\1\0\2\71\4\0\6\71\1\0\1\u0260\27\71\2\u0261"+ "\21\71\1\u0260\43\71\1\0\1\71\1\0\2\71\4\0"+ "\6\71\1\0\30\71\2\u0262\65\71\1\0\1\71\1\0"+ "\2\71\4\0\6\71\1\0\2\71\1\u0263\33\71\1\u0263"+ "\60\71\1\0\1\71\1\0\2\71\4\0\3\71\1\u0264"+ "\2\71\1\0\57\71\1\u0264\37\71\1\0\1\71\1\0"+ "\2\71\4\0\2\71\1\u0265\3\71\1\0\17\71\1\u0265"+ "\77\71\1\0\1\71\1\0\2\71\4\0\5\71\1\u0266"+ "\1\0\2\71\1\u0267\15\71\1\u0266\15\71\1\u0267\60\71"+ "\1\0\1\71\1\0\2\71\4\0\4\71\1\u0268\1\71"+ "\1\0\61\71\1\u0268\35\71\1\0\1\71\1\0\2\71"+ "\4\0\6\71\1\0\56\71\1\u0269\5\71\1\u0269\32\71"+ "\1\0\1\71\1\0\2\71\4\0\6\71\1\0\30\71"+ "\2\u014e\65\71\1\0\1\71\1\0\2\71\4\0\6\71"+ "\1\0\56\71\1\u026a\5\71\1\u026a\32\71\1\0\1\71"+ "\1\0\2\71\4\0\1\u026b\5\71\1\0\41\71\1\u026b"+ "\55\71\1\0\1\71\1\0\2\71\4\0\6\71\1\0"+ "\66\71\1\116\13\71\1\116\14\71\1\0\1\71\1\0"+ "\2\71\4\0\1\u026c\5\71\1\0\1\71\1\u011c\1\u026d"+ "\17\71\1\u026e\5\71\2\u014e\1\71\1\u026e\2\71\1\u026d"+ "\1\71\1\u011c\1\u026c\55\71\1\0\1\71\1\0\2\71"+ "\4\0\6\71\1\0\11\71\1\u026f\25\71\1\u026f\57\71"+ "\1\0\1\71\1\0\2\71\4\0\6\71\1\0\2\71"+ "\1\u0270\33\71\1\u0270\21\71\1\u0271\16\71\1\u0271\17\71"+ "\1\0\1\71\1\0\2\71\4\0\2\71\1\u0272\3\71"+ "\1\0\17\71\1\u0272\1\71\1\u026b\30\71\1\u0250\20\71"+ "\1\u0250\1\u026b\22\71\1\0\1\71\1\0\2\71\4\0"+ "\3\71\1\u0273\2\71\1\0\52\71\1\u0274\4\71\1\u0273"+ "\13\71\1\u0274\23\71\1\0\1\71\1\0\2\71\4\0"+ "\1\u0275\5\71\1\0\41\71\1\u0275\55\71\1\0\1\71"+ "\1\0\2\71\4\0\5\71\1\u0276\1\0\20\71\1\u0276"+ "\76\71\1\0\1\71\1\0\2\71\4\0\6\71\1\0"+ "\56\71\1\u0277\5\71\1\u0277\32\71\1\0\1\71\1\0"+ "\2\71\4\0\6\71\1\0\52\71\1\116\20\71\1\116"+ "\23\71\1\0\1\71\1\0\2\71\4\0\1\u0278\5\71"+ "\1\0\41\71\1\u0278\55\71\1\0\1\71\1\0\2\71"+ "\4\0\5\71\1\u0279\1\0\20\71\1\u0279\76\71\1\0"+ "\1\71\1\0\2\71\4\0\5\71\1\u027a\1\0\20\71"+ "\1\u027a\76\71\1\0\1\71\1\0\2\71\4\0\6\71"+ "\1\0\105\71\1\u024b\3\71\1\u024b\5\71\1\0\1\71"+ "\1\0\2\71\4\0\6\71\1\0\63\71\1\u027b\11\71"+ "\1\u027b\21\71\1\0\1\71\1\0\2\71\4\0\6\71"+ "\1\0\11\71\1\u027c\25\71\1\u027c\57\71\1\0\1\71"+ "\1\0\2\71\4\0\2\71\1\116\3\71\1\0\11\71"+ "\1\u027d\5\71\1\116\17\71\1\u027d\26\71\1\116\13\71"+ "\1\116\14\71\1\0\1\71\1\0\2\71\4\0\5\71"+ "\1\u027e\1\0\1\71\1\116\16\71\1\u027e\17\71\1\116"+ "\56\71\1\0\1\71\1\0\2\71\4\0\5\71\1\u027f"+ "\1\0\20\71\1\u027f\76\71\1\0\1\71\1\0\2\71"+ "\4\0\6\71\1\0\21\71\1\116\52\71\1\116\22\71"+ "\1\0\1\71\1\0\2\71\4\0\5\71\1\u0280\1\0"+ "\20\71\1\u0280\1\u0281\52\71\1\u0281\22\71\1\0\1\71"+ "\1\0\2\71\4\0\2\71\1\u0282\1\71\1\116\1\71"+ "\1\0\17\71\1\u0282\41\71\1\116\35\71\1\0\1\71"+ "\1\0\2\71\4\0\6\71\1\0\1\71\1\u0283\36\71"+ "\1\u0283\56\71\1\0\1\71\1\0\2\71\4\0\6\71"+ "\1\0\56\71\1\u0284\5\71\1\u0284\32\71\1\0\1\71"+ "\1\0\2\71\4\0\2\71\1\116\3\71\1\0\17\71"+ "\1\116\77\71\1\0\1\71\1\0\2\71\4\0\6\71"+ "\1\0\1\u0285\52\71\1\u0285\43\71\1\0\1\71\1\0"+ "\2\71\4\0\6\71\1\0\56\71\1\116\5\71\1\116"+ "\30\71\7\0\1\u0286\16\0\1\u0286\123\0\1\u0287\47\0"+ "\1\u0287\62\0\1\u023c\16\0\1\u023c\110\0\12\u0156\1\u0288"+ "\24\u0156\1\u0159\101\u0156\1\0\134\u0156\51\0\1\u0289\65\0"+ "\1\137\12\0\6\137\1\0\3\137\2\0\7\137\1\0"+ "\1\137\1\u028a\5\137\1\0\2\137\1\0\4\137\2\0"+ "\4\137\7\0\17\137\3\0\14\137\1\0\6\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\4\150"+ "\1\u028b\1\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\7\0\1\64\11\0\1\144\115\0\1\u015e\12\0\6\u015e"+ "\1\0\3\u015e\2\0\7\u015e\1\0\7\u015e\1\0\2\u015e"+ "\1\0\4\u015e\2\0\4\u015e\7\0\17\u015e\3\0\14\u015e"+ "\1\0\6\u015e\12\0\6\u015e\1\0\3\u015e\2\0\1\u015e"+ "\3\u028c\1\u015e\1\u028c\1\u015e\1\u028d\6\u015e\1\u028c\1\0"+ "\2\u015e\1\0\4\u015e\1\u028d\1\0\4\u015e\7\0\17\u015e"+ "\3\0\11\u015e\1\u028c\2\u015e\1\0\3\u015e\2\u028c\1\u015e"+ "\12\0\6\u015e\1\0\3\u015e\2\0\1\u015e\3\u028e\1\u015e"+ "\1\u028e\1\u0161\1\0\6\u015e\1\u028e\1\0\2\u015e\1\0"+ "\4\u015e\2\0\4\u015e\7\0\17\u015e\3\0\11\u015e\1\u028e"+ "\2\u015e\1\0\3\u015e\2\u028e\1\u015e\12\0\6\u015e\1\0"+ "\2\u015e\1\u0160\2\0\1\u015e\3\u0163\1\u015e\1\u0163\1\u015e"+ "\1\0\5\u015e\1\u0162\1\u0163\1\0\2\u015e\1\0\3\u015e"+ "\1\u0162\2\0\1\u0160\3\u015e\7\0\5\u015e\1\u0162\5\u015e"+ "\1\u0162\3\u015e\3\0\11\u015e\1\u0163\2\u015e\1\0\3\u015e"+ "\2\u0163\1\u015e\12\0\6\u015e\1\0\2\u015e\1\u0160\2\0"+ "\1\u015e\3\u0164\1\u015e\1\u0164\1\u015e\1\0\5\u015e\1\u0162"+ "\1\u0164\1\0\2\u015e\1\0\3\u015e\1\u0162\1\0\1\u0163"+ "\1\u0160\3\u015e\7\0\5\u015e\1\u0162\5\u015e\1\u0162\3\u015e"+ "\3\0\11\u015e\1\u0164\2\u015e\1\0\3\u015e\2\u0164\1\u015e"+ "\12\0\6\u015e\1\0\1\u015e\1\u028f\1\u0160\2\0\1\u015e"+ "\1\u0164\2\u0165\1\u015e\1\u0165\1\u0166\1\0\5\u015e\1\u0162"+ "\1\u0165\1\0\2\u015e\1\0\3\u015e\1\u0162\1\0\1\u0163"+ "\1\u0160\1\u015e\1\u028f\1\u015e\7\0\5\u015e\1\u0162\5\u015e"+ "\1\u0162\3\u015e\3\0\11\u015e\1\u0165\2\u015e\1\0\3\u015e"+ "\2\u0165\1\u015e\12\0\6\u015e\1\0\3\u015e\2\0\2\u015e"+ "\2\u0290\1\u015e\1\u0290\1\u0166\1\0\6\u015e\1\u0290\1\0"+ "\2\u015e\1\0\4\u015e\2\0\4\u015e\7\0\17\u015e\3\0"+ "\11\u015e\1\u0290\2\u015e\1\0\3\u015e\2\u0290\1\u015e\12\0"+ "\1\u015e\1\u0291\4\u015e\1\0\2\u015e\1\u0291\2\0\1\u015e"+ "\5\u0291\1\u015e\1\0\5\u015e\2\u0291\1\0\2\u015e\1\0"+ "\2\u0291\1\u015e\1\u0291\2\0\2\u0291\2\u015e\7\0\3\u015e"+ "\1\u0291\1\u015e\1\u0291\5\u015e\1\u0291\3\u015e\3\0\11\u015e"+ "\1\u0291\2\u015e\1\0\3\u015e\2\u0291\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\u0292\3\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150"+ "\1\u0293\3\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\1\u0294\5\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\150\1\u0295\2\150\7\0\1\137\1\150\1\u018d"+ "\14\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\7\150\1\u0296\6\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\1\150\1\u0297\4\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\5\150\1\u0298\10\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\2\150\1\u0299\1\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\13\150\1\u018d\2\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\2\150\1\u029a\3\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\3\150\1\u029b\2\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\2\150\1\u029c\1\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\1\u029d\15\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\1\150"+ "\1\u018d\4\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\3\150\1\u029e\2\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\u029f\3\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\1\u02a0\15\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u02a1\3\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\1\u02a2"+ "\5\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\2\150\1\u02a3\13\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\3\150\1\u02a4\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\2\150\1\u02a5\13\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u02a6\3\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\7\150\1\u02a7\6\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\150\1\u02a8\2\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\3\150\1\u02a9\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\2\150\1\u02aa\3\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\3\150\1\u02ab"+ "\2\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\7\150\1\u02ac\6\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\150\1\u02ad\2\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\3\150\1\u02ae\2\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\1\u02af\15\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\5\150\1\u02b0\10\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\2\150\1\u02b1\3\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\3\150\1\u02a4\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\150\1\u02b2\2\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\3\150\1\u02b3"+ "\2\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\150"+ "\1\u02b4\2\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\4\150\1\u02b5\1\150\1\0\1\137\1\150"+ "\1\0\1\150\1\u02b6\2\150\2\0\2\150\1\u02b7\1\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\1\u02b8\5\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\2\150\1\u02b9\3\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\3\150\1\u02ba\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\3\150\1\u02bb\2\0\4\150\7\0\1\137\16\150"+ "\3\0\1\150\1\u02bc\12\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\7\150\1\u02bd\6\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\2\150\1\u02be\3\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\1\150\1\u02bf\2\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\1\u02c0"+ "\4\150\1\u02c1\10\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\1\150\1\u02c2\4\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\2\150\1\u02c3\13\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\5\150\1\u02c4"+ "\10\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u02c5"+ "\3\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\2\150"+ "\1\u02c6\1\150\7\0\1\137\5\150\1\u02c7\10\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\1\150\1\u018d\12\150\1\0\5\150\14\0\1\u02c8\7\0"+ "\1\u02c8\3\0\5\u02c8\7\0\2\u02c8\4\0\2\u02c8\1\0"+ "\1\u02c8\2\0\2\u02c8\14\0\1\u02c8\1\0\1\u02c8\5\0"+ "\1\u02c8\17\0\1\u02c8\6\0\2\u02c8\14\0\1\u02c9\7\0"+ "\1\u02c9\3\0\5\u02c9\7\0\2\u02c9\4\0\2\u02c9\1\0"+ "\1\u02c9\2\0\2\u02c9\14\0\1\u02c9\1\0\1\u02c9\5\0"+ "\1\u02c9\17\0\1\u02c9\6\0\2\u02c9\13\0\1\u02ca\47\0"+ "\1\u02ca\156\0\1\u02cb\115\0\1\u02cc\116\0\1\u02cd\203\0"+ "\1\u02ce\42\0\1\u02cf\47\0\1\u02cf\156\0\1\u02d0\115\0"+ "\1\u02d1\116\0\1\u02d2\203\0\1\u02d3\54\0\1\u02d4\124\0"+ "\6\u01a8\1\u01a9\3\u01a8\2\0\1\u01a8\3\0\1\u01a8\4\0"+ "\5\u01a8\5\0\4\u01a8\2\0\4\u01a8\10\0\16\u01a8\3\0"+ "\11\u01a8\1\0\2\u01a8\1\0\3\u01a8\2\0\21\u01a8\1\u01a9"+ "\115\u01a8\103\0\1\u02d5\115\0\1\u02d6\134\0\1\u02d7\116\0"+ "\1\u02d8\33\0\1\u02d9\2\0\1\u02da\143\0\1\u02db\72\0"+ "\1\u02dc\156\0\1\u02dd\20\0\1\u02de\110\0\1\u02df\144\0"+ "\1\u02e0\135\0\1\u02e1\121\0\1\u02e2\154\0\1\u02e3\135\0"+ "\1\u02e4\120\0\1\u02e5\203\0\1\u02e6\111\0\1\u02e7\13\0"+ "\1\u02e8\1\0\1\u02e9\1\u02ea\6\0\1\u02eb\26\0\10\u01bb"+ "\1\u02ec\26\u01bb\1\u02ed\101\u01bb\1\u02ee\5\u01bb\1\u02ef\1\247"+ "\17\u01bb\2\247\1\u01bb\1\247\2\u01bb\1\247\1\u02f0\5\247"+ "\5\u01bb\1\247\52\u01bb\1\247\6\u01bb\2\247\2\u02f1\1\u02f2"+ "\6\u02f1\1\u021a\125\u02f1\11\u02f2\1\u021a\125\u02f2\2\u02f1\1\u02f2"+ "\5\u02f1\1\u01be\1\u02f3\17\u02f1\2\u02f4\1\u02f1\1\u02f5\2\u02f1"+ "\1\u01be\1\u02f6\4\u01be\1\u02f4\5\u02f1\1\u01be\52\u02f1\1\u02f5"+ "\6\u02f1\2\u02f5\2\u01c2\1\0\134\u01c2\51\0\1\u02f7\65\0"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\1\150\1\u02f8\4\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\150\1\u02f9\2\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\1\150\1\u02fa\1\u02fb"+ "\3\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\2\150\1\u02fc\13\150\3\0\14\150\1\0"+ "\1\u02fd\4\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\150\1\u02fe\4\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\3\150\1\u02ff\2\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\3\150\1\u0300"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\150"+ "\1\u0301\2\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\1\u0302\15\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\11\150\1\u0303\4\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\2\150\1\u0304\1\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\1\150"+ "\1\u0305\4\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\2\150\1\u0306\1\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\150\1\u0307\2\150\7\0\1\137\1\u0308"+ "\15\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\3\150\1\u0309"+ "\2\150\1\0\1\137\1\150\1\0\4\150\2\0\2\150"+ "\1\u030a\1\150\7\0\1\137\11\150\1\u030b\4\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\150\1\u030c\2\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\3\150\1\u030d"+ "\2\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\150"+ "\1\u030e\1\150\1\u030f\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\3\150\1\u0310\2\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u0311\3\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u0312"+ "\3\150\1\0\1\137\1\150\1\0\4\150\2\0\3\150"+ "\1\u0313\7\0\1\137\2\150\1\u0314\1\u0315\1\u0316\2\150"+ "\1\u0317\4\150\1\u0318\1\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\2\150\1\u0319\1\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\u031a\3\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\2\150"+ "\1\u031b\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\3\150\1\u031c\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\1\u031d\4\150\1\u031e\10\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\2\150\1\u031f\13\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\7\150\1\u0320\6\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u0321\3\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\1\u0322\15\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\7\150\1\u0323\6\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\1\150\1\u0324\4\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\11\150\1\u0325\4\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\3\150\1\u0326\2\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\2\150\1\u0327\13\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\3\150\1\u0328\2\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\3\150\1\u0329\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\1\150\1\u032a\4\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\1\u032b\5\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150"+ "\1\u032c\3\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\2\150\1\u032d\13\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\7\150\1\u032e\6\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u032f\3\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\3\150\1\u0330\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\u015e\12\0"+ "\6\u015e\1\0\3\u015e\2\0\2\u015e\2\u0331\3\u015e\1\0"+ "\7\u015e\1\0\2\u015e\1\0\4\u015e\2\0\4\u015e\7\0"+ "\17\u015e\3\0\14\u015e\1\0\5\u015e\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u0332"+ "\3\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\1\150\1\u0333\4\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\5\150\1\u0334\10\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\3\150\1\u0335\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\3\150\1\u0336\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\7\150\1\u0337\6\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\4\150\1\u0338\1\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\3\150\1\u0339\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\1\u033a\15\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\2\150\1\u033b\3\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u033c"+ "\3\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\1\u033d\5\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\1\u033e\15\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\1\150\1\u033f\4\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\2\150\1\u0340\1\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u02a6"+ "\3\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\3\150"+ "\1\u0341\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\1\150\1\u0342\4\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\150\1\u02ad\2\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\u01fc\1\0"+ "\3\u01fc\2\0\7\u01fc\1\0\1\u0343\6\u01fc\1\0\1\137"+ "\1\u01fc\1\0\4\u01fc\2\0\4\u01fc\7\0\1\137\16\u01fc"+ "\3\0\14\u01fc\1\0\5\u01fc\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\4\150\1\u02b5\1\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\2\150\1\u02c3\13\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\7\150\1\u0344\6\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\1\u0345\4\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\2\150\1\u0346\3\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\1\u0347\5\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\2\150\1\u0348\13\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\2\150\1\u0349\3\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\3\150\1\u034a\7\0\1\137\16\150\3\0"+ "\14\150\1\0\1\150\1\u034b\3\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u034c"+ "\3\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\2\150"+ "\1\u034d\1\150\7\0\1\137\11\150\1\u034e\4\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\6\150\1\u034f"+ "\7\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\14\150\1\u0350\1\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\1\u0351\1\u0352\4\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\2\150\1\u0353\3\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\2\150\1\u0354\3\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\7\150\1\u0355\6\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\3\150"+ "\1\u0356\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\3\150\1\u0357"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\3\150\1\u0358\7\0\1\137\2\150\1\u0359\12\150"+ "\1\u035a\3\0\14\150\1\0\5\150\1\137\12\0\3\150"+ "\1\u035b\2\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\u035c"+ "\3\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\u0345\3\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\1\150\1\u035d\4\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\2\150\1\u035e"+ "\13\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\5\150\1\u035f\10\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\1\150\1\u0360\4\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\3\150\1\u0361\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\5\150\1\u0362\10\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\150\1\u0363\2\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\2\320\1\0"+ "\1\320\1\0\2\320\4\0\6\320\1\0\60\320\1\u0364"+ "\36\320\1\0\1\320\1\0\2\320\4\0\6\320\1\0"+ "\54\320\1\u0365\42\320\1\0\1\320\1\0\2\320\4\0"+ "\6\320\1\0\60\320\1\u0366\34\320\13\0\1\u0367\47\0"+ "\1\u0367\66\0\6\u0220\1\0\3\u0220\2\0\10\u0220\1\0"+ "\6\u0220\4\0\4\u0220\1\0\5\u0220\10\0\16\u0220\3\0"+ "\14\u0220\1\0\5\u0220\74\0\1\u0368\123\0\1\u0369\117\0"+ "\1\u036a\31\0\1\u036b\136\0\1\u036c\4\0\1\u036d\100\0"+ "\1\u036e\41\0\1\u036f\127\0\1\u0370\121\0\1\u0371\17\0"+ "\1\u0372\101\0\1\u0373\6\0\1\u0374\5\0\1\u0375\120\0"+ "\1\u0376\172\0\1\u0377\133\0\1\u0378\143\0\1\u0379\136\0"+ "\1\u037a\50\0\6\u022e\1\0\3\u022e\2\0\10\u022e\1\0"+ "\6\u022e\4\0\4\u022e\1\0\5\u022e\10\0\16\u022e\3\0"+ "\14\u022e\1\0\5\u022e\105\0\1\u037b\135\0\2\u0230\136\0"+ "\1\u0230\74\0\1\u0230\135\0\1\u0230\33\0\1\u0230\5\0"+ "\1\u0230\115\0\1\u0230\21\0\1\u0230\44\0\2\u0102\1\u037c"+ "\3\u0102\1\0\3\u0102\2\0\6\u0102\3\0\1\u0102\1\u037c"+ "\4\u0102\4\0\4\u0102\2\0\4\u0102\10\0\16\u0102\3\0"+ "\14\u0102\1\0\5\u0102\13\0\6\u0102\1\0\1\u037d\2\u0102"+ "\2\0\6\u0102\3\0\6\u0102\4\0\4\u0102\2\0\4\u0102"+ "\10\0\1\u0102\1\u037d\14\u0102\3\0\14\u0102\1\0\5\u0102"+ "\36\0\1\u037e\136\0\1\u037f\170\0\1\u0380\126\0\1\u0241"+ "\161\0\1\u0381\112\0\1\u0382\57\0\2\71\1\0\1\71"+ "\1\0\2\71\4\0\3\71\1\u0383\2\71\1\0\57\71"+ "\1\u0383\37\71\1\0\1\71\1\0\2\71\4\0\1\71"+ "\1\u0260\4\71\1\0\21\71\1\116\32\71\1\u0260\17\71"+ "\1\116\22\71\1\0\1\71\1\0\2\71\4\0\3\71"+ "\1\u0384\2\71\1\0\52\71\1\u0385\4\71\1\u0384\13\71"+ "\1\u0385\23\71\1\0\1\71\1\0\2\71\4\0\5\71"+ "\1\u0386\1\0\20\71\1\u0386\76\71\1\0\1\71\1\0"+ "\2\71\4\0\6\71\1\0\66\71\1\u0260\13\71\1\u0260"+ "\14\71\1\0\1\71\1\0\2\71\4\0\6\71\1\0"+ "\2\71\1\u0387\33\71\1\u0387\60\71\1\0\1\71\1\0"+ "\2\71\4\0\4\71\1\116\1\71\1\0\61\71\1\116"+ "\35\71\1\0\1\71\1\0\2\71\4\0\2\71\1\u0388"+ "\3\71\1\0\17\71\1\u0388\77\71\1\0\1\71\1\0"+ "\2\71\4\0\6\71\1\0\1\71\1\u027b\36\71\1\u027b"+ "\56\71\1\0\1\71\1\0\2\71\4\0\6\71\1\0"+ "\2\71\1\116\33\71\1\116\60\71\1\0\1\71\1\0"+ "\2\71\4\0\5\71\1\u0260\1\0\20\71\1\u0260\76\71"+ "\1\0\1\71\1\0\2\71\4\0\6\71\1\0\66\71"+ "\1\u0389\13\71\1\u0389\14\71\1\0\1\71\1\0\2\71"+ "\4\0\6\71\1\0\60\71\1\u038a\16\71\1\u038a\17\71"+ "\1\0\1\71\1\0\2\71\4\0\6\71\1\0\63\71"+ "\1\u038b\11\71\1\u038b\21\71\1\0\1\71\1\0\2\71"+ "\4\0\6\71\1\0\21\71\1\u038c\52\71\1\u038c\22\71"+ "\1\0\1\71\1\0\2\71\4\0\6\71\1\0\1\u0260"+ "\52\71\1\u0260\43\71\1\0\1\71\1\0\2\71\4\0"+ "\6\71\1\0\16\71\1\u026b\57\71\1\u026b\20\71\1\0"+ "\1\71\1\0\2\71\4\0\6\71\1\0\11\71\1\u038d"+ "\25\71\1\u038d\57\71\1\0\1\71\1\0\2\71\4\0"+ "\6\71\1\0\60\71\1\u026a\16\71\1\u026a\17\71\1\0"+ "\1\71\1\0\2\71\4\0\3\71\1\u038e\2\71\1\0"+ "\57\71\1\u038e\37\71\1\0\1\71\1\0\2\71\4\0"+ "\6\71\1\0\11\71\1\u0272\25\71\1\u0272\57\71\1\0"+ "\1\71\1\0\2\71\4\0\5\71\1\u038f\1\0\20\71"+ "\1\u038f\76\71\1\0\1\71\1\0\2\71\4\0\6\71"+ "\1\0\52\71\1\u026b\20\71\1\u026b\23\71\1\0\1\71"+ "\1\0\2\71\4\0\6\71\1\0\11\71\1\u0150\25\71"+ "\1\u0150\57\71\1\0\1\71\1\0\2\71\4\0\6\71"+ "\1\0\67\71\1\116\10\71\1\116\16\71\1\0\1\71"+ "\1\0\2\71\4\0\6\71\1\0\2\71\1\u0390\33\71"+ "\1\u0390\60\71\1\0\1\71\1\0\2\71\4\0\6\71"+ "\1\0\2\71\1\u014e\33\71\1\u014e\60\71\1\0\1\71"+ "\1\0\2\71\4\0\6\71\1\0\2\71\1\u027b\33\71"+ "\1\u027b\60\71\1\0\1\71\1\0\2\71\4\0\6\71"+ "\1\0\2\71\1\u0150\33\71\1\u0150\60\71\1\0\1\71"+ "\1\0\2\71\4\0\6\71\1\0\21\71\1\u0391\52\71"+ "\1\u0391\22\71\1\0\1\71\1\0\2\71\4\0\6\71"+ "\1\0\56\71\1\u024f\5\71\1\u024f\32\71\1\0\1\71"+ "\1\0\2\71\4\0\6\71\1\0\52\71\1\u0392\20\71"+ "\1\u0392\23\71\1\0\1\71\1\0\2\71\4\0\3\71"+ "\1\u0393\2\71\1\0\57\71\1\u0393\37\71\1\0\1\71"+ "\1\0\2\71\4\0\6\71\1\0\11\71\1\116\25\71"+ "\1\116\57\71\1\0\1\71\1\0\2\71\4\0\6\71"+ "\1\0\1\71\1\u0394\36\71\1\u0394\56\71\1\0\1\71"+ "\1\0\2\71\4\0\3\71\1\u013f\2\71\1\0\57\71"+ "\1\u013f\37\71\1\0\1\71\1\0\2\71\4\0\2\71"+ "\1\u0395\3\71\1\0\17\71\1\u0395\77\71\1\0\1\71"+ "\1\0\2\71\4\0\5\71\1\116\1\0\20\71\1\116"+ "\76\71\1\0\1\71\1\0\2\71\4\0\1\71\1\u010e"+ "\4\71\1\0\54\71\1\u010e\42\71\1\0\1\71\1\0"+ "\2\71\4\0\6\71\1\0\63\71\1\u0396\11\71\1\u0396"+ "\21\71\1\0\1\71\1\0\2\71\4\0\2\71\1\u0397"+ "\3\71\1\0\17\71\1\u0397\77\71\1\0\1\71\1\0"+ "\2\71\4\0\6\71\1\0\63\71\1\u0398\11\71\1\u0398"+ "\21\71\1\0\1\71\1\0\2\71\4\0\6\71\1\0"+ "\1\71\1\u0399\36\71\1\u0399\56\71\1\0\1\71\1\0"+ "\2\71\4\0\6\71\1\0\16\71\1\u039a\57\71\1\u039a"+ "\20\71\1\0\1\71\1\0\2\71\4\0\6\71\1\0"+ "\63\71\1\116\11\71\1\116\21\71\1\0\1\71\1\0"+ "\2\71\4\0\1\71\1\u039b\4\71\1\0\54\71\1\u039b"+ "\42\71\1\0\1\71\1\0\2\71\4\0\6\71\1\0"+ "\2\71\1\u039c\33\71\1\u039c\60\71\1\0\1\71\1\0"+ "\2\71\4\0\5\71\1\u039d\1\0\20\71\1\u039d\76\71"+ "\1\0\1\71\1\0\2\71\4\0\6\71\1\0\1\116"+ "\52\71\1\116\43\71\1\0\1\71\1\0\2\71\4\0"+ "\6\71\1\0\52\71\1\u039e\20\71\1\u039e\23\71\1\0"+ "\1\71\1\0\2\71\4\0\3\71\1\u039d\2\71\1\0"+ "\57\71\1\u039d\1\u038a\16\71\1\u038a\17\71\1\0\1\71"+ "\1\0\2\71\4\0\4\71\1\u0256\1\71\1\0\61\71"+ "\1\u0256\35\71\1\0\1\71\1\0\2\71\4\0\6\71"+ "\1\0\56\71\1\u039f\5\71\1\u039f\32\71\1\0\1\71"+ "\1\0\2\71\4\0\6\71\1\0\1\71\1\u03a0\36\71"+ "\1\u03a0\56\71\1\0\1\71\1\0\2\71\4\0\6\71"+ "\1\0\11\71\1\u03a1\25\71\1\u03a1\57\71\1\0\1\71"+ "\1\0\2\71\4\0\6\71\1\0\11\71\1\u03a2\25\71"+ "\1\u03a2\57\71\1\0\1\71\1\0\2\71\4\0\6\71"+ "\1\0\2\71\1\u014e\6\71\1\116\24\71\1\u014e\1\116"+ "\57\71\1\0\1\71\1\0\2\71\4\0\6\71\1\0"+ "\16\71\1\116\57\71\1\116\20\71\1\0\1\71\1\0"+ "\2\71\4\0\6\71\1\0\67\71\1\116\10\71\1\116"+ "\1\u03a3\6\71\1\u03a3\6\71\1\0\1\71\1\0\2\71"+ "\4\0\5\71\1\u03a4\1\0\20\71\1\u03a4\76\71\1\0"+ "\1\71\1\0\2\71\4\0\6\71\1\0\2\71\1\u013f"+ "\33\71\1\u013f\60\71\1\0\1\71\1\0\2\71\4\0"+ "\6\71\1\0\60\71\1\u03a5\16\71\1\u03a5\15\71\14\0"+ "\1\u03a6\61\0\1\u03a6\141\0\2\u0288\2\0\1\u0288\43\0"+ "\1\u03a7\124\0\1\137\12\0\1\137\1\u03a8\4\137\1\0"+ "\2\137\1\u03a8\2\0\1\137\5\u03a8\1\137\1\0\5\137"+ "\2\u03a8\1\0\2\137\1\0\2\u03a8\1\137\1\u03a8\2\0"+ "\2\u03a8\2\137\7\0\3\137\1\u03a8\1\137\1\u03a8\5\137"+ "\1\u03a8\3\137\3\0\11\137\1\u03a8\2\137\1\0\3\137"+ "\2\u03a8\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\5\150\1\u03a9\10\150\3\0"+ "\14\150\1\0\5\150\1\u015e\12\0\6\u015e\1\0\3\u015e"+ "\2\0\1\u015e\3\u028c\1\u015e\1\u028c\1\u015e\1\0\5\u015e"+ "\1\u0162\1\u028c\1\0\2\u015e\1\0\3\u015e\1\u0162\2\0"+ "\4\u015e\7\0\5\u015e\1\u0162\5\u015e\1\u0162\3\u015e\3\0"+ "\11\u015e\1\u028c\2\u015e\1\0\3\u015e\2\u028c\30\0\3\u028c"+ "\1\0\1\u028c\10\0\1\u028c\60\0\1\u028c\6\0\2\u028c"+ "\1\u015e\12\0\6\u015e\1\0\1\u015e\1\u015f\1\u015e\2\0"+ "\1\u015e\3\u028e\1\u015e\1\u028e\1\u0161\1\0\6\u015e\1\u028e"+ "\1\0\2\u015e\1\0\4\u015e\2\0\2\u015e\1\u015f\1\u015e"+ "\7\0\17\u015e\3\0\11\u015e\1\u028e\2\u015e\1\0\3\u015e"+ "\2\u028e\1\u015e\12\0\6\u015e\1\0\1\u015e\1\u028f\1\u015e"+ "\2\0\2\u015e\2\u0290\1\u015e\1\u0290\1\u0166\1\0\6\u015e"+ "\1\u0290\1\0\2\u015e\1\0\4\u015e\2\0\2\u015e\1\u028f"+ "\1\u015e\7\0\17\u015e\3\0\11\u015e\1\u0290\2\u015e\1\0"+ "\3\u015e\2\u0290\1\u015e\12\0\1\u015e\1\u0291\4\u015e\1\0"+ "\1\u015e\1\u028f\1\u0291\2\0\1\u015e\5\u0291\1\u03aa\1\0"+ "\5\u015e\2\u0291\1\0\2\u015e\1\0\2\u0291\1\u015e\1\u0291"+ "\2\0\2\u0291\1\u028f\1\u015e\7\0\3\u015e\1\u0291\1\u015e"+ "\1\u0291\5\u015e\1\u0291\3\u015e\3\0\11\u015e\1\u0291\2\u015e"+ "\1\0\3\u015e\2\u0291\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\3\150\1\u017b\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\1\u03ab\5\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\u03ac\3\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\3\150"+ "\1\u03ad\2\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\u03ae\3\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\1\u03af\15\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\3\150\1\u018d\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\2\150\1\u018d\1\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\5\150\1\u03b0\10\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\2\150\1\u03b1\13\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\3\150\1\u0294\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\150\1\u03b2\2\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\150\1\u03b3\2\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\150\1\u03b4"+ "\2\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\2\150\1\u03b5\1\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\u03b6\3\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\11\150\1\u018d"+ "\4\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\3\150\1\u03b7\12\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\u018d"+ "\3\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\150\1\u03b8\2\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\u03b9\3\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\1\u03ba\15\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\2\150\1\u02fb\1\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150"+ "\1\u03bb\3\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\6\150\1\u03b6\7\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\u0173\3\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\2\150\1\u03bc\3\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\2\150\1\u03bd\13\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\1\150\1\u03b2\4\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\2\150\1\u02b1\3\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\2\150\1\u02c5"+ "\13\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\3\150\1\u0298\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150"+ "\1\u03be\3\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\3\150\1\u03bf\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\1\150\1\u03b6\4\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\150\1\u03c0\2\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\1\u03c1\5\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u03c2\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\1\150\1\u03c3\2\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\u03c4\3\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\2\150\1\u03c5\3\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\5\150"+ "\1\u03c6\10\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\150\1\u03c7"+ "\2\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\2\150\1\u03c8\1\150\7\0\1\137\1\u03ba\15\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\1\u018d\15\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\2\150\1\u03bc\1\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150"+ "\1\u03c9\3\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\14\150\1\u03ca\1\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\3\150\1\u03cb\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\15\150\1\u03cc"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\2\150\1\u02a4\1\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\3\150\1\u018d\12\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\150\1\u03cd\2\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\4\150\1\u018d\11\150"+ "\3\0\14\150\1\0\5\150\14\0\1\u03ce\7\0\1\u03ce"+ "\3\0\5\u03ce\7\0\2\u03ce\4\0\2\u03ce\1\0\1\u03ce"+ "\2\0\2\u03ce\14\0\1\u03ce\1\0\1\u03ce\5\0\1\u03ce"+ "\17\0\1\u03ce\6\0\2\u03ce\14\0\1\u03cf\7\0\1\u03cf"+ "\3\0\5\u03cf\7\0\2\u03cf\4\0\2\u03cf\1\0\1\u03cf"+ "\2\0\2\u03cf\14\0\1\u03cf\1\0\1\u03cf\5\0\1\u03cf"+ "\17\0\1\u03cf\6\0\2\u03cf\14\0\1\u03d0\61\0\1\u03d0"+ "\130\0\1\u03d1\126\0\1\u02cb\161\0\1\u03d2\112\0\1\u03d3"+ "\73\0\1\u03d4\61\0\1\u03d4\130\0\1\u03d5\126\0\1\u02d0"+ "\161\0\1\u03d6\112\0\1\u03d7\100\0\1\u03d8\205\0\1\u03d9"+ "\126\0\1\u02d5\120\0\1\u03da\136\0\1\u03db\174\0\1\u03dc"+ "\77\0\1\u03dd\156\0\1\u03de\14\0\1\u03df\102\0\1\u03e0"+ "\135\0\1\u03e1\16\0\1\u03e2\121\0\1\u03e3\156\0\1\u03e4"+ "\115\0\1\u03e5\177\0\1\u03e6\75\0\1\u03e7\35\0\1\u03e8"+ "\77\0\1\u03e9\136\0\1\u03ea\200\0\1\u03eb\112\0\1\u03ec"+ "\160\0\1\u03ed\131\0\1\u03ee\136\0\1\u03ef\105\0\1\u03f0"+ "\154\0\1\u03f1\55\0\2\u01bb\1\u02ee\5\u01bb\1\u03f2\126\u01bb"+ "\10\u02ee\1\u02ec\126\u02ee\2\u02ef\1\u03f2\5\u02ef\1\u01bc\26\u02ef"+ "\1\u03f3\77\u02ef\10\u01bb\1\u02ec\3\u01bb\1\u03f4\7\u01bb\1\u03f4"+ "\3\u01bb\5\u03f4\2\u01bb\1\u02ed\4\u01bb\2\u03f4\4\u01bb\2\u03f4"+ "\1\u01bb\1\u03f4\2\u01bb\2\u03f4\14\u01bb\1\u03f4\1\u01bb\1\u03f4"+ "\5\u01bb\1\u03f4\17\u01bb\1\u03f4\6\u01bb\2\u03f4\2\u02f1\1\u02f2"+ "\6\u02f1\1\u01c0\125\u02f1\11\u02f2\1\u01c0\125\u02f2\11\0\1\u021a"+ "\125\0\2\u02f1\1\u02f2\6\u02f1\1\u021a\17\u02f1\2\u02f5\1\u02f1"+ "\1\u02f5\10\u02f1\1\u02f5\60\u02f1\1\u02f5\6\u02f1\2\u02f5\2\u02f1"+ "\1\u02f2\6\u02f1\1\u021a\17\u02f1\2\u01be\1\u02f1\1\u01be\10\u02f1"+ "\1\u01be\60\u02f1\1\u01be\6\u02f1\2\u01be\2\u02f1\1\u02f2\6\u02f1"+ "\1\u01c0\2\u02f1\1\u03f5\7\u02f1\1\u03f5\3\u02f1\5\u03f5\7\u02f1"+ "\2\u03f5\4\u02f1\2\u03f5\1\u02f1\1\u03f5\2\u02f1\2\u03f5\14\u02f1"+ "\1\u03f5\1\u02f1\1\u03f5\5\u02f1\1\u03f5\17\u02f1\1\u03f5\6\u02f1"+ "\2\u03f5\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\u03f6\3\150\7\0\1\137\5\150\1\u03f7\10\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\2\150"+ "\1\u03f8\13\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\5\150\1\u03f9\6\150\1\u03fa\1\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\u03fb\5\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\1\u03fc\5\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u03fd\3\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\2\150\1\u03fe\13\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\2\150\1\u03ff\3\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\3\150\1\u0400\2\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\1\150\1\u0401\4\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\7\150\1\u0402\6\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\5\150\1\u0403\10\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\150\1\u0404\4\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u0405\3\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\3\150\1\u0406\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\3\150"+ "\1\u0407\2\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\3\150\1\u0408\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\3\150\1\u0409\7\0\1\137\2\150\1\u040a\13\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\2\150\1\u040b\1\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\7\150\1\u040c\6\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\1\150\1\u040d\4\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\2\150\1\u040e\1\u040f\2\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\4\150\1\u0410\11\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\1\u0411\15\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\4\150\1\u0412\11\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\150\1\u0413\4\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\1\u0414\5\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\u0415\3\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150"+ "\1\u0416\3\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\1\u0417\15\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\u0418\3\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\u0419\3\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\1\u041a\5\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\150\1\u041b\2\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\4\150"+ "\1\u041c\1\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\u041d\3\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\3\150\1\u041e\2\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\1\150\1\u01e4\4\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\10\150\1\u041f\5\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\3\150\1\u0420\12\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\2\150\1\u0421\4\150\1\u0422"+ "\6\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\3\150\1\u0423"+ "\2\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\1\u0424\10\150\1\u0425\4\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\15\150\1\u0426\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\u0427\3\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u0428\3\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\2\150\1\u0429\11\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\u042a"+ "\3\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\u042b\3\150\7\0\1\137\1\u042c\15\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\u042d\3\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\6\150\1\u042e"+ "\7\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\150\1\u042f\2\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\u0430"+ "\3\150\7\0\1\137\15\150\1\u0431\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\2\150\1\u0432\3\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\1\u0433\15\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\11\150"+ "\1\u0434\4\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u0435\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\u0436"+ "\3\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\2\150\1\u0437\3\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\3\150\1\u0438\2\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\2\150\1\u0439\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\u015e\12\0\6\u015e"+ "\1\0\3\u015e\2\0\2\u015e\2\u0331\2\u015e\1\u043a\1\0"+ "\7\u015e\1\0\2\u015e\1\0\4\u015e\2\0\4\u015e\7\0"+ "\17\u015e\3\0\14\u015e\1\0\5\u015e\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\1\u043b\15\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\150\1\u043c"+ "\2\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\2\150\1\u043d\3\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\2\150\1\u043e\3\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u043f\3\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\u0440\3\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\4\150"+ "\1\u0441\1\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\u0442\3\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\2\150\1\u0443\3\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\2\150\1\u0444\1\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\u0445\3\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\1\u0446\5\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\3\150"+ "\1\u0447\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\150\1\u0401\2\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\11\150\1\u0448\4\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u0449\3\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u044a\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\u03ba"+ "\3\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\5\150\1\u044b\10\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\137\1\0\3\137\2\0"+ "\7\137\1\0\1\137\1\u044c\5\137\1\0\2\137\1\0"+ "\4\137\2\0\4\137\7\0\17\137\3\0\14\137\1\0"+ "\6\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\2\150\1\u044d\1\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\u044e\5\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\u02fb\1\u044f\2\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\1\150\1\u0450\2\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\2\150\1\u0451\3\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\7\150\1\u0452\6\150\3\0"+ "\1\u0453\13\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u0454\3\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\u0455\3\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\5\150\1\u0456\10\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\2\150\1\u0457\1\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\1\150\1\u0458\2\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\150\1\u0459\2\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\5\150\1\u045a\10\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\1\u045b\5\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\2\150\1\u045c\1\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\1\u045d\5\150\1\0"+ "\3\150\2\0\4\150\1\u045e\2\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\3\150\1\u02fb\12\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\1\0"+ "\1\u045f\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\3\150\1\u0460\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\12\150\1\u0461\3\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\1\u0462\5\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\150\1\u0463\2\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\3\150\1\u0464\12\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\3\150\1\u0465\2\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\12\150\1\u02fb"+ "\3\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\6\150\1\u0466\7\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\5\150\1\u0467\10\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\2\150\1\u032a\3\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\4\150\1\u02fb"+ "\11\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u0468"+ "\3\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\3\150\1\u0469\12\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\2\150\1\u046a\3\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\15\150\1\u046b"+ "\3\0\14\150\1\0\5\150\2\320\1\0\1\320\1\0"+ "\2\320\4\0\6\320\1\0\40\320\1\u046c\56\320\1\0"+ "\1\320\1\0\2\320\4\0\6\320\1\0\40\320\1\u046d"+ "\56\320\1\0\1\320\1\0\2\320\4\0\6\320\1\0"+ "\36\320\1\u046e\56\320\20\0\1\u046f\21\0\1\u046f\170\0"+ "\1\u036b\103\0\1\u0470\174\0\1\u0471\101\0\1\324\172\0"+ "\1\u0472\101\0\1\u0473\156\0\1\u0474\160\0\1\u0475\75\0"+ "\1\u0476\137\0\1\u0477\17\0\1\u0478\116\0\1\u0479\174\0"+ "\1\u047a\115\0\1\u047b\122\0\1\u047c\154\0\1\u047d\134\0"+ "\1\u047e\166\0\1\u047f\111\0\1\u036e\136\0\1\u0480\156\0"+ "\1\u0481\46\0\3\u0102\1\u0482\2\u0102\1\0\3\u0102\2\0"+ "\6\u0102\3\0\6\u0102\4\0\4\u0102\2\0\4\u0102\10\0"+ "\5\u0102\1\u0482\10\u0102\3\0\14\u0102\1\0\5\u0102\13\0"+ "\6\u0102\1\0\1\u0102\1\u0483\1\u0102\2\0\6\u0102\3\0"+ "\6\u0102\4\0\4\u0102\2\0\2\u0102\1\u0483\1\u0102\10\0"+ "\16\u0102\3\0\14\u0102\1\0\5\u0102\12\0\1\u0484\207\0"+ "\1\u0241\4\0\1\u0380\53\0\3\u0485\1\0\1\u0485\7\u0382"+ "\1\0\3\u0382\2\u0485\6\u0382\2\u0485\1\0\6\u0382\1\0"+ "\1\u0485\1\u0382\1\u0485\4\u0382\2\u0485\4\u0382\1\0\1\u0485"+ "\1\0\3\u0485\1\0\1\u0485\16\u0382\3\u0485\14\u0382\1\0"+ "\5\u0382\2\71\1\0\1\71\1\0\2\71\4\0\4\71"+ "\1\u026b\1\71\1\0\61\71\1\u026b\35\71\1\0\1\71"+ "\1\0\2\71\4\0\6\71\1\0\67\71\1\u024f\10\71"+ "\1\u024f\16\71\1\0\1\71\1\0\2\71\4\0\6\71"+ "\1\0\21\71\1\u011f\52\71\1\u011f\22\71\1\0\1\71"+ "\1\0\2\71\4\0\3\71\1\u039d\2\71\1\0\57\71"+ "\1\u039d\37\71\1\0\1\71\1\0\2\71\4\0\1\71"+ "\1\u026b\4\71\1\0\54\71\1\u026b\42\71\1\0\1\71"+ "\1\0\2\71\4\0\1\71\1\u024f\4\71\1\0\54\71"+ "\1\u024f\42\71\1\0\1\71\1\0\2\71\4\0\6\71"+ "\1\0\11\71\1\u0486\25\71\1\u0486\57\71\1\0\1\71"+ "\1\0\2\71\4\0\2\71\1\u0487\3\71\1\0\17\71"+ "\1\u0487\77\71\1\0\1\71\1\0\2\71\4\0\6\71"+ "\1\0\2\71\1\u0488\6\71\1\u0390\24\71\1\u0488\1\u0390"+ "\57\71\1\0\1\71\1\0\2\71\4\0\6\71\1\0"+ "\56\71\1\u0489\5\71\1\u0489\32\71\1\0\1\71\1\0"+ "\2\71\4\0\6\71\1\0\63\71\1\u024f\11\71\1\u024f"+ "\21\71\1\0\1\71\1\0\2\71\4\0\6\71\1\0"+ "\21\71\1\u048a\52\71\1\u048a\22\71\1\0\1\71\1\0"+ "\2\71\4\0\6\71\1\0\11\71\1\u048b\25\71\1\u048b"+ "\57\71\1\0\1\71\1\0\2\71\4\0\6\71\1\0"+ "\21\71\1\u0150\52\71\1\u0150\22\71\1\0\1\71\1\0"+ "\2\71\4\0\5\71\1\u048c\1\0\20\71\1\u048c\76\71"+ "\1\0\1\71\1\0\2\71\4\0\6\71\1\0\21\71"+ "\1\u048d\52\71\1\u048d\22\71\1\0\1\71\1\0\2\71"+ "\4\0\1\71\1\u011a\4\71\1\0\54\71\1\u011a\42\71"+ "\1\0\1\71\1\0\2\71\4\0\6\71\1\0\2\71"+ "\1\u026b\33\71\1\u026b\60\71\1\0\1\71\1\0\2\71"+ "\4\0\6\71\1\0\2\71\1\u048e\33\71\1\u048e\60\71"+ "\1\0\1\71\1\0\2\71\4\0\6\71\1\0\11\71"+ "\1\u048f\25\71\1\u048f\57\71\1\0\1\71\1\0\2\71"+ "\4\0\6\71\1\0\2\71\1\u0490\33\71\1\u0490\60\71"+ "\1\0\1\71\1\0\2\71\4\0\6\71\1\0\56\71"+ "\1\u0491\5\71\1\u0491\32\71\1\0\1\71\1\0\2\71"+ "\4\0\2\71\1\u024f\3\71\1\0\17\71\1\u024f\77\71"+ "\1\0\1\71\1\0\2\71\4\0\6\71\1\0\67\71"+ "\1\u0492\10\71\1\u0492\16\71\1\0\1\71\1\0\2\71"+ "\4\0\6\71\1\0\22\71\1\u0493\10\71\1\u0493\63\71"+ "\1\0\1\71\1\0\2\71\4\0\6\71\1\0\52\71"+ "\1\u0149\20\71\1\u0149\23\71\1\0\1\71\1\0\2\71"+ "\4\0\6\71\1\0\16\71\1\u0390\57\71\1\u0390\20\71"+ "\1\0\1\71\1\0\2\71\4\0\6\71\1\0\52\71"+ "\1\u011f\20\71\1\u011f\23\71\1\0\1\71\1\0\2\71"+ "\4\0\3\71\1\u0494\2\71\1\0\57\71\1\u0494\37\71"+ "\1\0\1\71\1\0\2\71\4\0\5\71\1\u0495\1\0"+ "\1\71\1\u0496\16\71\1\u0495\17\71\1\u0496\17\71\1\u0497"+ "\16\71\1\u0497\17\71\1\0\1\71\1\0\2\71\4\0"+ "\6\71\1\0\16\71\1\u0498\57\71\1\u0498\20\71\1\0"+ "\1\71\1\0\2\71\4\0\3\71\1\u0499\2\71\1\0"+ "\57\71\1\u0499\37\71\1\0\1\71\1\0\2\71\4\0"+ "\6\71\1\0\2\71\1\u0149\33\71\1\u0149\56\71\15\0"+ "\1\u049a\23\0\1\u049a\75\0\1\137\12\0\1\137\1\u049b"+ "\4\137\1\0\2\137\1\u049b\2\0\1\137\5\u049b\1\137"+ "\1\0\5\137\2\u049b\1\0\2\137\1\0\2\u049b\1\137"+ "\1\u049b\2\0\2\u049b\2\137\7\0\3\137\1\u049b\1\137"+ "\1\u049b\5\137\1\u049b\3\137\3\0\11\137\1\u049b\2\137"+ "\1\0\3\137\2\u049b\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\3\150\1\u049c\2\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\u015e\12\0\1\u015e"+ "\1\u0291\4\u015e\1\0\2\u015e\1\u0291\2\0\1\u015e\5\u0291"+ "\1\u03aa\1\0\5\u015e\2\u0291\1\0\2\u015e\1\0\2\u0291"+ "\1\u015e\1\u0291\2\0\2\u0291\2\u015e\7\0\3\u015e\1\u0291"+ "\1\u015e\1\u0291\5\u015e\1\u0291\3\u015e\3\0\11\u015e\1\u0291"+ "\2\u015e\1\0\3\u015e\2\u0291\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\1\150\1\u049d\4\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\3\150\1\u049e"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\1\u049f\15\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\13\150\1\u04a0\2\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\14\150\1\u02a4\1\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u04a1\3\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150"+ "\1\u03b6\3\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\2\150\1\u04a2\1\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\15\150\1\u018d\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\u04a3\3\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\7\150"+ "\1\u044e\6\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\3\150"+ "\1\u04a4\2\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\1\150\1\u03bf\4\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\150\1\u04a5\4\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\5\150"+ "\1\u04a6\10\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\3\150\1\u04a7\12\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\5\150\1\u04a8\10\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\2\150\1\u018d\3\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\1\u04a9\5\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\6\150\1\u04aa\7\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\2\150\1\u02a4\3\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\2\150\1\u02a1\1\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\1\150\1\u04ab\4\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\150\1\u04ac\2\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\3\150\1\u04ad\2\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\1\150\1\u02fb"+ "\12\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\u04ae\3\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u04af\3\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\150\1\u03c2\2\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\u04b0"+ "\3\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\150\1\u04b1\2\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\2\150\1\u0194\3\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\15\0\1\u04b2\23\0\1\u04b2"+ "\107\0\1\u04b3\207\0\1\u02cb\4\0\1\u03d1\53\0\3\u04b4"+ "\1\0\1\u04b4\7\u03d3\1\0\3\u03d3\2\u04b4\6\u03d3\2\u04b4"+ "\1\0\6\u03d3\1\0\1\u04b4\1\u03d3\1\u04b4\4\u03d3\2\u04b4"+ "\4\u03d3\1\0\1\u04b4\1\0\3\u04b4\1\0\1\u04b4\16\u03d3"+ "\3\u04b4\14\u03d3\1\0\5\u03d3\15\0\1\u04b5\23\0\1\u04b5"+ "\107\0\1\u04b6\207\0\1\u02d0\4\0\1\u03d5\53\0\3\u04b7"+ "\1\0\1\u04b7\7\u03d7\1\0\3\u03d7\2\u04b7\6\u03d7\2\u04b7"+ "\1\0\6\u03d7\1\0\1\u04b7\1\u03d7\1\u04b7\4\u03d7\2\u04b7"+ "\4\u03d7\1\0\1\u04b7\1\0\3\u04b7\1\0\1\u04b7\16\u03d7"+ "\3\u04b7\14\u03d7\1\0\5\u03d7\12\0\1\u04b8\164\0\1\u04b9"+ "\172\0\1\u04ba\136\0\1\u03e2\122\0\1\u04bb\13\0\1\u04bc"+ "\147\0\1\u04bd\111\0\1\u04be\1\0\1\u04bf\153\0\1\u04c0"+ "\140\0\1\u04c1\133\0\1\u04c2\134\0\1\u04c3\122\0\1\u04c4"+ "\117\0\1\u04c5\155\0\1\u04c6\136\0\1\u04c7\137\0\1\u04c8"+ "\140\0\1\u04c9\136\0\1\u02d5\4\0\1\u03d9\53\0\3\u04ca"+ "\1\0\1\u04ca\7\u03ec\1\0\3\u03ec\2\u04ca\6\u03ec\2\u04ca"+ "\1\0\6\u03ec\1\0\1\u04ca\1\u03ec\1\u04ca\4\u03ec\2\u04ca"+ "\4\u03ec\1\0\1\u04ca\1\0\3\u04ca\1\0\1\u04ca\16\u03ec"+ "\3\u04ca\14\u03ec\1\0\5\u03ec\42\0\1\u04cb\1\u04cc\173\0"+ "\1\u04cd\134\0\1\u04ce\137\0\1\u04cf\121\0\1\u04d0\54\0"+ "\10\u03f2\1\0\26\u03f2\1\u04d1\101\u03f2\1\0\5\u03f2\2\u02ef"+ "\17\u03f2\2\u02ef\1\u03f2\1\u02ef\2\u03f2\1\u02ef\1\u04d2\5\u02ef"+ "\5\u03f2\1\u02ef\52\u03f2\1\u02ef\6\u03f2\2\u02ef\10\u01bb\1\u02ec"+ "\3\u01bb\1\u04d3\7\u01bb\1\u04d3\3\u01bb\5\u04d3\2\u01bb\1\u02ed"+ "\4\u01bb\2\u04d3\4\u01bb\2\u04d3\1\u01bb\1\u04d3\2\u01bb\2\u04d3"+ "\14\u01bb\1\u04d3\1\u01bb\1\u04d3\5\u01bb\1\u04d3\17\u01bb\1\u04d3"+ "\6\u01bb\2\u04d3\2\u02f1\1\u02f2\6\u02f1\1\u01c0\2\u02f1\1\u04d4"+ "\7\u02f1\1\u04d4\3\u02f1\5\u04d4\7\u02f1\2\u04d4\4\u02f1\2\u04d4"+ "\1\u02f1\1\u04d4\2\u02f1\2\u04d4\14\u02f1\1\u04d4\1\u02f1\1\u04d4"+ "\5\u02f1\1\u04d4\17\u02f1\1\u04d4\6\u02f1\2\u04d4\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\150\1\u04d5"+ "\2\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\3\150\1\u04d6\2\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\2\150\1\u04d7\13\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\15\150"+ "\1\u04d8\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\150\1\u04d9\2\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\5\150\1\u04da\10\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\1\150\1\u04db\4\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\u04dc\3\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u04dd\3\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\3\150\1\u04de\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u04df\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\3\150\1\u04e0\2\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\2\150\1\u02fb\3\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\2\150\1\u04e1\1\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u04e2"+ "\3\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\u04e3"+ "\3\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\3\150\1\u04e4\2\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\3\150\1\u04e5\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\u04e6\3\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u040f\3\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\1\u04e7\15\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\1\u04e8"+ "\5\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\u04e9"+ "\3\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\150\1\u0311\2\150\7\0\1\137\5\150\1\u04ea\10\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\1\u04eb\1\u04ec"+ "\4\150\1\0\3\150\2\0\4\150\1\u04ed\2\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\150\1\u04ee\2\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\5\150\1\u04ef\10\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\150\1\u04f0\2\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u0433\1\u04f0"+ "\2\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\1\u04f1\5\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\1\u04f2\15\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\150\1\u04f3\2\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\1\u04f4\5\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\1\150\1\u04f5"+ "\4\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\6\150\1\u04e0\7\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\150\1\u04f6\2\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\11\150\1\u04f7"+ "\4\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\1\150\1\u04f8"+ "\4\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\10\150\1\u04f9\5\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\2\150\1\u04fa\3\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\2\150\1\u04fb\1\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\1\u04fc\15\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\6\150\1\u04fd\7\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\2\150\1\u04fe\3\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\2\150\1\u04ff\13\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\1\150\1\u0500\2\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u0501\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\u0502"+ "\3\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\2\150\1\u0503\3\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\150\1\u0504\4\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\5\150"+ "\1\u0505\10\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\150\1\u0506"+ "\2\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\4\150\1\u0507\11\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\1\u0446\5\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\2\150\1\u0508\11\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\150\1\u0509\2\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\1\150\1\u050a\12\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\150\1\u050b\2\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\13\150\1\u040f"+ "\2\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\1\u050c\6\150\1\0\1\u015b\1\150"+ "\1\u050d\4\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\1\u0414\5\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\2\150\1\u050e\1\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\1\150\1\u050f\12\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\u0510\1\u0511\2\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\2\150\1\u0512\1\u0513\2\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\150\1\u02fb\4\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\1\u0446\1\u0514"+ "\4\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u0515\3\150"+ "\7\0\1\137\16\150\3\0\2\150\1\u0508\11\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\1\150\1\u0516\4\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\7\150\1\u0517"+ "\6\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\1\150\1\u0518\14\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\2\150\1\u0519\3\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\10\150\1\u041f\5\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\1\150\1\u051a\4\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\1\150\1\u051b\14\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\3\150\1\u051c\12\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\1\150\1\u051d\4\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\1\150\1\u051e\4\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\3\150\1\u051f"+ "\2\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\u0520"+ "\3\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\3\150"+ "\1\u0521\1\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\3\150\1\u0522\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\u0523\3\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\4\150\1\u0524\2\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u0401\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\3\150\1\u040f\12\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\150\1\u0525\2\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\u0526\3\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\2\150\1\u0527"+ "\1\u0528\1\u0529\1\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\3\150\1\u052a\2\150\1\0\1\137\1\150\1\0"+ "\3\150\1\u052b\2\0\4\150\7\0\1\137\12\150\1\u052c"+ "\3\150\3\0\1\u052d\1\u052e\12\150\1\0\2\150\1\u052f"+ "\2\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\2\150\1\u0530\13\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\1\137\1\u0531\4\137"+ "\1\0\2\137\1\u0531\2\0\1\137\5\u0531\1\137\1\0"+ "\5\137\2\u0531\1\0\2\137\1\0\2\u0531\1\137\1\u0531"+ "\2\0\2\u0531\2\137\7\0\3\137\1\u0531\1\137\1\u0531"+ "\5\137\1\u0531\3\137\3\0\11\137\1\u0531\2\137\1\0"+ "\3\137\2\u0531\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\5\150\1\u0532\10\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u02fb\3\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\3\150"+ "\1\u0533\2\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\1\u0534\13\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\2\150\1\u0535\1\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\5\150\1\u0536\10\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\1\u0537\5\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\4\150\1\u0538"+ "\1\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\1\150\1\u0539\4\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\2\150\1\u053a\13\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\1\u053b\15\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\4\150\1\u053c"+ "\1\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u053d\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\2\150\1\u053e\3\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\6\150\1\u053f\7\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\2\150\1\u0540"+ "\13\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\150\1\u0541\2\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\u0542"+ "\3\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\2\150\1\u0543\13\150\3\0\14\150"+ "\1\0\5\150\24\0\1\u0544\112\0\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\5\150\1\u0545\10\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\150"+ "\1\u0546\2\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\7\150\1\u0547\6\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\2\150\1\u0548\3\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\u0549\3\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\1\u054a\15\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\1\u054b\15\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\4\150\1\u054c\1\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\u054d\5\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\1\u0446\5\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u040f\3\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\2\150\1\u0508\11\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\u054e\3\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\10\150\1\u054f"+ "\3\150\1\0\5\150\2\320\1\0\1\320\1\0\2\320"+ "\4\0\6\320\1\0\57\320\1\u0550\37\320\1\0\1\320"+ "\1\0\2\320\4\0\6\320\1\0\16\320\1\u0551\76\320"+ "\22\0\1\u0552\52\0\1\u0552\143\0\1\u0553\72\0\1\u0554"+ "\140\0\1\u0555\161\0\1\u0478\126\0\1\u0556\125\0\1\u0557"+ "\175\0\1\u0558\137\0\1\324\76\0\1\u0559\205\0\1\324"+ "\66\0\1\u055a\141\0\1\u055b\134\0\1\u047f\171\0\1\u0559"+ "\137\0\1\u055c\120\0\1\u055d\157\0\1\u055e\131\0\1\u055f"+ "\55\0\4\u0102\1\u0560\1\u0102\1\0\3\u0102\2\0\6\u0102"+ "\3\0\6\u0102\4\0\4\u0102\2\0\4\u0102\10\0\7\u0102"+ "\1\u0560\6\u0102\3\0\14\u0102\1\0\5\u0102\13\0\6\u0102"+ "\1\0\2\u0102\1\u0561\2\0\6\u0102\3\0\6\u0102\4\0"+ "\4\u0102\2\0\1\u0561\3\u0102\10\0\16\u0102\3\0\14\u0102"+ "\1\0\5\u0102\12\0\1\u0382\124\0\2\71\1\0\1\71"+ "\1\0\2\71\4\0\1\116\5\71\1\0\41\71\1\116"+ "\55\71\1\0\1\71\1\0\2\71\4\0\6\71\1\0"+ "\52\71\1\u0562\20\71\1\u0562\23\71\1\0\1\71\1\0"+ "\2\71\4\0\6\71\1\0\21\71\1\u026b\52\71\1\u026b"+ "\22\71\1\0\1\71\1\0\2\71\4\0\6\71\1\0"+ "\2\71\1\u0563\33\71\1\u0563\60\71\1\0\1\71\1\0"+ "\2\71\4\0\5\71\1\u0564\1\0\20\71\1\u0564\76\71"+ "\1\0\1\71\1\0\2\71\4\0\2\71\1\u0565\3\71"+ "\1\0\17\71\1\u0565\77\71\1\0\1\71\1\0\2\71"+ "\4\0\1\u0566\5\71\1\0\41\71\1\u0566\55\71\1\0"+ "\1\71\1\0\2\71\4\0\6\71\1\0\1\u0272\52\71"+ "\1\u0272\43\71\1\0\1\71\1\0\2\71\4\0\1\u0486"+ "\5\71\1\0\41\71\1\u0486\55\71\1\0\1\71\1\0"+ "\2\71\4\0\6\71\1\0\63\71\1\u0567\11\71\1\u0567"+ "\21\71\1\0\1\71\1\0\2\71\4\0\1\u0394\5\71"+ "\1\0\41\71\1\u0394\55\71\1\0\1\71\1\0\2\71"+ "\4\0\6\71\1\0\101\71\1\u0568\6\71\1\u0568\6\71"+ "\1\0\1\71\1\0\2\71\4\0\6\71\1\0\52\71"+ "\1\u0488\20\71\1\u0488\23\71\1\0\1\71\1\0\2\71"+ "\4\0\6\71\1\0\1\71\1\u0486\36\71\1\u0486\56\71"+ "\1\0\1\71\1\0\2\71\4\0\6\71\1\0\2\71"+ "\1\u0569\33\71\1\u0569\60\71\1\0\1\71\1\0\2\71"+ "\4\0\3\71\1\u0135\2\71\1\0\57\71\1\u0135\37\71"+ "\1\0\1\71\1\0\2\71\4\0\2\71\1\u056a\3\71"+ "\1\0\17\71\1\u056a\77\71\1\0\1\71\1\0\2\71"+ "\4\0\6\71\1\0\2\71\1\u024f\33\71\1\u024f\60\71"+ "\1\0\1\71\1\0\2\71\4\0\1\71\1\u056b\4\71"+ "\1\0\54\71\1\u056b\40\71\16\0\1\u056c\62\0\1\u056c"+ "\35\0\1\137\12\0\1\137\1\u056d\4\137\1\0\2\137"+ "\1\u056d\2\0\1\137\5\u056d\1\137\1\0\5\137\2\u056d"+ "\1\0\2\137\1\0\2\u056d\1\137\1\u056d\2\0\2\u056d"+ "\2\137\7\0\3\137\1\u056d\1\137\1\u056d\5\137\1\u056d"+ "\3\137\3\0\11\137\1\u056d\2\137\1\0\3\137\2\u056d"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\5\150\1\u056e\10\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\3\150\1\u056f\2\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\5\150"+ "\1\u0570\10\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\4\150"+ "\1\u018d\1\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\5\150\1\u0571\10\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\2\150\1\u0572\1\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\150\1\u0573\2\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\4\150\1\u0298\11\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\150\1\u0574\2\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\2\150\1\u018d\13\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\1\150\1\u0575\4\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\3\150"+ "\1\u0576\2\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\2\150\1\u03bf\1\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\6\150\1\u02ac\7\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\4\150\1\u0577\1\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\3\150"+ "\1\u0578\2\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\5\150\1\u0579\10\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\11\150\1\u057a\4\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\2\150"+ "\1\u057b\13\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\3\150\1\u057c\2\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\3\150\1\u057d"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\6\150\1\u02a4\7\150\3\0"+ "\14\150\1\0\5\150\16\0\1\u057e\62\0\1\u057e\47\0"+ "\1\u03d3\142\0\1\u057f\62\0\1\u057f\47\0\1\u03d7\136\0"+ "\1\u03ec\165\0\1\u0580\136\0\1\u0581\156\0\1\u0582\164\0"+ "\1\u0583\132\0\1\u0584\136\0\1\u0585\73\0\1\u0586\172\0"+ "\1\u0587\123\0\1\u0588\135\0\1\u03e2\140\0\1\u0589\156\0"+ "\1\u058a\114\0\1\u058b\117\0\1\u058c\201\0\1\u03e2\137\0"+ "\1\u03e2\132\0\1\u058d\115\0\1\u058e\167\0\1\u058f\105\0"+ "\1\u058f\73\0\1\u0590\201\0\1\u0591\116\0\1\u04cd\76\0"+ "\2\u03f2\1\0\144\u03f2\1\0\3\u03f2\1\u0592\7\u03f2\1\u0592"+ "\3\u03f2\5\u0592\2\u03f2\1\u04d1\4\u03f2\2\u0592\4\u03f2\2\u0592"+ "\1\u03f2\1\u0592\2\u03f2\2\u0592\14\u03f2\1\u0592\1\u03f2\1\u0592"+ "\5\u03f2\1\u0592\17\u03f2\1\u0592\6\u03f2\2\u0592\10\u01bb\1\u02ec"+ "\3\u01bb\1\u0593\7\u01bb\1\u0593\3\u01bb\5\u0593\2\u01bb\1\u02ed"+ "\4\u01bb\2\u0593\4\u01bb\2\u0593\1\u01bb\1\u0593\2\u01bb\2\u0593"+ "\14\u01bb\1\u0593\1\u01bb\1\u0593\5\u01bb\1\u0593\17\u01bb\1\u0593"+ "\6\u01bb\2\u0593\2\u02f1\1\u02f2\6\u02f1\1\u01c0\2\u02f1\1\u0594"+ "\7\u02f1\1\u0594\3\u02f1\5\u0594\7\u02f1\2\u0594\4\u02f1\2\u0594"+ "\1\u02f1\1\u0594\2\u02f1\2\u0594\14\u02f1\1\u0594\1\u02f1\1\u0594"+ "\5\u02f1\1\u0594\17\u02f1\1\u0594\6\u02f1\2\u0594\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\11\150\1\u0595\4\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\6\150\1\u0596\7\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\2\150\1\u0597\3\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\5\150\1\u0598"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\1\u0599\13\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\2\150\1\u059a"+ "\1\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\2\150\1\u059b\13\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\5\150\1\u059c\10\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\3\150\1\u059d\2\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\4\150\1\u0428\11\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\150\1\u059e\2\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\11\150\1\u02fb\4\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u0433\3\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\u059f\3\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u05a0\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\3\150\1\u05a1\2\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\4\150\1\u05a2\11\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\1\150\1\u05a3\4\150"+ "\1\0\1\150\1\u05a4\1\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\3\150\1\u05a5\2\0"+ "\4\150\7\0\1\137\16\150\3\0\1\150\1\u052e\5\150"+ "\1\u05a6\4\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\150\1\u04f0\2\150\7\0"+ "\1\137\16\150\3\0\1\150\1\u05a7\12\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\2\150\1\u044e\1\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\150\1\u05a8\4\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\2\150"+ "\1\u05a9\13\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\2\150\1\u04e0"+ "\1\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\u05aa\3\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\1\u05ab\15\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\150\1\u05ac\4\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\2\150"+ "\1\u05ad\13\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\11\150\1\u05ae\4\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\1\150\1\u04e7"+ "\2\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\150\1\u05af\4\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\11\150"+ "\1\u05b0\4\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150"+ "\1\u032a\3\150\1\0\1\137\1\150\1\0\1\150\1\u04e7"+ "\2\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\11\150\1\u05b1\4\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\1\150\1\u05b2\1\150"+ "\1\u05b3\2\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\3\150\1\u05b4\2\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\7\150\1\u05b5\6\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\5\150"+ "\1\u05b6\10\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\1\u05b7\13\150\1\0\5\150\1\137"+ "\12\0\1\u05b8\5\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\2\150\1\u05b9\11\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\5\150\1\u05ba\10\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\1\150\1\u05bb\4\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\150\1\u05bc"+ "\2\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\5\150\1\u05bd\10\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\u05be\3\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\150\1\u05bf\2\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\3\150\1\u05c0\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\1\150"+ "\1\u05c1\4\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\1\u05c2\5\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\2\150\1\u052f\2\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\5\150\1\u05c3"+ "\10\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u05c4"+ "\3\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\6\150\1\u044e\7\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\2\150\1\u0527\1\u0528\2\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\1\u052d\13\150\1\0\2\150\1\u052f\2\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\150"+ "\1\u05c5\2\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\3\150\1\u05c6\2\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\1\u05c7\15\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\4\150"+ "\1\u05c8\11\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\1\u05c9\15\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\5\150\1\u05ca\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\u05cb\3\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\1\u05cc\5\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\4\150\1\u05cd\11\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\6\150"+ "\1\u05ce\7\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u05cf\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\2\150\1\u05d0\3\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\1\u05d1\15\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\150\1\u05d2\4\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\3\150\1\u05d3\2\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150"+ "\1\u05d4\3\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\1\u05d5\5\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\1\150\1\u05d6\1\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\1\u05d7\13\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\2\150\1\u05d8\1\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\1\u05d9\2\150\1\u05da\2\150\1\0\1\150\1\u05db\1\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\3\150\1\u02fb\7\0\1\137\12\150"+ "\1\u05dc\3\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\11\150\1\u05dd\4\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\150\1\u05de\2\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\2\150\1\u05df\3\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\4\150"+ "\1\u040f\11\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\1\150"+ "\1\u0320\4\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\4\150"+ "\1\u05e0\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\2\150\1\u05e1\3\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\150\1\u05e2\2\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\1\150\1\u05e3"+ "\4\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\2\150\1\u05e4\3\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\1\150\1\u0507\4\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\u05e5\3\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\3\150\1\u05e6\2\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u05e7\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\150"+ "\1\u05e8\2\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\5\150\1\u05e9\10\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\u05ea\3\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\1\u05eb\5\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\1\u05ec\15\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\1\150"+ "\1\u05ed\4\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\2\150\1\u05ee\3\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\1\137\1\u05ef\4\137\1\0"+ "\2\137\1\u05ef\2\0\1\137\5\u05ef\1\137\1\0\5\137"+ "\2\u05ef\1\0\2\137\1\0\2\u05ef\1\137\1\u05ef\2\0"+ "\2\u05ef\2\137\7\0\3\137\1\u05ef\1\137\1\u05ef\5\137"+ "\1\u05ef\3\137\3\0\11\137\1\u05ef\2\137\1\0\3\137"+ "\2\u05ef\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\2\150\1\u05f0\13\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\3\150\1\u05f1\2\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\1\u05f2\5\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u042e\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\1\u05f3\15\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\2\150\1\u05f4\3\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\2\150"+ "\1\u05f5\11\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\14\150"+ "\1\u0410\1\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150"+ "\1\u05f6\3\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\3\150\1\u05f7\2\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\1\u05f8\15\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\1\150\1\u05f9\4\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\5\150\1\u05fa\10\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\150"+ "\1\u05fb\2\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\3\150\1\u05fc\12\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\3\150\1\u05fd\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\1\150\1\u05fe\4\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150"+ "\1\u05ff\3\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\43\0\1\u0600\73\0\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\3\150\1\u0601\2\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u0602"+ "\3\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\7\150\1\u0603\6\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\5\150\1\u0604\10\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\2\150\1\u0605"+ "\13\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\13\150\1\u0606\2\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\1\150\1\u0607\4\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\1\150\1\u0608\14\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\150\1\u0609\2\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\4\150\1\u060a\2\150\1\0\1\u015b"+ "\1\150\1\u02fb\4\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\150\1\u060b\2\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\2\320\1\0\1\320\1\0\2\320"+ "\4\0\6\320\1\0\31\320\1\u046e\65\320\1\0\1\320"+ "\1\0\2\320\4\0\6\320\1\0\56\320\1\u0366\36\320"+ "\23\0\1\u060c\36\0\1\u060c\134\0\1\u036b\140\0\1\u060d"+ "\11\0\1\u060e\1\0\1\u060f\123\0\1\324\135\0\1\u0610"+ "\151\0\1\324\151\0\1\u0611\64\0\1\u0612\163\0\1\u0613"+ "\147\0\1\u0614\153\0\1\u0610\66\0\1\324\137\0\1\u0610"+ "\135\0\1\u0615\110\0\5\u0102\1\u0616\1\0\3\u0102\2\0"+ "\6\u0102\3\0\2\u0102\1\u0616\3\u0102\4\0\4\u0102\2\0"+ "\4\u0102\10\0\16\u0102\3\0\14\u0102\1\0\5\u0102\2\71"+ "\1\0\1\71\1\0\2\71\4\0\6\71\1\0\16\71"+ "\1\u024c\57\71\1\u024c\20\71\1\0\1\71\1\0\2\71"+ "\4\0\6\71\1\0\32\71\1\116\27\71\1\116\34\71"+ "\1\0\1\71\1\0\2\71\4\0\6\71\1\0\2\71"+ "\1\u0617\33\71\1\u0617\60\71\1\0\1\71\1\0\2\71"+ "\4\0\6\71\1\0\2\71\1\u0267\33\71\1\u0267\60\71"+ "\1\0\1\71\1\0\2\71\4\0\6\71\1\0\52\71"+ "\1\u0114\20\71\1\u0114\23\71\1\0\1\71\1\0\2\71"+ "\4\0\6\71\1\0\2\71\1\u0486\33\71\1\u0486\60\71"+ "\1\0\1\71\1\0\2\71\4\0\6\71\1\0\16\71"+ "\1\u0618\57\71\1\u0618\20\71\1\0\1\71\1\0\2\71"+ "\4\0\6\71\1\0\63\71\1\u0619\11\71\1\u0619\21\71"+ "\1\0\1\71\1\0\2\71\4\0\3\71\1\u0150\2\71"+ "\1\0\57\71\1\u0150\37\71\1\0\1\71\1\0\2\71"+ "\4\0\6\71\1\0\52\71\1\u027b\20\71\1\u027b\21\71"+ "\17\0\1\u061a\63\0\1\u061a\33\0\1\137\12\0\1\137"+ "\1\150\4\137\1\0\2\137\1\150\2\0\1\137\5\150"+ "\1\137\1\0\5\137\2\150\1\0\2\137\1\0\2\150"+ "\1\137\1\150\2\0\2\150\2\137\7\0\3\137\1\150"+ "\1\137\1\150\5\137\1\150\3\137\3\0\11\137\1\150"+ "\2\137\1\0\3\137\2\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u0572\3\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u061b\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\1\u061c\15\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\1\150\1\u018d\14\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\3\150\1\u03b6\2\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\2\150"+ "\1\u03bf\13\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\1\u061d\15\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\1\u02a4\5\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\150\1\u061e\2\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\2\150\1\u0296\13\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u044e\3\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u061f\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\2\150\1\u0620\3\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\3\150\1\u0401\2\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\2\150\1\u0621\1\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\17\0\1\u0622\63\0"+ "\1\u0622\52\0\1\u0623\63\0\1\u0623\76\0\1\u03e2\174\0"+ "\1\u0624\135\0\1\u0625\121\0\1\u03e2\135\0\1\u04c2\116\0"+ "\1\u04c9\174\0\1\u04c2\77\0\1\u03e2\157\0\1\u0626\134\0"+ "\1\u0627\152\0\1\u0628\140\0\1\u0629\103\0\1\u0624\167\0"+ "\1\u0580\103\0\1\u062a\75\0\64\u058f\1\u03e2\52\u058f\74\0"+ "\1\u062b\103\0\1\u062c\75\0\10\u03f2\1\0\3\u03f2\1\u062d"+ "\7\u03f2\1\u062d\3\u03f2\5\u062d\2\u03f2\1\u04d1\4\u03f2\2\u062d"+ "\4\u03f2\2\u062d\1\u03f2\1\u062d\2\u03f2\2\u062d\14\u03f2\1\u062d"+ "\1\u03f2\1\u062d\5\u03f2\1\u062d\17\u03f2\1\u062d\6\u03f2\2\u062d"+ "\10\u01bb\1\u02ec\3\u01bb\1\247\7\u01bb\1\247\3\u01bb\5\247"+ "\2\u01bb\1\u02ed\4\u01bb\2\247\4\u01bb\2\247\1\u01bb\1\247"+ "\2\u01bb\2\247\14\u01bb\1\247\1\u01bb\1\247\5\u01bb\1\247"+ "\17\u01bb\1\247\6\u01bb\2\247\2\u02f1\1\u02f2\6\u02f1\1\u01c0"+ "\2\u02f1\1\u01be\7\u02f1\1\u01be\3\u02f1\5\u01be\7\u02f1\2\u01be"+ "\4\u02f1\2\u01be\1\u02f1\1\u01be\2\u02f1\2\u01be\14\u02f1\1\u01be"+ "\1\u02f1\1\u01be\5\u02f1\1\u01be\17\u02f1\1\u01be\6\u02f1\2\u01be"+ "\1\137\12\0\1\150\1\u062e\3\150\1\u062f\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\2\150\1\u0527\1\u05da"+ "\1\150\1\u062f\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\1\u0630\3\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\12\150\1\u0631\1\150"+ "\1\0\2\150\1\u052f\2\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\2\150\1\u0632\11\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\1\150"+ "\1\u0633\4\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\14\150\1\u0634\1\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\5\150\1\u0635\10\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u0636\3\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u0637"+ "\3\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\2\150\1\u0638\13\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\5\150\1\u0639\10\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\5\150\1\u063a\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\1\150\1\u063b\4\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\2\150\1\u063c\13\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\150\1\u063d\2\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\150\1\u063e\2\150\7\0\1\137\5\150"+ "\1\u063f\10\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\1\u05e5\15\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\1\u0640\15\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\150\1\u0641\2\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\1\u0642\15\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\1\150\1\u0643\4\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u0644"+ "\3\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\1\u0645\4\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\3\150\1\u0646\2\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\150\1\u0647\4\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u0648\3\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u0649\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\2\150\1\u064a\13\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\4\150"+ "\1\u064b\2\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\11\150\1\u064c"+ "\4\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\1\u064d\5\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\150\1\u064e"+ "\2\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\2\150\1\u064f\3\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\150\1\u0650\2\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u0651\3\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\1\u0652"+ "\5\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\2\150\1\u0653\3\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\5\150\1\u0654\10\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\4\150\1\u0655"+ "\11\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\11\150\1\u0656\4\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\2\150"+ "\1\u0657\1\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\2\150\1\u0658\3\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\7\150\1\u0659"+ "\6\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\2\150\1\u065a\13\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\3\150"+ "\1\u065b\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\2\150\1\u065c\3\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\2\150\1\u065d\3\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u065e\3\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\5\150\1\u065f\10\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\7\150\1\u02fb\6\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\1\150\1\u0660\14\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u0661\3\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\1\150\1\u0662\1\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\1\0"+ "\1\u0663\4\150\7\0\1\137\12\150\1\u0664\3\150\3\0"+ "\4\150\1\u0665\7\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\3\150\1\u044e"+ "\2\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\150"+ "\1\u0666\2\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\1\0\1\u0667\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\11\150\1\u0668\4\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\1\150\1\u05db\1\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\10\150\1\u0669\3\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\u0608\3\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\3\150\1\u066a\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\u066b\3\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\3\150\1\u066c\2\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\150\1\u0659\2\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\150"+ "\1\u066d\2\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\5\150\1\u066e\10\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\2\150\1\u066f\3\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\5\150\1\u0670\10\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\1\150\1\u0671\2\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\1\u0672\15\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\2\150\1\u0673\3\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\3\150\1\u0674\2\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\5\150\1\u0675\10\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\u0201\3\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\u0676\3\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\2\150\1\u0677\13\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\5\150"+ "\1\u0678\10\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\1\0\1\u0679"; private static final String ZZ_TRANS_PACKED_1 = "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\1\150\1\u067a\4\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\3\150\1\u02fb\2\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\1\150\1\u067b\4\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150"+ "\1\u067c\3\150\1\0\1\137\1\150\1\0\3\150\1\u067d"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\150\1\u067e\2\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\7\150\1\u067f"+ "\6\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\1\150\1\u0680"+ "\4\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\11\150\1\u0681\4\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\2\150\1\u0682\1\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\3\150\1\u0683\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u05e6\3\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150"+ "\1\u0684\3\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\5\150\1\u0682\10\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\4\150\1\u0685\1\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\1\137\1\u0686"+ "\4\137\1\0\2\137\1\u0686\2\0\1\137\5\u0686\1\137"+ "\1\0\5\137\2\u0686\1\0\2\137\1\0\2\u0686\1\137"+ "\1\u0686\2\0\2\u0686\2\137\7\0\3\137\1\u0686\1\137"+ "\1\u0686\5\137\1\u0686\3\137\3\0\11\137\1\u0686\2\137"+ "\1\0\3\137\2\u0686\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\150\1\u0687\2\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\7\150\1\u0688\6\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\2\150\1\u05f1\3\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\3\150\1\u0689\2\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\1\u068a\5\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u068b\3\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\1\u068c"+ "\2\150\1\u068d\2\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\3\150\1\u02fb\7\0\1\137\16\150\3\0\1\u068e\13\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\150\1\u068f\2\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\5\150"+ "\1\u0690\10\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\3\150\1\u0691\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\14\150\1\u0692\1\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\1\150"+ "\1\u0693\2\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\2\150"+ "\1\u0694\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\3\150\1\u0695\2\0\4\150\7\0\1\137"+ "\16\150\3\0\2\150\1\u0696\11\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\3\150"+ "\1\u0697\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\5\150\1\u0698\10\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\5\150\1\u0699\10\150"+ "\3\0\14\150\1\0\5\150\42\0\1\u069a\74\0\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\6\150\1\u069b\7\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\150\1\u069c\2\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\1\u069d\15\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\3\150\1\u069e\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\15\150\1\u069f\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\3\150"+ "\1\u06a0\2\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\5\150\1\u06a1\10\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\2\150\1\u06a2"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\2\150\1\u06a3\1\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\1\150\1\u06a4\2\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\3\150"+ "\1\u06a5\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\24\0\1\u06a6\33\0\1\u06a6\137\0\1\u0473\121\0\1\u06a7"+ "\171\0\1\u06a8\117\0\1\u06a9\136\0\1\324\152\0\1\u060e"+ "\1\0\1\u060f\102\0\1\u06aa\135\0\1\u0611\137\0\1\u06ab"+ "\74\0\2\71\1\0\1\71\1\0\2\71\4\0\6\71"+ "\1\0\32\71\1\u026b\27\71\1\u026b\34\71\1\0\1\71"+ "\1\0\2\71\4\0\6\71\1\0\52\71\1\u0116\20\71"+ "\1\u0116\23\71\1\0\1\71\1\0\2\71\4\0\4\71"+ "\1\u06ac\1\71\1\0\61\71\1\u06ac\33\71\20\0\1\u06ad"+ "\21\0\1\u06ad\74\0\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\3\150\1\u03bf\2\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\3\150\1\u018d"+ "\2\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\3\150\1\u06ae\2\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\2\150\1\u02a4\13\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\3\150\1\u06af\2\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\u02c7\3\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\1\u033e\15\150\3\0\14\150\1\0\5\150\20\0"+ "\1\u06b0\21\0\1\u06b0\114\0\1\u06b1\21\0\1\u06b1\155\0"+ "\1\u06b2\140\0\1\u06b3\130\0\1\u06b4\30\0\1\u06b5\72\0"+ "\1\u04c2\135\0\1\u06b6\156\0\1\u06b7\136\0\1\u06b8\151\0"+ "\1\u06b9\143\0\1\u06ba\35\0\10\u03f2\1\0\3\u03f2\1\u06bb"+ "\7\u03f2\1\u06bb\3\u03f2\5\u06bb\2\u03f2\1\u04d1\4\u03f2\2\u06bb"+ "\4\u03f2\2\u06bb\1\u03f2\1\u06bb\2\u03f2\2\u06bb\14\u03f2\1\u06bb"+ "\1\u03f2\1\u06bb\5\u03f2\1\u06bb\17\u03f2\1\u06bb\6\u03f2\2\u06bb"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\1\u06bc\15\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\1\u06bd\15\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\u06be\5\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\1\u06bf\15\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\150\1\u06c0\2\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\150\1\u06c1"+ "\2\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\u06c2\3\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\13\150\1\u06c3"+ "\1\0\5\150\1\137\12\0\1\150\1\u06c4\4\150\1\0"+ "\1\150\1\u05a4\1\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\1\150\1\u06c5\14\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\u06c6\3\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\2\150\1\u06c7\1\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\5\150\1\u06c8"+ "\10\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\150\1\u06c9\2\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\1\150\1\u02fb\14\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\1\150\1\u06ca\4\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\3\150\1\u06cb\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\1\150\1\u06cc\4\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\1\150"+ "\1\u06cd\4\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\2\150\1\u0345\1\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\2\150\1\u06ce\3\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u06cf\3\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\5\150\1\u06d0\10\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\1\u06d1\5\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\14\150\1\u06d2\1\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\150\1\u06d3\2\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u06d4\3\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\4\150"+ "\1\u0529\1\150\1\0\2\150\1\u0439\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\u06d5\3\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\2\150\1\u06d6\13\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\150\1\u06d7\2\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\7\150\1\u06d8\6\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\2\150"+ "\1\u0608\1\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\5\150\1\u06d9\10\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\2\150\1\u06da\3\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\150\1\u06db\2\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\2\150\1\u06dc\3\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\1\150\1\u06dd\4\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\3\150\1\u06de\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\1\150\1\u06df"+ "\2\150\1\u06e0\1\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\1\u06e1\13\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\u06e2\3\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\1\u06e3\4\150\1\u06e4\1\0"+ "\3\150\2\0\4\150\1\u06e5\2\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\3\150\1\u06e6\2\0\4\150"+ "\7\0\1\137\16\150\3\0\2\150\1\u06e7\11\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\1\150\1\u046b\14\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\2\150\1\u06e8\3\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\15\150\1\u06e9\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\1\u06ea\3\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\1\150\1\u06eb\3\150\1\u06ec\10\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\1\150\1\u06ed\4\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\1\150\1\u06ee\14\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\14\150\1\u06ef\1\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\1\150\1\u06f0\1\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\4\150\1\u06f1\1\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\1\u06f2\15\150\3\0\14\150\1\0\5\150\13\0\1\u06f3"+ "\104\0\1\u06f4\16\0\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\u0632\3\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\1\150\1\u06f5\4\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\3\150\1\u06f6"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\14\0"+ "\1\u06f7\6\0\1\u06f8\26\0\1\u06f9\2\0\1\u06fa\61\0"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\1\150\1\u06fb"+ "\2\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\150\1\u06fc\2\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\1\u06fd"+ "\15\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\1\150\1\u06fe"+ "\4\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\3\150"+ "\1\u06ff\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\2\150\1\u0700\1\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\1\u0701\15\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\150\1\u0702\2\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\3\150\1\u0703\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\1\150\1\u0704\3\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\3\150\1\u0408\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\1\u0705\15\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\4\150\1\u0316\11\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\3\150\1\u0401\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u0706"+ "\3\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\2\150\1\u0707\3\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\1\u0708\15\150\3\0\14\150"+ "\1\0\5\150\24\0\1\u0709\61\0\1\u070a\30\0\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\150"+ "\1\u070b\2\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\150\1\u070c\2\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\u070d\1\u070e\2\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\2\150\1\u070f\1\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\4\150\1\u04e0\11\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\1\u0710\5\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\11\150\1\u0711\4\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u0712\3\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u04e0"+ "\3\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\2\150\1\u0713\13\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\3\150"+ "\1\u0714\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\7\150\1\u018d\6\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\1\137\1\u01fc"+ "\4\137\1\0\2\137\1\u01fc\2\0\1\137\5\u01fc\1\137"+ "\1\0\5\137\2\u01fc\1\0\2\137\1\0\2\u01fc\1\137"+ "\1\u01fc\2\0\2\u01fc\2\137\7\0\3\137\1\u01fc\1\137"+ "\1\u01fc\5\137\1\u01fc\3\137\3\0\11\137\1\u01fc\2\137"+ "\1\0\3\137\2\u01fc\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\2\150\1\u0715\3\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\1\u0716\5\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\150\1\u0717"+ "\2\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\2\150\1\u0718\3\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\11\150\1\u0719\4\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u071a\3\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\3\150"+ "\1\u071b\2\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\1\u071c\5\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\2\150\1\u071d\1\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\3\150\1\u071e\2\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\1\u071f\15\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u0720\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\2\150"+ "\1\u0321\1\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\2\150\1\u0721\1\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\5\150\1\u0722"+ "\10\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\u0723\3\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\12\150\1\u0724\3\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\150\1\u0725\2\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\14\150\1\u0726\1\150"+ "\3\0\14\150\1\0\5\150\41\0\1\u0727\75\0\1\137"+ "\12\0\2\150\1\u0728\3\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\3\150"+ "\1\u0729\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\150\1\u072a\4\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\4\150\1\u072b\1\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u072c\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\2\150\1\u06a2\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\3\150\1\u072d"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\150\1\u072e\2\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\1\150\1\u01e4\4\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\2\150\1\u072f\11\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\1\u0730\15\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\3\150\1\u0731\12\150\3\0\14\150"+ "\1\0\5\150\21\0\1\u0732\153\0\1\u0733\201\0\1\u0734"+ "\135\0\1\324\74\0\1\u0735\161\0\1\u0736\55\0\2\71"+ "\1\0\1\71\1\0\2\71\4\0\6\71\1\0\1\71"+ "\1\u0737\36\71\1\u0737\54\71\21\0\1\u0738\115\0\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\5\150\1\u0739\10\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\2\150\1\u0298\3\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\21\0\1\u073a\136\0\1\u073b\177\0"+ "\1\u03e2\135\0\1\u073c\156\0\1\u073d\116\0\1\u073e\152\0"+ "\1\u03e2\103\0\1\u073f\156\0\1\u058f\116\0\1\u058f\136\0"+ "\1\u0740\74\0\10\u03f2\1\0\3\u03f2\1\u02ef\7\u03f2\1\u02ef"+ "\3\u03f2\5\u02ef\2\u03f2\1\u04d1\4\u03f2\2\u02ef\4\u03f2\2\u02ef"+ "\1\u03f2\1\u02ef\2\u03f2\2\u02ef\14\u03f2\1\u02ef\1\u03f2\1\u02ef"+ "\5\u03f2\1\u02ef\17\u03f2\1\u02ef\6\u03f2\2\u02ef\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\1\150"+ "\1\u0741\4\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\15\150\1\u0742\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\4\150\1\u0743\1\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\5\150\1\u0744"+ "\10\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\5\150\1\u0400\10\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\2\150\1\u0354\3\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\2\150\1\u0745\13\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\1\150\1\u0746\4\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\150\1\u0747\2\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\1\u0748\15\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\2\150\1\u0439\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\2\150\1\u0749"+ "\11\150\1\0\5\150\1\137\12\0\3\150\1\u0528\2\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\u074a\3\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\11\150\1\u074b\4\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\2\150\1\u074c\3\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\1\0\1\u074d\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\2\150\1\u0330\3\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\2\150\1\u074e\13\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\11\150\1\u074f\4\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\1\u0750\5\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\3\150\1\u0751\2\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\1\u0752"+ "\15\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\u0753\3\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u0754\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\1\150\1\u0755\14\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\1\150\1\u0756\4\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\1\u0757\3\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\2\150"+ "\1\u0758\13\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\1\150"+ "\1\u0759\4\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\2\150\1\u075a\3\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\150\1\u075b\2\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\5\150"+ "\1\u075c\10\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\1\150\1\u075d\2\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\1\u075e\13\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\u075f\3\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\11\150\1\u0760\4\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\2\150\1\u0761\1\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\1\150"+ "\1\u0762\4\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\1\150\1\u0763"+ "\2\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\4\150\1\u0764\11\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u0765\3\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\3\150\1\u0766\12\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\1\150\1\u0767\4\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\2\150\1\u0768\13\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\1\u0769"+ "\15\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\1\u076a\15\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\5\150\1\u076b\10\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\2\150\1\u0527\1\u0528\2\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\1\u076c\5\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\2\150\1\u0512"+ "\1\150\1\u0529\1\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\u076d\3\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\u076e\3\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\6\150"+ "\1\311\5\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u076f\3\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\5\150\1\u0770\10\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\1\150\1\u0771\4\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\2\150\1\u017d\13\150\3\0"+ "\14\150\1\0\5\150\42\0\1\u0772\137\0\1\u0773\73\0"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\1\u0774\15\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\15\150\1\u02fb\3\0\14\150"+ "\1\0\5\150\61\0\1\u0775\136\0\1\u0776\115\0\1\u0777"+ "\177\0\1\u0778\35\0\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\u0779\3\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\3\150\1\u077a\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\1\u077b\5\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\150\1\u035e"+ "\2\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\2\150\1\u077c\3\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\5\150\1\u077d\10\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\3\150\1\u077e\2\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\2\150\1\u077f\13\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\2\150\1\u0780\3\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\u0781\3\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\1\150\1\u0726\4\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\5\150\1\u0782\10\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\1\u0783\1\u0784\4\150\1\0\1\150\1\u05db\1\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\2\150\1\u0785\3\150\1\311\5\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\3\150\1\u0608\2\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\43\0\1\u0786\153\0\1\u0786\56\0\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\7\150\1\u0787\6\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\1\150\1\u0788\14\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\150\1\u0789\4\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\1\150\1\u078a\2\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\150\1\u078b"+ "\2\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\2\150\1\u078c\3\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\5\150\1\u078d\10\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\3\150\1\u052b\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\1\150\1\u078e"+ "\4\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\1\u078f\15\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\u0790\3\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\2\150\1\u0791\3\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\1\150\1\u063c\4\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\1\150\1\u0792"+ "\4\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\1\u0793\15\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\1\150\1\u0794\4\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\7\150\1\u0795\6\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u0796\3\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\3\150\1\u057c\2\150\1\0\1\150\1\u0797\1\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\12\150\1\u0798\3\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u0799\3\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\1\150"+ "\1\u079a\4\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\4\150\1\u079b"+ "\2\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\u079c\3\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\u079d\3\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u079e\3\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u079f\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\2\150"+ "\1\u07a0\1\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\u0330\3\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\75\0\1\u07a1\41\0\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\u07a2\3\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\1\u07a3\15\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\2\150\1\u07a4\3\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\5\150\1\u07a5\10\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\4\150\1\u07a6"+ "\11\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\1\u07a7\15\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\3\150"+ "\1\u07a8\2\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\150\1\u07a9\2\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\150\1\u07aa\4\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\2\150\1\u0508\11\150\1\0\5\150\42\0\1\u07ab"+ "\156\0\1\u06a9\136\0\1\u07ac\117\0\1\u07ad\73\0\2\71"+ "\1\0\1\71\1\0\2\71\4\0\6\71\1\0\11\71"+ "\1\u0116\25\71\1\u0116\55\71\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\13\150\1\u0620\1\0\5\150\44\0\1\u07ae\152\0"+ "\1\u07af\120\0\1\u07b0\154\0\1\u07b1\164\0\1\u07b2\30\0"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\1\150\1\u07b3\4\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\u07b4\3\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\4\150\1\u07b5\1\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\2\150\1\u067e\1\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\u07b6"+ "\3\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\4\150\1\u07b7\1\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\1\150\1\u07b8\2\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\3\150\1\u07b9\2\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\150\1\u07ba"+ "\2\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\4\150\1\u0330\11\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\u07bb\3\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\1\u07bc\15\150"+ "\3\0\14\150\1\0\5\150\52\0\1\u06f9\64\0\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\1\u07bd\5\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\150\1\u07be\2\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\u07bf\5\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\2\150\1\u07c0\3\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\3\150\1\u07c1"+ "\2\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\3\150\1\u07c2\2\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\1\150\1\u07c3\4\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\2\150\1\u0527\3\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\2\150\1\u052f\2\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\1\0\1\u07c4"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\1\u07c5\5\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\u07c6\3\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\1\150\1\u07c7\14\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u07c8\3\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u07c9"+ "\3\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\1\150\1\u07ca\2\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\2\150\1\u07cb\1\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\4\150\1\u07cc\1\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\150\1\u07cd\2\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\150"+ "\1\u07ce\2\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\150\1\u07cf\2\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\1\u07d0\15\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\1\150\1\u07d1\3\150\1\137\12\0"+ "\6\150\1\0\1\150\1\u07d2\1\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\150\1\u07d3\2\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\150\1\u07d4\4\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\6\150"+ "\1\u07d5\7\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\2\150\1\u07d6\13\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\1\150\1\u07d7\4\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\3\150\1\u07d8\2\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\1\u05e2"+ "\15\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\5\150\1\u07d9\10\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\3\150"+ "\1\u02fb\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\150\1\u04df\2\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\3\150\1\u07da\2\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\3\150\1\u07db\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\u07dc\3\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\61\0\1\u07dd"+ "\153\0\1\u07de\40\0\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\1\u05c5\5\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\42\0\1\u07df\137\0\1\u07e0"+ "\174\0\1\u07e1\117\0\1\u07e2\54\0\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\1\150\1\u06e9"+ "\4\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\3\150\1\u0428\12\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\1\150\1\u07e3\4\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\150\1\u07e4\2\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\13\150\1\u040f\1\0\5\150\1\137\12\0"+ "\3\150\1\u07e5\2\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\15\150\1\u0330\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\u07e6\3\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\2\150\1\u0401\13\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\2\150"+ "\1\u0330\13\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u07e7\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\1\u07e8\15\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\u07e9\1\u07ea\2\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\76\0\1\u07eb\40\0\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\2\150\1\u07ec\11\150\1\0\5\150\1\137"+ "\12\0\3\150\1\u0528\2\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\1\u052d\13\150"+ "\1\0\5\150\1\137\12\0\1\150\1\u07ed\4\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\1\0\1\u07ee\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\2\150\1\u07ef\1\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\6\150\1\u07f0\7\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\1\u05c2\5\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\3\150\1\u07f1\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\5\150\1\u07f2"+ "\10\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\1\u07f3\5\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\3\150\1\u07f4\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\u07f5"+ "\3\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\1\150\1\u054c\4\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\u07f6\3\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\1\u07f7\5\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\7\150"+ "\1\u07f8\6\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\1\u07f9\15\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\150"+ "\1\u07fa\2\150\7\0\1\137\1\u07fb\15\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\u07fc\3\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\11\150\1\u07fd"+ "\4\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\1\150\1\u07fe"+ "\4\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\11\150\1\u07ff\4\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\2\150\1\u0800\1\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\3\150\1\u0801"+ "\12\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\4\150\1\u0802"+ "\1\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\5\150\1\u0803\10\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\3\150\1\u0804\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\150\1\u0805\4\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u0806\3\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\u0807\3\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\3\150\1\u0808\2\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\1\150\1\u0809\4\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\1\150\1\u080a\4\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\2\150"+ "\1\u080b\13\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150"+ "\1\u06c7\3\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\75\0\1\u080c\121\0\1\u080d\20\0\1\u080e\77\0\1\u080f"+ "\154\0\1\u0810\140\0\1\u07b1\135\0\1\u03e2\155\0\1\u03e2"+ "\132\0\1\u0811\42\0\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\1\u0812\5\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\3\150\1\u0813\2\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u0814\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\2\150\1\u0815\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\2\150\1\u0816\1\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\2\150\1\u0817\1\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\4\150\1\u0818\1\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\3\150"+ "\1\u0819\2\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\1\u050c\6\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\1\150\1\u081a\4\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\2\150\1\u081b\1\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u0608"+ "\3\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\7\150\1\u081c\6\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\2\150\1\u081d"+ "\11\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\2\150\1\u044e"+ "\13\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\3\150\1\u081e\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\13\0\1\u081f"+ "\104\0\1\u0820\16\0\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\3\150\1\u0821\2\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\3\150\1\u0822\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\1\u0823\5\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\4\150\1\u0824\11\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\5\150\1\u0825\10\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\2\150\1\u0826\1\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\u0827\3\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\1\u0828\3\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\11\150\1\u0829\4\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\2\150\1\u082a\3\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\3\150\1\u082b\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\7\150"+ "\1\u082c\6\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u082d\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\1\u082e\15\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\2\150\1\u0726\3\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\u082f\3\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\1\u079c\5\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u0830\3\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\11\150\1\u0831\4\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\5\150\1\u0832\10\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\2\150\1\u0833\1\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\2\150\1\u0834\3\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u0835"+ "\3\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\3\150"+ "\1\u07ff\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\42\0\1\u0836\155\0\1\u0837\135\0\1\u0838\160\0\1\u0839"+ "\116\0\1\u083a\116\0\1\u083b\74\0\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\2\150\1\u083c\13\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\3\150\1\u083d\2\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\3\150\1\u083e\2\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\3\150\1\u083f\2\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u02fb"+ "\3\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\1\u0840\4\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\2\150\1\u0841\1\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\2\150\1\u0842\3\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\7\150"+ "\1\u0843\6\150\3\0\14\150\1\0\5\150\74\0\1\u083a"+ "\42\0\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\u07e9\3\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\2\150\1\u0844\1\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\52\0\1\u0845\64\0\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\u0846"+ "\3\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\3\150\1\u0847\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\3\150\1\u06e8\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\7\150\1\u035e\6\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\3\150\1\u074a\2\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\1\u0848\15\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\150"+ "\1\u0849\2\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\150\1\u084a\2\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\2\150\1\u084b\3\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\1\u084c\5\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\3\150"+ "\1\u084d\2\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\2\150\1\u084e\3\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\u04f0\5\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\1\150\1\u0330\4\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\150\1\u06cb\2\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\1\150\1\u084f\4\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\u0850\3\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\4\150\1\u01d8\11\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\1\u0800"+ "\15\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\3\150\1\u0851\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\13\150\1\u0852\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\1\u0853\15\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\11\150\1\u0854\4\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\4\150\1\u0855\11\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\4\150"+ "\1\u0856\11\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\1\u0330\13\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\11\150\1\u0857\4\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\150\1\u0858\2\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\3\150\1\u0859"+ "\12\150\3\0\14\150\1\0\5\150\103\0\1\u0611\75\0"+ "\1\u047c\137\0\1\u0611\135\0\1\u06b6\172\0\1\u058f\40\0"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\7\150\1\u07aa\6\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\5\150\1\u085a\10\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\1\150\1\u085b\4\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\2\150\1\u085c"+ "\1\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\1\u085d\15\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\u085e\3\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\5\150\1\u085f\10\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\150\1\u0860\2\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\2\150\1\u0861\3\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\1\0"+ "\1\u0862\3\150\1\u0863\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\150\1\u0864\2\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\7\150"+ "\1\u06a4\6\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\1\u0865\15\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\5\150\1\u0866\10\150\3\0\14\150\1\0"+ "\5\150\40\0\1\u0867\141\0\1\u0868\73\0\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\4\150\1\u0869\11\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\3\150\1\u086a\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\2\150\1\u086b\3\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\3\150\1\u0808\2\150"+ "\1\0\2\150\1\u0439\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\1\u086c\15\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\u086d"+ "\3\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\5\150\1\u086e\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\1\u086f\15\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\2\150\1\u0527\3\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\2\150"+ "\1\u0870\13\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\3\150\1\u0330"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\u0871"+ "\3\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\2\150\1\u06cb\13\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\2\150\1\u0872\13\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\150\1\u0873\2\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\3\150\1\u0874"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\150"+ "\1\u0875\2\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\2\150\1\u0876\3\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\4\150\1\u0877"+ "\11\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\u0878\3\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u0879\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\60\0"+ "\1\u07a1\116\0\1\u087a\200\0\1\u087b\74\0\1\u087c\176\0"+ "\1\u087d\116\0\1\u087e\56\0\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u087f\3\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u042a"+ "\3\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\3\150\1\u0880\2\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\u0881\3\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\u0882\5\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\2\150\1\u0883\1\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\3\150\1\u0884\12\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\1\0\1\u0885"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\1\u0886\15\150\3\0\14\150\1\0"+ "\5\150\101\0\1\u0887\35\0\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\3\150\1\u0888\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\1\150"+ "\1\u0889\4\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\1\150\1\u088a\4\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\11\150\1\u088b\4\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\11\150\1\u088c"+ "\4\150\3\0\14\150\1\0\5\150\1\137\12\0\1\u088d"+ "\5\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\7\150\1\u088e\4\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\2\150\1\u088f\3\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\6\150\1\u02fb\7\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\150\1\u0330\2\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\150\1\u0890"+ "\2\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\3\150\1\u06cb\2\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\1\u0891\15\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\150\1\u0892\2\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\1\u0893\5\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\150\1\u0894"+ "\2\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\1\150\1\u0895\4\150\1\0\2\150\1\u0896"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\1\u0897\13\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\1\150\1\u0898\1\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\150\1\u0899"+ "\2\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\2\150\1\u089a\1\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\5\150\1\u089b\10\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\13\150\1\u04e0\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\u089c\3\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\13\150\1\u0608\2\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\4\150\1\u0529\1\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\6\150\1\u089d\7\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\6\150"+ "\1\u04e0\7\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\150\1\u089e"+ "\2\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\115\0\1\u089f\21\0\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\1\0\1\u08a0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\1\150\1\u08a1\4\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\4\150\1\u08a2\11\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\1\u08a3\15\150\3\0\14\150\1\0"+ "\5\150\53\0\1\u08a4\164\0\1\u08a5\35\0\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\2\150\1\u08a6"+ "\1\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\3\150\1\u08a7"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\150\1\u08a8\2\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\3\150\1\u01d8\2\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\1\150"+ "\1\u08a9\4\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\3\150\1\u08aa\12\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\1\u08ab\5\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\3\150\1\u0330\12\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\1\150\1\u08ac\4\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\150\1\u08ad"+ "\2\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\4\150\1\u08ae\11\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\3\150\1\u01d8\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\2\150\1\u08af\3\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\1\u08b0\15\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u08b1\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\1\150\1\u08b2\4\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\3\150\1\u08b3\2\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\102\0\1\u08b4\130\0\1\u069a\123\0"+ "\1\u08b5\135\0\1\u08b6\117\0\1\u08b7\75\0\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\1\u08b8\3\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\3\150\1\u08b9\2\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\1\150\1\u08ba\4\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\u08bb\3\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\u08bc\3\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\1\u08bd\15\150\3\0\14\150\1\0\5\150\13\0\1\u08be"+ "\123\0\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\3\150\1\u06c7\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\102\0\1\u08bf\34\0\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\2\150\1\u08c0\1\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\1\u08c1\15\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\11\150\1\u08c2\4\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\2\150\1\u052f\2\150\1\137\12\0\1\150\1\u08c3"+ "\4\150\1\0\2\150\1\u0439\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\3\150\1\u08c4\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\2\150\1\u08c5\3\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\150\1\u08c6\2\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\1\u08c7\5\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\1\150\1\u08c8\14\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\1\u08c9\5\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\1\150\1\u08ad"+ "\2\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\150\1\u08ca\4\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u08cb\3\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\2\150\1\u08cc"+ "\1\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\3\150\1\u08cd\2\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\7\150\1\u08ce\6\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\5\150"+ "\1\u08cf\10\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150"+ "\1\u08d0\3\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\u08d1\3\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\3\150\1\u05ce\2\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\11\150\1\u08d2"+ "\4\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\1\u08d3\5\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\3\150"+ "\1\u08d4\2\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\44\0\1\u08d5\125\0\1\u08d6\103\0\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\5\150\1\u08d7\10\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\5\150\1\u08d8\10\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\3\150\1\u0330\2\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\63\0\1\u08d9\151\0\1\u08da\40\0"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\u08db\3\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\5\150\1\u04e7\10\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\2\150\1\u08dc\3\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\2\150\1\u08dd\1\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\1\150\1\u08de\4\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\3\150\1\u08df\2\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\2\150\1\u08e0\3\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\2\150\1\u0726\1\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\1\u06e3\5\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\1\150\1\u08e1\2\150\1\u08e2\1\150\1\0"+ "\2\150\1\u0439\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\3\150\1\u08e3\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\2\150\1\u08e4\2\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\1\150\1\u08ae\4\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\150\1\u08e5\4\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\150\1\u08e6\2\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u08e7\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\77\0"+ "\1\u08e8\141\0\1\u08e9\75\0\1\u07a1\176\0\1\u08ea\35\0"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\1\u08eb\5\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\5\150\1\u08ec\10\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\4\150\1\u08ed\1\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\3\150\1\u08ee"+ "\2\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\2\150\1\u0659\13\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\4\150\1\u0608\11\150\3\0"+ "\14\150\1\0\5\150\101\0\1\u08ef\143\0\1\u08f0\30\0"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\150\1\u08f1\2\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\3\150\1\u08f2\2\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\150\1\u08f3\2\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\2\150\1\u08f4"+ "\1\150\7\0\1\137\1\u08f5\15\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\5\150\1\u08f6\10\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\1\150\1\u08f7\4\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\2\150\1\u08f8\1\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\2\150\1\u08f9\3\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\1\u08fa\5\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\3\150\1\u08bd\2\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\2\150"+ "\1\u0726\13\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\4\150\1\u08fb\2\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\2\150"+ "\1\u08e4\2\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\150\1\u08fc\2\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\2\150"+ "\1\u08fd\13\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u08fe\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\3\150\1\u08ff\2\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\1\150\1\u04ec\4\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\3\150\1\u08e3\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\3\150\1\u0900\2\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u057c\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\1\150\1\u0901\4\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\4\150\1\u0902\11\150\3\0"+ "\14\150\1\0\5\150\16\0\1\u0903\1\u0904\3\0\1\u0905"+ "\62\0\1\u0906\103\0\1\u0907\63\0\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u054c"+ "\3\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\4\150\1\u0908\1\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\60\0\1\u0909\152\0\1\u090a\42\0\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\1\0\1\u090b\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\5\150\1\u090c\10\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\150\1\u090d\2\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\u090e\3\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\4\150"+ "\1\u082b\11\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\5\150\1\u090f\10\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\1\u0910\15\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\1\150\1\u0911\4\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\2\150\1\u0912\1\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\5\150\1\u0913\10\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\1\0\1\u0914"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\2\150\1\u0915\3\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\150\1\u082b\4\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\42\0\1\u0916\154\0\1\u0917"+ "\121\0\1\u0918\73\0\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\3\150\1\u0919\2\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u091a"+ "\3\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\1\150\1\u091b\4\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\2\150\1\u091c\3\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\105\0\1\u091d\111\0\1\u091e\56\0"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\6\150\1\u076d\7\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\14\150\1\u091f\1\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u0920\3\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\150\1\u0921"+ "\2\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\3\150\1\u0922\2\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\u0923\3\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\u0924\3\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\5\150"+ "\1\u0925\10\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\1\150"+ "\1\u0926\4\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\5\150\1\u0927\10\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\150\1\u0767\4\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\3\150\1\u0928\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\1\u0929\15\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\1\150"+ "\1\u092a\4\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\15\150\1\u0608\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\4\150\1\u092b\11\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\150\1\u051e\2\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\1\u04df\15\150\3\0\14\150\1\0\5\150\43\0\1\u0909"+ "\134\0\1\u092c\171\0\1\u092d\136\0\1\u092e\125\0\1\u092f"+ "\53\0\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\5\150\1\u0930\10\150\3\0"+ "\14\150\1\0\5\150\42\0\1\u07a1\174\0\1\u0931\52\0"+ "\1\u0932\122\0\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\3\150\1\u0933\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\3\150\1\u0934\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\150\1\u0935\2\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\u0936\3\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\3\150\1\u0646\2\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\4\150\1\u0937\11\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\u0938\3\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\150\1\u0939\2\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\4\150\1\u093a\11\150\3\0\14\150\1\0\5\150"+ "\15\0\1\u093b\121\0\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\1\u093c\15\150"+ "\3\0\14\150\1\0\5\150\24\0\1\u093d\127\0\1\u093e"+ "\223\0\1\u093f\34\0\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\4\150\1\u04e7"+ "\11\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\5\150\1\u0940\10\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\1\u0941\15\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\5\150\1\u0942\10\150\3\0\14\150"+ "\1\0\5\150\103\0\1\u0943\131\0\1\u0944\40\0\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\u0945"+ "\3\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\3\150\1\u08e3"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\3\150\1\u076d\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\3\150\1\u0946\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\2\150\1\u035f\1\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\1\150\1\u0947\2\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\4\150\1\u05d2\11\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\u0948\3\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\13\150"+ "\1\u0726\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\3\150\1\u0949\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\4\150"+ "\1\u094a\11\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\1\150\1\u094b"+ "\2\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\150\1\u0433\2\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\101\0\1\u094c\100\0\1\u094d\133\0\1\u094e"+ "\140\0\1\u094f\74\0\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\2\150\1\u092a"+ "\13\150\3\0\14\150\1\0\5\150\60\0\1\u0950\152\0"+ "\1\u0951\42\0\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\2\150\1\u0952\3\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\3\150\1\u0953\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\4\150\1\u0954\11\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\3\150"+ "\1\u069c\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\1\u0955\3\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\2\150\1\u0956\13\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\6\150\1\u082b"+ "\7\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\2\150\1\u0870"+ "\3\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\60\0"+ "\1\u0957\56\0\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\150\1\u0958\4\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\104\0\1\u0959\113\0\1\u095a"+ "\174\0\1\u095b\17\0\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\150\1\u095c\2\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\10\150\1\u063c\5\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\150"+ "\1\u095d\2\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\62\0\1\u095e\155\0\1\u095f\35\0\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\1\150"+ "\1\u0960\4\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\2\150\1\u0961\3\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\11\150\1\u0962\4\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\1\150\1\u0963\2\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\7\150\1\u0964\4\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\5\150\1\u0965\10\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\2\150\1\u081e\3\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\105\0\1\u0966\133\0\1\u07a1"+ "\107\0\1\u0967\124\0\1\u0968\110\0\1\u0969\36\0\1\u096a"+ "\127\0\1\u096b\73\0\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\5\150\1\u096c"+ "\10\150\3\0\14\150\1\0\5\150\1\137\12\0\1\150"+ "\1\u096d\4\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\16\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\1\150\1\u0662\1\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\4\150\1\u096e\1\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\5\150\1\u07c3"+ "\10\150\3\0\14\150\1\0\5\150\100\0\1\u096f\36\0"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\1\0"+ "\1\u0970\4\150\7\0\1\137\16\150\3\0\14\150\1\0"+ "\5\150\76\0\1\u0971\103\0\1\u0972\167\0\1\u0973\42\0"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\2\150\1\u0974\1\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\2\150\1\u0975\1\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\60\0\1\u0976\163\0\1\u0977"+ "\31\0\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\3\150\1\u0978\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\1\150\1\u0979\2\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\1\0\1\u097a\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\1\137\12\0\6\150"+ "\1\0\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\11\150\1\u097b\4\150\3\0\14\150\1\0\5\150\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\1\u097c"+ "\3\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\1\137\12\0\6\150\1\0\3\150\2\0\7\150\1\0"+ "\1\u015b\3\150\1\u097d\2\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\101\0\1\u097e\117\0\1\u0836\135\0\1\u097f"+ "\153\0\1\u0980\122\0\1\u0981\116\0\1\u0982\74\0\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\2\150\1\u076d\13\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\4\150\7\0\1\137\3\150\1\u0983\12\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\1\u0984\15\150"+ "\3\0\14\150\1\0\5\150\101\0\1\u0985\152\0\1\u0986"+ "\101\0\1\u0987\160\0\1\u0836\134\0\1\u0836\36\0\1\137"+ "\12\0\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b"+ "\6\150\1\0\1\137\1\150\1\0\4\150\2\0\4\150"+ "\7\0\1\137\5\150\1\u0988\10\150\3\0\14\150\1\0"+ "\5\150\1\137\12\0\6\150\1\0\1\150\1\u05db\1\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\16\0\1\u0989\5\0\1\u0544\173\0"+ "\1\u098a\55\0\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\5\150\1\u098b\10\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\3\150\1\u098c\2\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\121\0\1\u098d"+ "\15\0\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\1\0\1\u098e\4\150\7\0\1\137\16\150\3\0\14\150"+ "\1\0\5\150\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\1\150\1\u098f\4\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\6\150"+ "\1\u0330\7\150\3\0\14\150\1\0\5\150\42\0\1\u0990"+ "\172\0\1\u0991\101\0\1\u0992\171\0\1\u0993\103\0\1\u0994"+ "\75\0\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0\4\150"+ "\2\0\1\150\1\u0995\2\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\5\150\1\u0850"+ "\10\150\3\0\14\150\1\0\5\150\41\0\1\u0996\141\0"+ "\1\u0997\175\0\1\u0998\33\0\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137"+ "\1\150\1\0\4\150\2\0\4\150\7\0\1\137\16\150"+ "\3\0\13\150\1\u0999\1\0\5\150\105\0\1\u099a\113\0"+ "\1\u099b\54\0\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\4\150\7\0\1\137\1\u099c\15\150\3\0"+ "\14\150\1\0\5\150\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\2\150\1\u076d\3\150\1\0"+ "\1\137\1\150\1\0\4\150\2\0\4\150\7\0\1\137"+ "\16\150\3\0\14\150\1\0\5\150\60\0\1\u099d\75\0"+ "\1\u099e\117\0\1\137\12\0\6\150\1\0\3\150\2\0"+ "\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150\1\0"+ "\4\150\2\0\3\150\1\u05df\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\101\0\1\u099f\77\0\1\u09a0\175\0"+ "\1\u09a1\133\0\1\u09a2\134\0\1\u09a3\42\0\1\137\12\0"+ "\6\150\1\0\3\150\2\0\7\150\1\0\1\u015b\3\150"+ "\1\u0511\2\150\1\0\1\137\1\150\1\0\4\150\2\0"+ "\4\150\7\0\1\137\16\150\3\0\14\150\1\0\5\150"+ "\60\0\1\u09a4\74\0\1\u0903\4\0\1\u0905\62\0\1\u0906"+ "\72\0\1\u09a5\74\0\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\1\u09a6\3\150\7\0\1\137\16\150"+ "\3\0\14\150\1\0\5\150\105\0\1\u09a7\54\0\1\u09a8"+ "\113\0\1\137\12\0\6\150\1\0\3\150\2\0\7\150"+ "\1\0\1\u015b\3\150\1\u09a9\2\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\14\150\1\0\5\150\42\0\1\u09aa\134\0\1\u099d\206\0"+ "\1\u0836\41\0\1\u09ab\2\0\1\u09ac\4\0\1\u09ad\62\0"+ "\1\u09ae\133\0\1\u0909\144\0\1\u07a1\107\0\1\u07a1\152\0"+ "\1\u09af\141\0\1\u09b0\35\0\1\137\12\0\6\150\1\0"+ "\3\150\2\0\7\150\1\0\1\u015b\1\150\1\u0608\4\150"+ "\1\0\1\137\1\150\1\0\4\150\2\0\4\150\7\0"+ "\1\137\16\150\3\0\14\150\1\0\5\150\40\0\1\u09b1"+ "\157\0\1\u09b2\55\0\1\137\12\0\6\150\1\0\3\150"+ "\2\0\7\150\1\0\1\u015b\6\150\1\0\1\137\1\150"+ "\1\0\4\150\2\0\4\150\7\0\1\137\16\150\3\0"+ "\2\150\1\u05b9\11\150\1\0\5\150\55\0\1\u09b3\164\0"+ "\1\u09b4\76\0\1\u09b5\167\0\1\u09b6\136\0\1\u09b7\104\0"+ "\1\u09b8\170\0\1\u09b9\104\0\1\u09ba\171\0\1\u09bb\142\0"+ "\1\u09bc\117\0\1\u09bd\116\0\1\u09be\137\0\1\u09bf\133\0"+ "\1\u09c0\155\0\1\u09c1\122\0\1\u09c2\154\0\1\u09c3\151\0"+ "\1\u09c4\122\0\1\u09c5\157\0\1\u09c6\50\0\1\u09ab\225\0"+ "\1\u09be\107\0\1\u09c7\103\0\1\u09c8\243\0\1\u09c9\64\0"+ "\1\u09ca\123\0\1\u09cb\160\0\1\u09cc\116\0\1\u09cd\156\0"+ "\1\u09ce\151\0\1\u09cf\122\0\1\u09d0\137\0\1\u09d1\116\0"+ "\1\u09d2\174\0\1\u07a1\116\0\1\u09d3\136\0\1\u09be\161\0"+ "\1\u0836\76\0\1\u09d4\153\0\1\u045f\133\0\1\u09d5\122\0"+ "\1\u09d6\175\0\1\u09d7\132\0\1\u09d8\123\0\1\u09d9\137\0"+ "\1\u087d\115\0\1\u09da\137\0\1\u09db\201\0\1\u07a1\125\0"+ "\1\u08b6\42\0"; private static int [] zzUnpackTrans() { int [] result = new int[227145]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); offset = zzUnpackTrans(ZZ_TRANS_PACKED_1, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\6\0\2\1\1\0\2\1\1\0\2\1\14\0\1\1"+ "\3\0\2\1\1\11\4\1\1\11\5\1\1\11\2\1"+ "\2\11\2\1\4\11\1\1\1\11\1\1\1\11\26\1"+ "\1\11\2\1\2\11\1\1\5\11\1\1\1\11\2\1"+ "\1\11\2\1\1\11\1\1\2\11\14\1\1\11\7\1"+ "\1\11\12\1\2\11\2\1\2\11\2\1\1\11\6\1"+ "\1\11\4\1\1\11\2\1\1\11\7\1\1\11\50\1"+ "\1\11\5\1\2\11\4\1\2\11\1\1\2\11\5\1"+ "\3\11\4\1\4\11\1\1\1\11\6\1\4\11\1\1"+ "\3\11\6\1\2\11\5\0\1\11\105\1\1\11\2\0"+ "\1\1\1\0\1\1\1\11\1\0\76\1\1\11\2\1"+ "\3\0\1\11\12\0\1\11\2\0\1\11\16\0\1\1"+ "\1\11\2\1\1\0\1\11\51\1\1\11\56\1\2\11"+ "\3\1\1\0\1\11\1\1\15\0\1\1\1\0\1\11"+ "\5\0\1\1\2\11\3\1\1\11\1\0\1\11\1\0"+ "\1\11\4\0\101\1\1\11\1\0\1\1\1\0\3\1"+ "\1\0\72\1\44\0\1\11\1\1\1\0\3\1\1\0"+ "\164\1\25\0\2\1\2\11\2\0\44\1\1\0\1\11"+ "\46\1\1\0\1\11\3\0\1\1\3\0\1\1\1\11"+ "\11\0\1\11\11\0\1\1\5\0\155\1\1\0\17\1"+ "\23\0\2\1\2\0\24\1\1\0\27\1\37\0\163\1"+ "\1\0\15\1\16\0\14\1\1\0\21\1\24\0\156\1"+ "\1\0\13\1\12\0\4\1\1\0\7\1\4\0\1\1"+ "\6\0\66\1\1\0\3\1\1\0\21\1\1\0\40\1"+ "\1\0\13\1\6\0\1\1\1\0\2\1\13\0\70\1"+ "\2\0\2\1\4\0\16\1\2\0\34\1\1\0\12\1"+ "\1\11\4\0\1\1\1\11\1\1\2\11\5\0\14\1"+ "\1\0\44\1\2\0\1\1\4\0\15\1\1\0\32\1"+ "\1\11\11\1\10\0\21\1\1\0\30\1\6\0\10\1"+ "\1\0\2\1\1\0\35\1\3\0\1\11\2\0\15\1"+ "\2\0\25\1\6\0\11\1\1\0\34\1\1\0\4\1"+ "\2\0\21\1\5\0\6\1\1\0\1\1\1\0\27\1"+ "\2\0\3\1\2\0\16\1\4\0\6\1\2\0\25\1"+ "\2\0\2\1\2\0\15\1\3\0\4\1\2\0\22\1"+ "\5\0\1\1\3\0\10\1\1\0\1\1\3\0\4\1"+ "\2\0\15\1\4\0\1\1\2\0\10\1\1\0\1\1"+ "\3\0\3\1\2\0\7\1\6\0\5\1\1\0\1\1"+ "\3\0\2\1\2\0\6\1\6\0\3\1\5\0\2\1"+ "\2\0\2\1\1\0\3\1\5\0\2\1\3\0\1\1"+ "\2\0\2\1\2\0\1\1\5\0\1\1\3\0\1\1"+ "\2\0\1\1\11\0\1\1\2\0\1\1\16\0\1\1"+ "\43\0"; private static int [] zzUnpackAttribute() { int [] result = new int[2523]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Type specific to JSPTokenMaker denoting a line ending with an unclosed * double-quote attribute. */ private static final int INTERNAL_ATTR_DOUBLE = -1; /** * Type specific to JSPTokenMaker denoting a line ending with an unclosed * single-quote attribute. */ private static final int INTERNAL_ATTR_SINGLE = -2; /** * Token type specific to JSPTokenMaker; this signals that the user has * ended a line with an unclosed HTML tag; thus a new line is beginning * still inside of the tag. */ private static final int INTERNAL_INTAG = -3; /** * Token type specific to JSPTokenMaker; this signals that the user has * ended a line with an unclosed <script> tag. */ private static final int INTERNAL_INTAG_SCRIPT = -4; /** * Token type specifying we're in a double-qouted attribute in a * script tag. */ private static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -5; /** * Token type specifying we're in a single-qouted attribute in a * script tag. */ private static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -6; /** * Token type specifying that the user has * ended a line with an unclosed <style> tag. */ private static final int INTERNAL_INTAG_STYLE = -7; /** * Token type specifying we're in a double-qouted attribute in a * style tag. */ private static final int INTERNAL_ATTR_DOUBLE_QUOTE_STYLE = -8; /** * Token type specifying we're in a single-qouted attribute in a * style tag. */ private static final int INTERNAL_ATTR_SINGLE_QUOTE_STYLE = -9; /** * Token type specifying we're in a JSP hidden comment ("<%-- ... --%>"). */ private static final int INTERNAL_IN_HIDDEN_COMMENT = -10; /** * Token type specifying we're in a JSP directive (either include, page * or taglib). */ private static final int INTERNAL_IN_JSP_DIRECTIVE = -11; /** * Token type specifying we're in JavaScript. */ static final int INTERNAL_IN_JS = -12; /** * Token type specifying we're in a JavaScript multi-line comment. */ private static final int INTERNAL_IN_JS_MLC = -13; /** * Token type specifying we're in an invalid multi-line JS string. */ private static final int INTERNAL_IN_JS_STRING_INVALID = -14; /** * Token type specifying we're in a valid multi-line JS string. */ private static final int INTERNAL_IN_JS_STRING_VALID = -15; /** * Token type specifying we're in an invalid multi-line JS single-quoted string. */ private static final int INTERNAL_IN_JS_CHAR_INVALID = -16; /** * Token type specifying we're in a valid multi-line JS single-quoted string. */ private static final int INTERNAL_IN_JS_CHAR_VALID = -17; /** * Internal type denoting a line ending in CSS. */ private static final int INTERNAL_CSS = -18; /** * Internal type denoting a line ending in a CSS property. */ private static final int INTERNAL_CSS_PROPERTY = -19; /** * Internal type denoting a line ending in a CSS property value. */ private static final int INTERNAL_CSS_VALUE = -20; /** * Internal type denoting line ending in a CSS double-quote string. * The state to return to is embedded in the actual end token type. */ private static final int INTERNAL_CSS_STRING = -(1<<11); /** * Internal type denoting line ending in a CSS single-quote string. * The state to return to is embedded in the actual end token type. */ private static final int INTERNAL_CSS_CHAR = -(2<<11); /** * Internal type denoting line ending in a CSS multi-line comment. * The state to return to is embedded in the actual end token type. */ private static final int INTERNAL_CSS_MLC = -(3<<11); /** * Token type specifying we're in a Java documentation comment. */ private static final int INTERNAL_IN_JAVA_DOCCOMMENT = -(4<<11); /** * Token type specifying we're in Java code. */ static final int INTERNAL_IN_JAVA_EXPRESSION = -(5<<11); /** * Token type specifying we're in Java multiline comment. */ private static final int INTERNAL_IN_JAVA_MLC = -(6<<11); /** * The state previous CSS-related state we were in before going into a CSS * string, multi-line comment, etc. */ private int cssPrevState; /** * The state JSP was started in (YYINITIAL, INTERNAL_IN_JS, etc.). */ private int jspInState; /** * Whether closing markup tags are automatically completed for JSP. */ private static boolean completeCloseTags; /** * When in the JS_STRING state, whether the current string is valid. */ private boolean validJSString; /** * Language state set on HTML tokens. Must be 0. */ private static final int LANG_INDEX_DEFAULT = 0; /** * Language state set on JavaScript tokens. */ private static final int LANG_INDEX_JS = 1; /** * Language state set on CSS tokens. */ private static final int LANG_INDEX_CSS = 2; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public JSPTokenMaker() { super(); } /** * Adds the token specified to the current linked list of tokens as an * "end token;" that is, at zzMarkedPos. * * @param tokenType The token's type. */ private void addEndToken(int tokenType) { addToken(zzMarkedPos,zzMarkedPos, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override protected OccurrenceMarker createOccurrenceMarker() { return new HtmlOccurrenceMarker(); } /** * Sets whether markup close tags should be completed. You might not want * this to be the case, since some tags in standard HTML aren't usually * closed. * * @return Whether closing markup tags are completed. * @see #setCompleteCloseTags(boolean) */ @Override public boolean getCompleteCloseTags() { return completeCloseTags; } @Override public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { return languageIndex==LANG_INDEX_CSS || languageIndex==LANG_INDEX_JS; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { switch (languageIndex) { case LANG_INDEX_JS: return new String[] { "//", null }; case LANG_INDEX_CSS: return new String[] { "/*", "*/" }; default: return new String[] { "" }; } } /** * {@inheritDoc} */ @Override public boolean getMarkOccurrencesOfTokenType(int type) { return type==Token.FUNCTION || type==Token.VARIABLE || type==Token.MARKUP_TAG_NAME; } /** * Overridden to handle newlines in JS and CSS differently than those in * markup. */ @Override public boolean getShouldIndentNextLineAfter(Token token) { int languageIndex = token==null ? 0 : token.getLanguageIndex(); if (getCurlyBracesDenoteCodeBlocks(languageIndex)) { if (token!=null && token.length()==1) { char ch = token.charAt(0); return ch=='{' || ch=='('; } } return false; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; jspInState = YYINITIAL; // Shouldn't be necessary cssPrevState = CSS; // Shouldn't be necessary int languageIndex = 0; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.MARKUP_COMMENT: state = COMMENT; break; case Token.PREPROCESSOR: state = PI; break; case Token.VARIABLE: state = DTD; break; case INTERNAL_INTAG: state = INTAG; break; case INTERNAL_INTAG_SCRIPT: state = INTAG_SCRIPT; break; case INTERNAL_INTAG_STYLE: state = INTAG_STYLE; break; case INTERNAL_ATTR_DOUBLE: state = INATTR_DOUBLE; break; case INTERNAL_ATTR_SINGLE: state = INATTR_SINGLE; break; case INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT: state = INATTR_DOUBLE_SCRIPT; break; case INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT: state = INATTR_SINGLE_SCRIPT; break; case INTERNAL_ATTR_DOUBLE_QUOTE_STYLE: state = INATTR_DOUBLE_STYLE; break; case INTERNAL_ATTR_SINGLE_QUOTE_STYLE: state = INATTR_SINGLE_STYLE; break; case INTERNAL_IN_HIDDEN_COMMENT: state = HIDDEN_COMMENT; break; case INTERNAL_IN_JSP_DIRECTIVE: state = JSP_DIRECTIVE; break; case INTERNAL_IN_JS: state = JAVASCRIPT; languageIndex = LANG_INDEX_JS; break; case INTERNAL_IN_JS_MLC: state = JS_MLC; languageIndex = LANG_INDEX_JS; break; case INTERNAL_IN_JS_STRING_INVALID: state = JS_STRING; languageIndex = LANG_INDEX_JS; validJSString = false; break; case INTERNAL_IN_JS_STRING_VALID: state = JS_STRING; languageIndex = LANG_INDEX_JS; validJSString = true; break; case INTERNAL_IN_JS_CHAR_INVALID: state = JS_CHAR; languageIndex = LANG_INDEX_JS; validJSString = false; break; case INTERNAL_IN_JS_CHAR_VALID: state = JS_CHAR; languageIndex = LANG_INDEX_JS; validJSString = true; break; case INTERNAL_CSS: state = CSS; languageIndex = LANG_INDEX_CSS; break; case INTERNAL_CSS_PROPERTY: state = CSS_PROPERTY; languageIndex = LANG_INDEX_CSS; break; case INTERNAL_CSS_VALUE: state = CSS_VALUE; languageIndex = LANG_INDEX_CSS; break; default: if (initialTokenType<-1024) { // INTERNAL_IN_JAVAxxx - jspInState or // INTERNAL_IN_CSSxxx - cssPrevState int main = -(-initialTokenType & 0xffffff00); switch (main) { default: // Should never happen case INTERNAL_IN_JAVA_DOCCOMMENT: state = JAVA_DOCCOMMENT; jspInState = -initialTokenType&0xff; break; case INTERNAL_IN_JAVA_EXPRESSION: state = JAVA_EXPRESSION; jspInState = -initialTokenType&0xff; break; case INTERNAL_IN_JAVA_MLC: state = JAVA_MLC; jspInState = -initialTokenType&0xff; break; case INTERNAL_CSS_STRING: state = CSS_STRING; languageIndex = LANG_INDEX_CSS; cssPrevState = -initialTokenType&0xff; break; case INTERNAL_CSS_CHAR: state = CSS_CHAR_LITERAL; languageIndex = LANG_INDEX_CSS; cssPrevState = -initialTokenType&0xff; break; case INTERNAL_CSS_MLC: state = CSS_C_STYLE_COMMENT; languageIndex = LANG_INDEX_CSS; cssPrevState = -initialTokenType&0xff; break; } } else { state = Token.NULL; } break; } setLanguageIndex(languageIndex); start = text.offset; s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Sets whether markup close tags should be completed. You might not want * this to be the case, since some tags in standard HTML aren't usually * closed. * * @param complete Whether closing markup tags are completed. * @see #getCompleteCloseTags() */ public static void setCompleteCloseTags(boolean complete) { completeCloseTags = complete; } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public JSPTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public JSPTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 202) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 65: { addToken(Token.OPERATOR); yybegin(CSS_VALUE); } case 130: break; case 86: { addToken(Token.ERROR_NUMBER_FORMAT); } case 131: break; case 74: { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; } case 132: break; case 23: { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_SCRIPT); } case 133: break; case 10: { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.MARKUP_DTD); } case 134: break; case 61: { addToken(Token.SEPARATOR); yybegin(CSS_PROPERTY); } case 135: break; case 112: { start = zzMarkedPos-4; yybegin(HIDDEN_COMMENT); } case 136: break; case 4: { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(INTAG); } case 137: break; case 124: { addToken(Token.RESERVED_WORD_2); } case 138: break; case 104: { addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(cssPrevState); } case 139: break; case 101: { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } case 140: break; case 41: { /* Line ending in '\' => continue to next line. */ if (validJSString) { addToken(start,zzStartRead, Token.LITERAL_CHAR); addEndToken(INTERNAL_IN_JS_CHAR_VALID); } else { addToken(start,zzStartRead, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS_CHAR_INVALID); } return firstToken; } case 141: break; case 5: { addToken(Token.WHITESPACE); } case 142: break; case 125: { addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-6,zzMarkedPos-1, Token.MARKUP_TAG_NAME); start = zzMarkedPos; yybegin(INTAG_SCRIPT); } case 143: break; case 103: { addToken(Token.REGEX); } case 144: break; case 42: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } case 145: break; case 129: { int temp = zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); yybegin(YYINITIAL, LANG_INDEX_DEFAULT); addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } case 146: break; case 111: { addToken(Token.FUNCTION); } case 147: break; case 93: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_MARKUP); start = zzMarkedPos; } case 148: break; case 8: { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } case 149: break; case 36: { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } case 150: break; case 57: { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } case 151: break; case 52: { addToken(Token.ERROR_CHAR); } case 152: break; case 20: { /* Allowing JSP expressions, etc. */ } case 153: break; case 26: { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_STYLE); } case 154: break; case 120: { yybegin(YYINITIAL); addToken(start,zzStartRead+3, Token.MARKUP_COMMENT); } case 155: break; case 89: { /* Skip all escaped chars. */ } case 156: break; case 83: { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } case 157: break; case 29: { yybegin(INTAG_STYLE); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } case 158: break; case 117: { if(JavaScriptTokenMaker.isJavaScriptCompatible("1.6")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } case 159: break; case 109: { if(JavaScriptTokenMaker.isJavaScriptCompatible("1.7")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } case 160: break; case 66: { /*System.out.println("css_value: " + yytext());*/ addToken(Token.IDENTIFIER); } case 161: break; case 17: { /* A non-recognized HTML tag name */ yypushback(yylength()); yybegin(INTAG); } case 162: break; case 28: { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(CSS, LANG_INDEX_CSS); } case 163: break; case 75: { addToken(start,zzStartRead, Token.LITERAL_CHAR); yybegin(cssPrevState); } case 164: break; case 27: { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_STYLE); } case 165: break; case 54: { addToken(Token.IDENTIFIER); /* Needed as InTagIdentifier ignores it. */ } case 166: break; case 7: { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; } case 167: break; case 91: { /* Invalid latin-1 character \xXX */ validJSString = false; } case 168: break; case 25: { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } case 169: break; case 37: { int type = validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } case 170: break; case 115: { addToken(Token.COMMENT_MULTILINE); } case 171: break; case 47: { addToken(Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; } case 172: break; case 110: { start = zzMarkedPos-3; yybegin(JAVA_DOCCOMMENT); } case 173: break; case 80: { start = zzMarkedPos-2; yybegin(PI); } case 174: break; case 126: { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } case 175: break; case 62: { /*System.out.println("css_property: " + yytext());*/ addToken(Token.IDENTIFIER); } case 176: break; case 9: { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } case 177: break; case 77: { int count = yylength(); addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); zzMarkedPos -= (count-1); //yypushback(count-1); yybegin(INTAG_CHECK_TAG_NAME); } case 178: break; case 73: { /* Skip escaped chars. */ } case 179: break; case 90: { /* Invalid Unicode character \\uXXXX */ validJSString = false; } case 180: break; case 123: { addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-5,zzMarkedPos-1, Token.MARKUP_TAG_NAME); start = zzMarkedPos; cssPrevState = zzLexicalState; yybegin(INTAG_STYLE); } case 181: break; case 94: { yybegin(JAVA_EXPRESSION); addToken(start,zzStartRead+1, Token.COMMENT_DOCUMENTATION); } case 182: break; case 81: { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.MARKUP_PROCESSING_INSTRUCTION); } case 183: break; case 92: { yybegin(JAVASCRIPT); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } case 184: break; case 78: { addToken(Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); } case 185: break; case 31: { addEndToken(INTERNAL_IN_JS); return firstToken; } case 186: break; case 39: { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; } case 187: break; case 44: { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addEndToken(INTERNAL_IN_HIDDEN_COMMENT); return firstToken; } case 188: break; case 12: { addToken(Token.OPERATOR); } case 189: break; case 68: { addToken(Token.OPERATOR); yybegin(CSS_PROPERTY); } case 190: break; case 48: { addToken(Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; } case 191: break; case 113: { start = zzMarkedPos-4; yybegin(COMMENT); } case 192: break; case 107: { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); } case 193: break; case 102: { addToken(Token.VARIABLE); } case 194: break; case 55: { /*System.out.println("CSS: " + yytext());*/ addToken(Token.IDENTIFIER); } case 195: break; case 97: { start = zzMarkedPos-2; yybegin(JAVA_MLC); } case 196: break; case 2: { addToken(Token.IDENTIFIER); } case 197: break; case 118: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } case 198: break; case 24: { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(JAVASCRIPT, LANG_INDEX_JS); } case 199: break; case 96: { addToken(Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; } case 200: break; case 119: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } case 201: break; case 64: { addToken(Token.SEPARATOR); yybegin(CSS); } case 202: break; case 128: { yybegin(YYINITIAL); int temp = zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } case 203: break; case 32: { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); } case 204: break; case 45: { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JAVA_DOCCOMMENT - jspInState); return firstToken; } case 205: break; case 72: { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(cssPrevState); } case 206: break; case 63: { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; } case 207: break; case 51: { addToken(Token.ERROR_STRING_DOUBLE); } case 208: break; case 40: { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } case 209: break; case 106: { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(JSP_DIRECTIVE); } case 210: break; case 33: { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); } case 211: break; case 122: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; } case 212: break; case 85: { start = zzMarkedPos-2; yybegin(JS_MLC); } case 213: break; case 88: { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } case 214: break; case 70: { int temp = zzMarkedPos - 2; addToken(zzStartRead, temp, Token.FUNCTION); addToken(zzMarkedPos-1, zzMarkedPos-1, Token.SEPARATOR); zzStartRead = zzCurrentPos = zzMarkedPos; } case 215: break; case 99: { yybegin(JAVA_EXPRESSION); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } case 216: break; case 50: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JAVA_MLC - jspInState); return firstToken; } case 217: break; case 49: { addToken(Token.ANNOTATION); } case 218: break; case 30: { addToken(Token.ERROR_IDENTIFIER); } case 219: break; case 67: { addEndToken(INTERNAL_CSS_VALUE); return firstToken; } case 220: break; case 114: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addHyperlinkToken(temp,zzMarkedPos-1, Token.MARKUP_COMMENT); start = zzMarkedPos; } case 221: break; case 6: { addToken(Token.MARKUP_ENTITY_REFERENCE); } case 222: break; case 116: { addToken(Token.LITERAL_BOOLEAN); } case 223: break; case 18: { /* Shouldn't happen */ yypushback(1); yybegin(INTAG); } case 224: break; case 3: { addNullToken(); return firstToken; } case 225: break; case 56: { addEndToken(INTERNAL_CSS); return firstToken; } case 226: break; case 127: { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } case 227: break; case 58: { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } case 228: break; case 53: { addToken(Token.RESERVED_WORD); } case 229: break; case 98: { addToken(Token.MARKUP_TAG_DELIMITER); start = zzMarkedPos; yybegin(jspInState); } case 230: break; case 13: { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE); } case 231: break; case 100: { addToken(Token.LITERAL_CHAR); } case 232: break; case 16: { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } case 233: break; case 59: { addToken(Token.DATA_TYPE); } case 234: break; case 46: { addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; } case 235: break; case 35: { addToken(Token.SEPARATOR); } case 236: break; case 105: { int count = yylength(); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); zzMarkedPos -= (count-2); //yypushback(count-2); yybegin(INTAG_CHECK_TAG_NAME); } case 237: break; case 71: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; } case 238: break; case 69: { /* End of a function */ addToken(Token.SEPARATOR); } case 239: break; case 19: { addToken(Token.MARKUP_TAG_NAME); } case 240: break; case 11: { addToken(Token.MARKUP_TAG_ATTRIBUTE); } case 241: break; case 121: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_KEYWORD); start = zzMarkedPos; } case 242: break; case 84: { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); } case 243: break; case 38: { /* Line ending in '\' => continue to next line. */ if (validJSString) { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_IN_JS_STRING_VALID); } else { addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS_STRING_INVALID); } return firstToken; } case 244: break; case 87: { addToken(Token.LITERAL_NUMBER_FLOAT); } case 245: break; case 14: { start = zzMarkedPos-1; yybegin(INATTR_SINGLE); } case 246: break; case 108: { boolean highlightedAsRegex = false; if (firstToken==null) { addToken(Token.REGEX); highlightedAsRegex = true; } else { // If this is *likely* to be a regex, based on // the previous token, highlight it as such. Token t = firstToken.getLastNonCommentNonWhitespaceToken(); if (RSyntaxUtilities.regexCanFollowInJavaScript(t)) { addToken(Token.REGEX); highlightedAsRegex = true; } } // If it doesn't *appear* to be a regex, highlight it as // individual tokens. if (!highlightedAsRegex) { int temp = zzStartRead + 1; addToken(zzStartRead, zzStartRead, Token.OPERATOR); zzStartRead = zzCurrentPos = zzMarkedPos = temp; } } case 247: break; case 95: { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } case 248: break; case 76: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; } case 249: break; case 15: { addToken(Token.MARKUP_TAG_DELIMITER); } case 250: break; case 34: { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } case 251: break; case 79: { start = zzMarkedPos-2; yybegin(DTD); } case 252: break; case 82: { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); } case 253: break; case 21: { addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); yybegin(INTAG); } case 254: break; case 22: { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_SCRIPT); } case 255: break; case 43: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } case 256: break; case 60: { /* Unknown pseudo class */ addToken(Token.DATA_TYPE); } case 257: break; case 1: { } case 258: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case INATTR_SINGLE_SCRIPT: { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); return firstToken; } case 2524: break; case JS_CHAR: { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; } case 2525: break; case JAVA_EXPRESSION: { addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; } case 2526: break; case CSS_STRING: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; } case 2527: break; case HIDDEN_COMMENT: { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addEndToken(INTERNAL_IN_HIDDEN_COMMENT); return firstToken; } case 2528: break; case JS_MLC: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } case 2529: break; case CSS_CHAR_LITERAL: { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; } case 2530: break; case JAVA_DOCCOMMENT: { yybegin(JAVA_EXPRESSION); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JAVA_DOCCOMMENT - jspInState); return firstToken; } case 2531: break; case INTAG_SCRIPT: { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_SCRIPT); return firstToken; } case 2532: break; case CSS_PROPERTY: { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; } case 2533: break; case CSS_C_STYLE_COMMENT: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; } case 2534: break; case CSS: { addEndToken(INTERNAL_CSS); return firstToken; } case 2535: break; case CSS_VALUE: { addEndToken(INTERNAL_CSS_VALUE); return firstToken; } case 2536: break; case JSP_DIRECTIVE: { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_IN_JSP_DIRECTIVE); return firstToken; } case 2537: break; case COMMENT: { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; } case 2538: break; case INATTR_DOUBLE_SCRIPT: { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); return firstToken; } case 2539: break; case PI: { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } case 2540: break; case JAVASCRIPT: { addEndToken(INTERNAL_IN_JS); return firstToken; } case 2541: break; case INTAG: { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } case 2542: break; case INTAG_CHECK_TAG_NAME: { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } case 2543: break; case INATTR_SINGLE_STYLE: { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_STYLE); return firstToken; } case 2544: break; case DTD: { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } case 2545: break; case JS_EOL_COMMENT: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } case 2546: break; case INATTR_DOUBLE_STYLE: { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_STYLE); return firstToken; } case 2547: break; case INATTR_SINGLE: { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; } case 2548: break; case YYINITIAL: { addNullToken(); return firstToken; } case 2549: break; case INATTR_DOUBLE: { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; } case 2550: break; case JS_STRING: { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } case 2551: break; case JAVA_MLC: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JAVA_MLC - jspInState); return firstToken; } case 2552: break; case INTAG_STYLE: { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_STYLE); return firstToken; } case 2553: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JavaScriptTokenMaker.flex000066400000000000000000000766641257417003700326620ustar00rootroot00000000000000/* * 02/05/2012 * * JavaScriptTokenMaker.java - Parses a document into JavaScript tokens. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for JavaScript files. Its states could be simplified, but are * kept the way they are to keep a degree of similarity (i.e. copy/paste) * between it and HTML/JSP/PHPTokenMaker. This should cause no difference in * performance.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated JavaScriptTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.9 */ %% %public %class JavaScriptTokenMaker %extends AbstractJFlexCTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Token type specifying we're in a JavaScript multiline comment. */ private static final int INTERNAL_IN_JS_MLC = -8; /** * Token type specifying we're in a JavaScript documentation comment. */ private static final int INTERNAL_IN_JS_COMMENT_DOCUMENTATION = -9; /** * Token type specifying we're in an invalid multi-line JS string. */ private static final int INTERNAL_IN_JS_STRING_INVALID = -10; /** * Token type specifying we're in a valid multi-line JS string. */ private static final int INTERNAL_IN_JS_STRING_VALID = -11; /** * Token type specifying we're in an invalid multi-line JS single-quoted string. */ private static final int INTERNAL_IN_JS_CHAR_INVALID = -12; /** * Token type specifying we're in a valid multi-line JS single-quoted string. */ private static final int INTERNAL_IN_JS_CHAR_VALID = -13; private static final int INTERNAL_E4X = -14; private static final int INTERNAL_E4X_INTAG = -15; private static final int INTERNAL_E4X_MARKUP_PROCESSING_INSTRUCTION = -16; private static final int INTERNAL_IN_E4X_COMMENT = -17; private static final int INTERNAL_E4X_DTD = -18; private static final int INTERNAL_E4X_DTD_INTERNAL = -19; private static final int INTERNAL_E4X_ATTR_SINGLE = -20; private static final int INTERNAL_E4X_ATTR_DOUBLE = -21; private static final int INTERNAL_E4X_MARKUP_CDATA = -22; /** * When in the JS_STRING state, whether the current string is valid. */ private boolean validJSString; /** * Whether we're in an internal DTD. Only valid if in an e4x DTD. */ private boolean e4x_inInternalDtd; /** * The previous e4x state. Only valid if in an e4x state. */ private int e4x_prevState; /** * The version of JavaScript being highlighted. */ private static String jsVersion; /** * Whether e4x is being highlighted. */ private static boolean e4xSupported; /** * Language state set on JS tokens. Must be 0. */ private static final int LANG_INDEX_DEFAULT = 0; /** * Language state set on E4X tokens. */ private static final int LANG_INDEX_E4X = 1; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public JavaScriptTokenMaker() { super(); } static { jsVersion = "1.7"; // Many folks using JS tend to be bleeding edge e4xSupported = true; } /** * Adds the token specified to the current linked list of tokens as an * "end token;" that is, at zzMarkedPos. * * @param tokenType The token's type. */ private void addEndToken(int tokenType) { addToken(zzMarkedPos,zzMarkedPos, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * Returns the closest {@link TokenTypes "standard" token type} for a given * "internal" token type (e.g. one whose value is < 0). */ @Override public int getClosestStandardTokenTypeForInternalType(int type) { switch (type) { case INTERNAL_IN_JS_MLC: return TokenTypes.COMMENT_MULTILINE; case INTERNAL_IN_JS_COMMENT_DOCUMENTATION: return TokenTypes.COMMENT_DOCUMENTATION; case INTERNAL_IN_JS_STRING_INVALID: case INTERNAL_IN_JS_STRING_VALID: case INTERNAL_IN_JS_CHAR_INVALID: case INTERNAL_IN_JS_CHAR_VALID: return TokenTypes.LITERAL_STRING_DOUBLE_QUOTE; } return type; } /** * Returns the JavaScript version being highlighted. * * @return Supported JavaScript version. * @see #isJavaScriptCompatible(String) */ public static String getJavaScriptVersion() { return jsVersion; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; validJSString = true; e4x_prevState = YYINITIAL; e4x_inInternalDtd = false; int languageIndex = LANG_INDEX_DEFAULT; // Start off in the proper state. int state = YYINITIAL; switch (initialTokenType) { case INTERNAL_IN_JS_MLC: state = JS_MLC; break; case INTERNAL_IN_JS_COMMENT_DOCUMENTATION: state = JS_DOCCOMMENT; start = text.offset; break; case INTERNAL_IN_JS_STRING_INVALID: state = JS_STRING; validJSString = false; break; case INTERNAL_IN_JS_STRING_VALID: state = JS_STRING; break; case INTERNAL_IN_JS_CHAR_INVALID: state = JS_CHAR; validJSString = false; break; case INTERNAL_IN_JS_CHAR_VALID: state = JS_CHAR; break; case INTERNAL_E4X: state = E4X; languageIndex = LANG_INDEX_E4X; break; case INTERNAL_E4X_INTAG: state = E4X_INTAG; languageIndex = LANG_INDEX_E4X; break; case INTERNAL_E4X_MARKUP_PROCESSING_INSTRUCTION: state = E4X_PI; languageIndex = LANG_INDEX_E4X; break; case INTERNAL_E4X_DTD: state = E4X_DTD; languageIndex = LANG_INDEX_E4X; break; case INTERNAL_E4X_DTD_INTERNAL: state = E4X_DTD; e4x_inInternalDtd = true; languageIndex = LANG_INDEX_E4X; break; case INTERNAL_E4X_ATTR_SINGLE: state = E4X_INATTR_SINGLE; languageIndex = LANG_INDEX_E4X; break; case INTERNAL_E4X_ATTR_DOUBLE: state = E4X_INATTR_DOUBLE; languageIndex = LANG_INDEX_E4X; break; case INTERNAL_E4X_MARKUP_CDATA: state = E4X_CDATA; languageIndex = LANG_INDEX_E4X; break; default: if (initialTokenType<-1024) { // INTERNAL_IN_E4X_COMMENT - prevState int main = -(-initialTokenType & 0xffffff00); switch (main) { default: // Should never happen case INTERNAL_IN_E4X_COMMENT: state = E4X_COMMENT; break; } e4x_prevState = -initialTokenType&0xff; languageIndex = LANG_INDEX_E4X; } else { // Shouldn't happen state = Token.NULL; } } setLanguageIndex(languageIndex); start = text.offset; s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Returns whether e4x is being highlighted. * * @return Whether e4x is being highlighted. * @see #setE4xSupported(boolean) */ public static boolean isE4xSupported() { return e4xSupported; } /** * Returns whether features for a specific JS version should be honored * while highlighting. * * @param version JavaScript version required * @return Whether the JavaScript version is the same or greater than * version required. */ public static boolean isJavaScriptCompatible(String version) { return jsVersion.compareTo(version) >= 0; } /** * Sets whether e4x should be highlighted. A repaint should be forced on * all RSyntaxTextAreas editing JavaScript if this property * is changed to see the difference. * * @param supported Whether e4x should be highlighted. * @see #isE4xSupported() */ public static void setE4xSupported(boolean supported) { e4xSupported = supported; } /** * Set the supported JavaScript version because some keywords were * introduced on or after this version. * * @param javaScriptVersion The version of JavaScript to support, such as * "1.5" or "1.6". * @see #isJavaScriptCompatible(String) * @see #getJavaScriptVersion() */ public static void setJavaScriptVersion(String javaScriptVersion) { jsVersion = javaScriptVersion; } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} Whitespace = ([ \t\f]+) LineTerminator = ([\n]) Letter = [A-Za-z] NonzeroDigit = [1-9] Digit = ("0"|{NonzeroDigit}) HexDigit = ({Digit}|[A-Fa-f]) OctalDigit = ([0-7]) LetterOrDigit = ({Letter}|{Digit}) EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\") IdentifierStart = ({Letter}|"_"|"$") IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) JS_MLCBegin = "/*" JS_DocCommentBegin = "/**" JS_MLCEnd = "*/" JS_LineCommentBegin = "//" JS_IntegerHelper1 = (({NonzeroDigit}{Digit}*)|"0") JS_IntegerHelper2 = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) JS_IntegerLiteral = ({JS_IntegerHelper1}[lL]?) JS_HexLiteral = ({JS_IntegerHelper2}[lL]?) JS_FloatHelper1 = ([fFdD]?) JS_FloatHelper2 = ([eE][+-]?{Digit}+{JS_FloatHelper1}) JS_FloatLiteral1 = ({Digit}+"."({JS_FloatHelper1}|{JS_FloatHelper2}|{Digit}+({JS_FloatHelper1}|{JS_FloatHelper2}))) JS_FloatLiteral2 = ("."{Digit}+({JS_FloatHelper1}|{JS_FloatHelper2})) JS_FloatLiteral3 = ({Digit}+{JS_FloatHelper2}) JS_FloatLiteral = ({JS_FloatLiteral1}|{JS_FloatLiteral2}|{JS_FloatLiteral3}|({Digit}+[fFdD])) JS_ErrorNumberFormat = (({JS_IntegerLiteral}|{JS_HexLiteral}|{JS_FloatLiteral}){NonSeparator}+) JS_Separator = ([\(\)\{\}\[\]\]]) JS_Separator2 = ([\;,.]) JS_NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"||"|"&&"|">>>") JS_AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") JS_Operator = ({JS_NonAssignmentOperator}|{JS_AssignmentOperator}) JS_Identifier = ({IdentifierStart}{IdentifierPart}*) JS_ErrorIdentifier = ({NonSeparator}+) JS_Regex = ("/"([^\*\\/]|\\.)([^/\\]|\\.)*"/"[gim]*) JS_E4xAttribute = ("@"{Letter}{LetterOrDigit}*) JS_BlockTag = ("abstract"|"access"|"alias"|"augments"|"author"|"borrows"| "callback"|"classdesc"|"constant"|"constructor"|"constructs"| "copyright"|"default"|"deprecated"|"desc"|"enum"|"event"| "example"|"exports"|"external"|"file"|"fires"|"global"| "ignore"|"inner"|"instance"|"kind"|"lends"|"license"| "link"|"member"|"memberof"|"method"|"mixes"|"mixin"|"module"| "name"|"namespace"|"param"|"private"|"property"|"protected"| "public"|"readonly"|"requires"|"return"|"returns"|"see"|"since"| "static"|"summary"|"this"|"throws"|"todo"| "type"|"typedef"|"variation"|"version") JS_InlineTag = ("link"|"linkplain"|"linkcode"|"tutorial") e4x_NameStartChar = ([\:A-Z_a-z]) e4x_NameChar = ({e4x_NameStartChar}|[\-\.0-9]) e4x_TagName = ({e4x_NameStartChar}{e4x_NameChar}*) e4x_Identifier = ([^ \t\n<&;]+) e4x_EndXml = ([;]) e4x_EntityReference = ([&][^; \t]*[;]?) e4x_InTagIdentifier = ([^ \t\n\"\'=\/>]+) e4x_CDataBegin = ("") URLGenDelim = ([:\/\?#\[\]@]) URLSubDelim = ([\!\$&'\(\)\*\+,;=]) URLUnreserved = ({LetterOrDigit}|"_"|[\-\.\~]) URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) URLCharacters = ({URLCharacter}*) URLEndCharacter = ([\/\$]|{LetterOrDigit}) URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) %state JS_STRING %state JS_CHAR %state JS_MLC %state JS_DOCCOMMENT %state JS_EOL_COMMENT %state E4X %state E4X_COMMENT %state E4X_PI %state E4X_DTD %state E4X_INTAG %state E4X_INATTR_DOUBLE %state E4X_INATTR_SINGLE %state E4X_CDATA %% { // ECMA 3+ keywords. "break" | "continue" | "delete" | "else" | "for" | "function" | "if" | "in" | "new" | "this" | "typeof" | "var" | "void" | "while" | "with" { addToken(Token.RESERVED_WORD); } "return" { addToken(Token.RESERVED_WORD_2); } //e4X "each" {if(e4xSupported){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } //JavaScript 1.7 "let" {if(isJavaScriptCompatible("1.7")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } // e4x miscellaneous {JS_E4xAttribute} { addToken(isE4xSupported() ? Token.MARKUP_TAG_ATTRIBUTE : Token.ERROR_IDENTIFIER); } // Reserved (but not yet used) ECMA keywords. "abstract" { addToken(Token.RESERVED_WORD); } "boolean" { addToken(Token.DATA_TYPE); } "byte" { addToken(Token.DATA_TYPE); } "case" { addToken(Token.RESERVED_WORD); } "catch" { addToken(Token.RESERVED_WORD); } "char" { addToken(Token.DATA_TYPE); } "class" { addToken(Token.RESERVED_WORD); } "const" { addToken(Token.RESERVED_WORD); } "debugger" { addToken(Token.RESERVED_WORD); } "default" { addToken(Token.RESERVED_WORD); } "do" { addToken(Token.RESERVED_WORD); } "double" { addToken(Token.DATA_TYPE); } "enum" { addToken(Token.RESERVED_WORD); } "export" { addToken(Token.RESERVED_WORD); } "extends" { addToken(Token.RESERVED_WORD); } "final" { addToken(Token.RESERVED_WORD); } "finally" { addToken(Token.RESERVED_WORD); } "float" { addToken(Token.DATA_TYPE); } "goto" { addToken(Token.RESERVED_WORD); } "implements" { addToken(Token.RESERVED_WORD); } "import" { addToken(Token.RESERVED_WORD); } "instanceof" { addToken(Token.RESERVED_WORD); } "int" { addToken(Token.DATA_TYPE); } "interface" { addToken(Token.RESERVED_WORD); } "long" { addToken(Token.DATA_TYPE); } "native" { addToken(Token.RESERVED_WORD); } "package" { addToken(Token.RESERVED_WORD); } "private" { addToken(Token.RESERVED_WORD); } "protected" { addToken(Token.RESERVED_WORD); } "public" { addToken(Token.RESERVED_WORD); } "short" { addToken(Token.DATA_TYPE); } "static" { addToken(Token.RESERVED_WORD); } "super" { addToken(Token.RESERVED_WORD); } "switch" { addToken(Token.RESERVED_WORD); } "synchronized" { addToken(Token.RESERVED_WORD); } "throw" { addToken(Token.RESERVED_WORD); } "throws" { addToken(Token.RESERVED_WORD); } "transient" { addToken(Token.RESERVED_WORD); } "try" { addToken(Token.RESERVED_WORD); } "volatile" { addToken(Token.RESERVED_WORD); } "null" { addToken(Token.RESERVED_WORD); } // Literals. "false" | "true" { addToken(Token.LITERAL_BOOLEAN); } "NaN" { addToken(Token.RESERVED_WORD); } "Infinity" { addToken(Token.RESERVED_WORD); } // Functions. "eval" | "parseInt" | "parseFloat" | "escape" | "unescape" | "isNaN" | "isFinite" { addToken(Token.FUNCTION); } {LineTerminator} { addNullToken(); return firstToken; } {JS_Identifier} { addToken(Token.IDENTIFIER); } {Whitespace} { addToken(Token.WHITESPACE); } /* String/Character literals. */ [\'] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); } [\"] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); } /* Comment literals. */ "/**/" { addToken(Token.COMMENT_MULTILINE); } {JS_MLCBegin} { start = zzMarkedPos-2; yybegin(JS_MLC); } {JS_DocCommentBegin} { start = zzMarkedPos-3; yybegin(JS_DOCCOMMENT); } {JS_LineCommentBegin} { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); } /* Attempt to identify regular expressions (not foolproof) - do after comments! */ {JS_Regex} { boolean highlightedAsRegex = false; if (firstToken==null) { addToken(Token.REGEX); highlightedAsRegex = true; } else { // If this is *likely* to be a regex, based on // the previous token, highlight it as such. Token t = firstToken.getLastNonCommentNonWhitespaceToken(); if (RSyntaxUtilities.regexCanFollowInJavaScript(t)) { addToken(Token.REGEX); highlightedAsRegex = true; } } // If it doesn't *appear* to be a regex, highlight it as // individual tokens. if (!highlightedAsRegex) { int temp = zzStartRead + 1; addToken(zzStartRead, zzStartRead, Token.OPERATOR); zzStartRead = zzCurrentPos = zzMarkedPos = temp; } } /* Separators. */ {JS_Separator} { addToken(Token.SEPARATOR); } {JS_Separator2} { addToken(Token.IDENTIFIER); } /* Operators. */ [\+]?"="{Whitespace}*"<" { int start = zzStartRead; int operatorLen = yycharat(0)=='+' ? 2 : 1; int yylen = yylength(); // Cache before first addToken() invalidates it //System.out.println("'" + yytext() + "': " + yylength() + ", " + (operatorLen+1)); addToken(zzStartRead,zzStartRead+operatorLen-1, Token.OPERATOR); if (yylen>operatorLen+1) { //System.out.println((start+operatorLen) + ", " + (zzMarkedPos-2)); addToken(start+operatorLen,zzMarkedPos-2, Token.WHITESPACE); } zzStartRead = zzCurrentPos = zzMarkedPos = zzMarkedPos - 1; if (isE4xSupported()) { // Scanning will continue with "<" as markup tag start yybegin(E4X, LANG_INDEX_E4X); } // Found e4x (or syntax error) but option not enabled; // Scanning will continue at "<" as operator } {JS_Operator} { addToken(Token.OPERATOR); } /* Numbers */ {JS_IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {JS_HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } {JS_FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } {JS_ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } {JS_ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } /* Ended with a line not in a string or comment. */ <> { addNullToken(); return firstToken; } /* Catch any other (unhandled) characters and flag them as bad. */ . { addToken(Token.ERROR_IDENTIFIER); } } { [^\n\\\"]+ {} \\x{HexDigit}{2} {} \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } \\u{HexDigit}{4} {} \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } \\. { /* Skip all escaped chars. */ } \\ { /* Line ending in '\' => continue to next line. */ if (validJSString) { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_IN_JS_STRING_VALID); } else { addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS_STRING_INVALID); } return firstToken; } \" { int type = validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(YYINITIAL); } \n | <> { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } } { [^\n\\\']+ {} \\x{HexDigit}{2} {} \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } \\u{HexDigit}{4} {} \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } \\. { /* Skip all escaped chars. */ } \\ { /* Line ending in '\' => continue to next line. */ if (validJSString) { addToken(start,zzStartRead, Token.LITERAL_CHAR); addEndToken(INTERNAL_IN_JS_CHAR_VALID); } else { addToken(start,zzStartRead, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS_CHAR_INVALID); } return firstToken; } \' { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(YYINITIAL); } \n | <> { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addNullToken(); return firstToken; } } { // JavaScript MLC's. This state is essentially Java's MLC state. [^hwf\n\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } [hwf] {} {JS_MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } \* {} \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } } { [^hwf\@\{\n\<\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; } [hwf] {} "@"{JS_BlockTag} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_KEYWORD); start = zzMarkedPos; } "@" {} "{@"{JS_InlineTag}[^\}]*"}" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_KEYWORD); start = zzMarkedPos; } "{" {} \n { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JS_COMMENT_DOCUMENTATION); return firstToken; } "<"[/]?({Letter}[^\>]*)?">" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_MARKUP); start = zzMarkedPos; } \< {} {JS_MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_DOCUMENTATION); } \* {} <> { yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JS_COMMENT_DOCUMENTATION); return firstToken; } } { [^hwf\n]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } [hwf] {} \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } } { "" { int temp = zzMarkedPos; addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); start = temp; yybegin(e4x_prevState); } "-" {} {LineTerminator} | <> { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addEndToken(INTERNAL_IN_E4X_COMMENT - e4x_prevState); return firstToken; } } { [^\n\?]+ {} "?>" { yybegin(E4X); addToken(start,zzStartRead+1, Token.MARKUP_PROCESSING_INSTRUCTION); } "?" {} {LineTerminator} | <> { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); addEndToken(INTERNAL_E4X_MARKUP_PROCESSING_INSTRUCTION); return firstToken; } } { [^\n\[\]<>]+ {} "" { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); } "-" {} {LineTerminator} | <> { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; } } { [^\n\?]+ {} {LineTerminator} { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } "?>" { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.MARKUP_PROCESSING_INSTRUCTION); } "?" {} <> { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } } { [^\n>]+ {} {LineTerminator} { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } ">" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.MARKUP_DTD); } <> { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } } { {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } {Whitespace}+ { addToken(Token.WHITESPACE); } "=" { addToken(Token.OPERATOR); } "/" { addToken(Token.MARKUP_TAG_DELIMITER); /* Not valid but we'll still accept it */ } "/>" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } ">" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE); } [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE); } <> { addToken(start,zzStartRead-1, INTERNAL_INTAG); return firstToken; } } { [^\"]* {} [\"] { yybegin(INTAG); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; } } { [^\']* {} [\'] { yybegin(INTAG); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; } } { {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } {Whitespace}+ { addToken(Token.WHITESPACE); } "=" { addToken(Token.OPERATOR); } "/" { addToken(Token.MARKUP_TAG_DELIMITER); /* Not valid but we'll still accept it */ } "/>" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } ">" { yybegin(AS); addToken(Token.MARKUP_TAG_DELIMITER); } [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_SCRIPT); } [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_SCRIPT); } <> { addToken(start,zzStartRead-1, INTERNAL_INTAG_SCRIPT); return firstToken; } } { [^\"]* {} [\"] { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); return firstToken; } } { [^\']* {} [\'] { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); return firstToken; } } { [^\]]+ {} {CDataEnd} { int temp=zzStartRead; yybegin(YYINITIAL); addToken(start,zzStartRead-1, Token.MARKUP_CDATA); addToken(temp,zzMarkedPos-1, Token.MARKUP_CDATA_DELIMITER); } "]" {} <> { addToken(start,zzStartRead-1, Token.MARKUP_CDATA); return firstToken; } } { {AS_EndScriptTag} { int origStart = zzStartRead; String text = yytext(); int tagNameEnd = text.length() - 2; // "-1" is '>' while (Character.isWhitespace(text.charAt(tagNameEnd))) { tagNameEnd--; } int tagNameLen = tagNameEnd - 1; yybegin(YYINITIAL); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); addToken(origStart+2,origStart+2+tagNameLen-1, Token.MARKUP_TAG_NAME); if (tagNameEnd> { addEndToken(INTERNAL_IN_AS); return firstToken; } /* Catch any other (unhandled) characters and flag them as bad. */ . { addToken(Token.ERROR_IDENTIFIER); } } { [^hwf\n\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } [hwf] {} \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_AS_MLC); return firstToken; } {AS_MLCEnd} { yybegin(AS); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } \* {} <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_AS_MLC); return firstToken; } } { [^hwf\n]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } [hwf] {} \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_AS); return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/MxmlTokenMaker.java000066400000000000000000003405711257417003700315030ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 6/18/15 6:41 PM */ /* * 01/21/2011 * * MxmlTokenMaker.java - Generates tokens for MXML syntax highlighting. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for MXML. * * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated MXMLTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.5 * */ public class MxmlTokenMaker extends AbstractMarkupTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int AS_EOL_COMMENT = 13; public static final int AS_MLC = 12; public static final int INTAG_SCRIPT = 7; public static final int INATTR_DOUBLE_SCRIPT = 8; public static final int CDATA = 10; public static final int INATTR_SINGLE_SCRIPT = 9; public static final int DTD = 3; public static final int INATTR_SINGLE = 6; public static final int INATTR_DOUBLE = 5; public static final int YYINITIAL = 0; public static final int AS = 11; public static final int INTAG = 4; public static final int COMMENT = 1; public static final int PI = 2; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\12\1\10\1\0\1\7\1\36\22\0\1\105\1\16\1\32"+ "\1\37\1\40\1\63\1\13\1\31\2\73\1\42\1\51\1\61\1\50"+ "\1\6\1\41\1\3\3\27\4\27\2\2\1\5\1\14\1\11\1\15"+ "\1\25\1\64\1\72\1\22\1\26\1\20\1\21\1\47\1\45\1\1"+ "\1\122\1\121\1\1\1\110\1\44\1\111\1\112\1\113\1\116\1\123"+ "\1\120\1\66\1\23\1\117\1\115\1\1\1\43\2\1\1\17\1\30"+ "\1\24\1\62\1\4\1\0\1\55\1\35\1\67\1\76\1\54\1\46"+ "\1\106\1\74\1\70\1\114\1\77\1\56\1\102\1\34\1\100\1\71"+ "\1\103\1\53\1\57\1\52\1\33\1\107\1\75\1\104\1\101\1\1"+ "\1\60\1\62\1\60\1\65\uff81\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\5\0\2\1\1\0\2\1\4\0\2\2\1\3\1\4"+ "\1\5\1\6\1\1\1\7\5\1\1\10\2\1\1\11"+ "\1\12\2\13\1\14\1\15\1\16\1\17\1\20\1\1"+ "\1\21\1\1\1\22\1\23\1\24\1\25\2\1\1\26"+ "\1\2\2\27\1\2\1\30\2\14\1\2\1\14\1\31"+ "\3\2\1\31\1\14\1\2\1\32\1\33\3\2\2\26"+ "\1\14\3\2\2\14\25\2\1\1\1\34\5\1\1\35"+ "\3\1\1\36\1\37\1\4\1\40\1\6\5\0\1\41"+ "\1\0\1\26\1\42\2\43\1\27\2\42\1\44\1\42"+ "\3\0\3\2\1\0\1\14\1\2\1\32\1\45\2\33"+ "\1\46\5\2\1\47\3\2\1\26\1\50\1\51\21\2"+ "\1\47\20\2\2\47\12\2\1\47\2\2\1\47\11\2"+ "\1\52\12\0\1\53\2\0\1\54\2\0\1\55\1\26"+ "\1\43\1\0\2\44\3\0\3\2\1\56\1\2\2\32"+ "\1\33\1\57\1\33\6\2\1\47\4\2\1\26\1\0"+ "\1\60\5\2\1\47\23\2\1\47\10\2\1\60\24\2"+ "\1\47\1\2\1\60\7\2\11\0\1\61\2\0\1\62"+ "\1\26\3\0\2\2\1\32\1\63\1\32\1\33\10\2"+ "\1\26\1\64\6\2\1\0\1\65\13\2\1\66\3\2"+ "\1\66\36\2\2\0\1\67\2\0\1\70\3\0\1\26"+ "\2\0\1\2\1\32\1\33\7\2\1\26\5\2\1\47"+ "\1\0\26\2\1\66\13\2\5\0\1\26\2\0\1\2"+ "\1\32\1\33\6\2\1\26\5\2\1\0\30\2\3\0"+ "\4\2\1\26\2\2\1\0\23\2\3\0\1\2\1\66"+ "\1\2\1\47\21\2\1\71\1\0\1\72\4\2\1\66"+ "\40\2"; private static int [] zzUnpackAction() { int [] result = new int[624]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\124\0\250\0\374\0\u0150\0\u01a4\0\u01f8\0\u024c"+ "\0\u02a0\0\u02f4\0\u0348\0\u039c\0\u03f0\0\u0444\0\u0498\0\u04ec"+ "\0\u0540\0\u0594\0\u05e8\0\u063c\0\u0690\0\u0540\0\u06e4\0\u0738"+ "\0\u078c\0\u07e0\0\u0834\0\u0540\0\u0888\0\u08dc\0\u0540\0\u0540"+ "\0\u0930\0\u0984\0\u0540\0\u0540\0\u0540\0\u0540\0\u09d8\0\u0a2c"+ "\0\u0540\0\u0a80\0\u0540\0\u0540\0\u0540\0\u0540\0\u0ad4\0\u0b28"+ "\0\u0b7c\0\u0bd0\0\u0c24\0\u0c78\0\u0ccc\0\u0540\0\u0d20\0\u0d74"+ "\0\u0540\0\u0dc8\0\u0540\0\u0e1c\0\u0e70\0\u0ec4\0\u0f18\0\u0f6c"+ "\0\u0fc0\0\u1014\0\u1068\0\u10bc\0\u1110\0\u1164\0\u0540\0\u11b8"+ "\0\u120c\0\u1260\0\u12b4\0\u1308\0\u135c\0\u13b0\0\u1404\0\u1458"+ "\0\u14ac\0\u1500\0\u1554\0\u15a8\0\u15fc\0\u1650\0\u16a4\0\u16f8"+ "\0\u174c\0\u17a0\0\u17f4\0\u1848\0\u189c\0\u18f0\0\u1944\0\u1998"+ "\0\u19ec\0\u1a40\0\u1a94\0\u1ae8\0\u0540\0\u1b3c\0\u1b90\0\u1be4"+ "\0\u1c38\0\u1c8c\0\u0540\0\u1ce0\0\u1d34\0\u1d88\0\u1ddc\0\u1e30"+ "\0\u1e84\0\u0540\0\u0540\0\u1ed8\0\u1f2c\0\u1f80\0\u1fd4\0\u2028"+ "\0\u0540\0\u207c\0\u20d0\0\u2124\0\u2178\0\u2124\0\u2124\0\u21cc"+ "\0\u2220\0\u2274\0\u22c8\0\u0dc8\0\u231c\0\u2370\0\u23c4\0\u2418"+ "\0\u246c\0\u24c0\0\u2514\0\u2568\0\u25bc\0\u0540\0\u2610\0\u2664"+ "\0\u0540\0\u26b8\0\u270c\0\u2760\0\u27b4\0\u2808\0\u285c\0\u28b0"+ "\0\u2904\0\u2958\0\u29ac\0\u0540\0\u2a00\0\u2a54\0\u2aa8\0\u2afc"+ "\0\u2b50\0\u2ba4\0\u2bf8\0\u2c4c\0\u2ca0\0\u2cf4\0\u2d48\0\u2d9c"+ "\0\u2df0\0\u2e44\0\u2e98\0\u2eec\0\u2f40\0\u2f94\0\u0bd0\0\u2fe8"+ "\0\u303c\0\u3090\0\u30e4\0\u3138\0\u318c\0\u31e0\0\u3234\0\u3288"+ "\0\u32dc\0\u3330\0\u3384\0\u33d8\0\u342c\0\u3480\0\u34d4\0\u3528"+ "\0\u357c\0\u35d0\0\u3624\0\u3678\0\u36cc\0\u3720\0\u3774\0\u37c8"+ "\0\u381c\0\u3870\0\u38c4\0\u3918\0\u396c\0\u39c0\0\u3a14\0\u3a68"+ "\0\u3abc\0\u3b10\0\u3b64\0\u3bb8\0\u3c0c\0\u3c60\0\u3cb4\0\u3d08"+ "\0\u0540\0\u3d5c\0\u3db0\0\u3e04\0\u3e58\0\u3eac\0\u3f00\0\u3f54"+ "\0\u3fa8\0\u3ffc\0\u4050\0\u40a4\0\u40f8\0\u414c\0\u0540\0\u41a0"+ "\0\u41f4\0\u0540\0\u4248\0\u429c\0\u42f0\0\u2124\0\u4344\0\u4398"+ "\0\u43ec\0\u4440\0\u4494\0\u44e8\0\u453c\0\u0540\0\u4590\0\u45e4"+ "\0\u4638\0\u468c\0\u0540\0\u46e0\0\u4734\0\u4788\0\u47dc\0\u4830"+ "\0\u4884\0\u48d8\0\u492c\0\u4980\0\u49d4\0\u4a28\0\u4a7c\0\u4ad0"+ "\0\u4b24\0\u4b78\0\u4bcc\0\u4c20\0\u4c74\0\u4cc8\0\u4d1c\0\u4d70"+ "\0\u4dc4\0\u4e18\0\u4e6c\0\u4ec0\0\u4f14\0\u4f68\0\u4fbc\0\u5010"+ "\0\u5064\0\u50b8\0\u510c\0\u5160\0\u51b4\0\u5208\0\u525c\0\u52b0"+ "\0\u5304\0\u5358\0\u53ac\0\u5400\0\u5454\0\u54a8\0\u54fc\0\u5550"+ "\0\u55a4\0\u55f8\0\u564c\0\u56a0\0\u56f4\0\u5748\0\u579c\0\u57f0"+ "\0\u5844\0\u5898\0\u58ec\0\u5940\0\u5994\0\u59e8\0\u5a3c\0\u5a90"+ "\0\u5ae4\0\u5b38\0\u5b8c\0\u5be0\0\u5c34\0\u5c88\0\u5cdc\0\u5d30"+ "\0\u5d84\0\u5dd8\0\u5e2c\0\u0bd0\0\u5e80\0\u5ed4\0\u5f28\0\u5f7c"+ "\0\u5fd0\0\u6024\0\u6078\0\u60cc\0\u6120\0\u6174\0\u61c8\0\u621c"+ "\0\u6270\0\u62c4\0\u6318\0\u636c\0\u0540\0\u63c0\0\u6414\0\u6468"+ "\0\u64bc\0\u6510\0\u6564\0\u65b8\0\u660c\0\u6660\0\u66b4\0\u0540"+ "\0\u6708\0\u675c\0\u67b0\0\u6804\0\u6858\0\u68ac\0\u6900\0\u6954"+ "\0\u69a8\0\u69fc\0\u6a50\0\u0540\0\u6aa4\0\u6af8\0\u6b4c\0\u6ba0"+ "\0\u6bf4\0\u6c48\0\u6c9c\0\u0bd0\0\u6cf0\0\u6d44\0\u6d98\0\u6dec"+ "\0\u6e40\0\u6e94\0\u6ee8\0\u6f3c\0\u6f90\0\u6fe4\0\u7038\0\u0bd0"+ "\0\u708c\0\u70e0\0\u7134\0\u7188\0\u71dc\0\u7230\0\u7284\0\u72d8"+ "\0\u732c\0\u7380\0\u73d4\0\u7428\0\u747c\0\u74d0\0\u7524\0\u7578"+ "\0\u75cc\0\u7620\0\u7674\0\u76c8\0\u771c\0\u7770\0\u77c4\0\u7818"+ "\0\u786c\0\u78c0\0\u7914\0\u7968\0\u79bc\0\u7a10\0\u7a64\0\u7ab8"+ "\0\u7b0c\0\u7b60\0\u7bb4\0\u7c08\0\u7c5c\0\u7cb0\0\u7d04\0\u7d58"+ "\0\u7dac\0\u7e00\0\u6468\0\u7e54\0\u7ea8\0\u7efc\0\u7f50\0\u7fa4"+ "\0\u7ff8\0\u804c\0\u80a0\0\u80f4\0\u8148\0\u819c\0\u81f0\0\u8244"+ "\0\u8298\0\u82ec\0\u8340\0\u8394\0\u83e8\0\u843c\0\u8490\0\u84e4"+ "\0\u8538\0\u858c\0\u85e0\0\u8634\0\u8688\0\u86dc\0\u8730\0\u8784"+ "\0\u87d8\0\u882c\0\u8880\0\u88d4\0\u8928\0\u897c\0\u89d0\0\u8a24"+ "\0\u8a78\0\u8acc\0\u8b20\0\u8b74\0\u8bc8\0\u8c1c\0\u8c70\0\u8cc4"+ "\0\u8d18\0\u8d6c\0\u8dc0\0\u8e14\0\u8e68\0\u8ebc\0\u8f10\0\u8f64"+ "\0\u8fb8\0\u900c\0\u9060\0\u7c5c\0\u90b4\0\u7d58\0\u9108\0\u915c"+ "\0\u91b0\0\u9204\0\u9258\0\u92ac\0\u9300\0\u9354\0\u93a8\0\u93fc"+ "\0\u9450\0\u94a4\0\u94f8\0\u954c\0\u95a0\0\u95f4\0\u9648\0\u969c"+ "\0\u96f0\0\u9744\0\u9798\0\u97ec\0\u9840\0\u9894\0\u98e8\0\u993c"+ "\0\u9990\0\u99e4\0\u9a38\0\u9a8c\0\u9ae0\0\u9b34\0\u9b88\0\u9bdc"+ "\0\u9c30\0\u9c84\0\u9cd8\0\u9d2c\0\u9d80\0\u9dd4\0\u9e28\0\u9e7c"+ "\0\u9ed0\0\u9f24\0\u9f78\0\u9fcc\0\ua020\0\ua074\0\ua0c8\0\ua11c"+ "\0\ua170\0\ua1c4\0\ua218\0\ua26c\0\ua2c0\0\ua314\0\ua368\0\ua3bc"+ "\0\ua410\0\ua464\0\ua4b8\0\ua50c\0\ua560\0\ua5b4\0\ua608\0\ua65c"+ "\0\ua6b0\0\ua704\0\ua758\0\ua7ac\0\ua800\0\ua854\0\ua8a8\0\ua8fc"+ "\0\ua950\0\ua9a4\0\ua9f8\0\uaa4c\0\u0b7c\0\uaaa0\0\u0540\0\uaaf4"+ "\0\uab48\0\uab9c\0\uabf0\0\uac44\0\uac98\0\uacec\0\uad40\0\uad94"+ "\0\uade8\0\uae3c\0\uae90\0\uaee4\0\uaf38\0\uaf8c\0\uafe0\0\ub034"+ "\0\u0540\0\ub088\0\u0540\0\ub0dc\0\ub130\0\ub184\0\ub1d8\0\ub22c"+ "\0\ub280\0\ub2d4\0\ub328\0\ub37c\0\ub3d0\0\ub424\0\ub478\0\ub4cc"+ "\0\ub520\0\ub574\0\ub5c8\0\ub61c\0\ub670\0\ub6c4\0\ub718\0\ub76c"+ "\0\ub7c0\0\ub814\0\ub868\0\ub8bc\0\ub910\0\ub964\0\ub9b8\0\uba0c"+ "\0\uba60\0\ubab4\0\ubb08\0\ubb5c\0\ubbb0\0\ubc04\0\ubc58\0\ubcac"; private static int [] zzUnpackRowMap() { int [] result = new int[624]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\7\17\1\20\1\21\1\22\1\23\1\24\71\17\1\23"+ "\16\17\10\25\1\26\35\25\1\27\1\25\1\30\23\25"+ "\1\31\1\32\26\25\10\33\1\34\53\33\1\35\37\33"+ "\10\36\1\37\14\36\1\40\76\36\7\41\1\42\1\0"+ "\1\41\1\23\2\41\1\43\7\41\1\44\3\41\1\45"+ "\1\46\6\41\1\47\43\41\1\23\16\41\32\50\1\51"+ "\71\50\31\52\1\51\72\52\7\41\1\42\1\0\1\41"+ "\1\23\2\41\1\43\7\41\1\53\3\41\1\54\1\55"+ "\6\41\1\47\43\41\1\23\16\41\32\50\1\56\71\50"+ "\31\52\1\56\72\52\24\57\1\60\77\57\1\61\1\62"+ "\1\63\1\64\1\62\1\43\1\65\1\23\1\66\1\67"+ "\1\23\1\70\1\71\2\72\1\73\1\74\1\75\1\76"+ "\1\62\1\77\1\100\1\101\1\63\1\61\1\102\1\103"+ "\1\104\1\105\1\106\1\107\1\110\1\62\1\111\1\72"+ "\1\112\1\62\1\113\1\114\1\62\1\115\1\116\1\117"+ "\1\120\1\121\1\122\1\123\1\124\1\73\1\71\2\72"+ "\2\43\1\125\1\126\1\127\1\130\1\61\1\73\1\62"+ "\1\131\1\132\1\62\1\133\1\62\1\134\2\62\1\23"+ "\1\135\1\136\1\137\1\140\1\141\1\142\1\62\1\143"+ "\6\62\10\144\1\145\31\144\1\146\3\144\1\147\25\144"+ "\1\150\1\151\26\144\10\152\1\153\35\152\1\154\25\152"+ "\1\155\1\156\26\152\10\17\4\0\71\17\1\0\25\17"+ "\1\20\2\0\1\23\1\0\71\17\1\23\16\17\125\0"+ "\1\157\3\0\1\157\10\0\1\160\1\0\4\157\2\0"+ "\1\157\4\0\3\157\3\0\1\161\1\0\5\157\2\0"+ "\6\157\4\0\1\162\1\0\4\157\2\0\11\157\1\0"+ "\16\157\7\0\1\23\2\0\1\23\72\0\1\23\16\0"+ "\12\24\1\0\1\24\1\163\70\24\1\0\16\24\10\25"+ "\1\0\35\25\1\0\1\25\1\0\23\25\2\0\26\25"+ "\52\0\1\164\15\0\1\165\103\0\1\166\125\0\1\167"+ "\146\0\1\170\26\0\10\33\1\0\53\33\1\0\37\33"+ "\25\0\1\171\76\0\10\36\1\0\14\36\1\0\76\36"+ "\10\41\1\0\1\41\1\0\2\41\1\0\7\41\1\0"+ "\3\41\2\0\6\41\1\0\43\41\1\0\25\41\1\42"+ "\1\0\1\41\1\23\2\41\1\0\7\41\1\0\3\41"+ "\2\0\6\41\1\0\43\41\1\23\16\41\25\0\1\44"+ "\76\0\32\50\1\0\71\50\31\52\1\0\72\52\24\57"+ "\1\0\77\57\24\0\1\172\77\0\5\61\13\0\4\61"+ "\2\0\3\61\2\0\3\61\1\0\2\61\2\0\5\61"+ "\2\0\6\61\6\0\5\61\1\0\11\61\1\0\17\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ "\4\62\1\61\1\0\11\62\1\0\16\62\2\174\2\63"+ "\1\174\1\0\1\175\11\0\1\174\1\176\2\174\2\0"+ "\1\174\1\63\1\174\2\0\3\174\1\0\2\174\2\0"+ "\1\174\1\177\2\176\1\200\2\0\2\174\1\200\1\174"+ "\1\177\1\174\6\0\5\174\1\0\2\174\1\176\6\174"+ "\1\0\20\174\1\201\1\202\1\174\1\0\1\175\11\0"+ "\1\174\1\176\2\174\2\0\1\174\1\202\1\174\2\0"+ "\3\174\1\0\2\174\2\0\1\203\1\177\2\176\1\200"+ "\2\0\2\174\1\200\1\174\1\177\1\174\6\0\5\174"+ "\1\0\2\174\1\176\5\174\1\203\1\0\16\174\2\0"+ "\2\175\23\0\1\175\105\0\1\204\3\0\1\43\1\205"+ "\22\0\1\206\75\0\1\43\1\0\1\43\123\0\1\43"+ "\106\0\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\6\62\6\0\4\62\1\61\1\0\4\62\1\207\4\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\3\62\1\210\2\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\1\62\1\211\4\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\24\0\1\212\114\0\1\43"+ "\7\0\1\213\76\0\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\4\62"+ "\1\214\4\62\1\0\16\62\30\102\1\215\1\216\72\102"+ "\10\103\1\217\17\103\1\220\1\103\1\221\71\103\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\1\62"+ "\1\222\1\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\5\62\1\223\6\0\2\62\1\224\1\225\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\1\226\2\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\2\62\1\227\1\230\2\62\6\0"+ "\4\62\1\61\1\0\4\62\1\231\4\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\1\62"+ "\1\232\4\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\5\61\13\0\4\61\2\0\3\61\2\0\3\61"+ "\1\0\2\61\2\0\5\61\2\0\6\61\6\0\2\61"+ "\1\233\2\61\1\0\11\61\1\0\16\61\15\0\1\43"+ "\23\0\1\234\1\235\61\0\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\3\62\1\236\12\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\1\237\2\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\1\240\2\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\3\62\1\241\1\62"+ "\1\242\6\0\2\62\1\243\1\62\1\61\1\0\4\62"+ "\1\244\4\62\1\0\16\62\15\0\1\43\32\0\1\43"+ "\70\0\1\43\33\0\1\43\52\0\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\1\62\1\245\1\246\1\247"+ "\2\62\6\0\4\62\1\61\1\0\1\250\3\62\1\251"+ "\1\252\3\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\2\62\1\253\1\254\2\62\6\0"+ "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\4\62\1\255\1\256"+ "\6\0\4\62\1\61\1\0\7\62\1\257\1\260\1\0"+ "\1\62\1\261\14\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\1\62\1\262\1\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\2\62\1\262\6\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\1\257\1\62\1\257"+ "\1\263\2\62\6\0\4\62\1\61\1\0\4\62\1\264"+ "\4\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\1\265\2\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\1\266\1\62\1\267\3\62\6\0"+ "\1\62\1\270\2\62\1\61\1\0\1\62\1\271\7\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\1\272\1\62\1\273\3\62\6\0\4\62\1\61"+ "\1\0\4\62\1\274\4\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\3\62\1\275\1\276"+ "\1\62\6\0\4\62\1\61\1\0\4\62\1\277\4\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\1\62\1\300\1\62\1\0\1\61\1\62"+ "\2\0\3\62\1\301\1\62\2\0\5\62\1\302\6\0"+ "\4\62\1\61\1\0\6\62\1\303\2\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\1\304\2\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\1\62\1\305\1\62\1\306\1\307\1\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\2\62\1\310"+ "\1\62\1\61\1\0\1\311\10\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\2\62\1\312"+ "\3\62\6\0\4\62\1\61\1\0\4\62\1\257\1\313"+ "\3\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\1\62\1\314\1\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\1\62\1\257\4\62\6\0"+ "\4\62\1\61\1\0\11\62\1\0\1\62\1\315\14\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\3\62"+ "\1\316\2\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\1\257\1\62\1\317\3\62\6\0\4\62\1\61\1\0"+ "\4\62\1\320\4\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\3\62\1\321\2\62\6\0"+ "\4\62\1\61\1\0\4\62\1\322\4\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\2\62"+ "\1\323\3\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\3\62\1\324\2\62\6\0\4\62\1\61\1\0\4\62"+ "\1\325\4\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\1\326\2\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\2\62\1\327\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\2\62\1\330\3\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\10\144\1\0\31\144"+ "\1\0\3\144\1\0\25\144\2\0\26\144\41\0\1\331"+ "\134\0\1\332\15\0\1\333\105\0\1\334\146\0\1\335"+ "\26\0\10\152\1\0\35\152\1\0\25\152\2\0\26\152"+ "\52\0\1\336\15\0\1\337\105\0\1\340\146\0\1\341"+ "\27\0\3\157\1\0\2\157\11\0\4\157\2\0\2\157"+ "\3\0\3\157\5\0\6\157\1\0\6\157\6\0\4\157"+ "\2\0\11\157\1\0\16\157\17\0\1\342\30\0\1\343"+ "\54\0\1\344\3\0\1\344\12\0\4\344\2\0\1\344"+ "\4\0\3\344\5\0\5\344\2\0\6\344\6\0\4\344"+ "\2\0\11\344\1\0\16\344\71\0\1\345\110\0\1\346"+ "\72\0\1\347\150\0\1\350\146\0\1\351\53\0\1\352"+ "\76\0\5\61\13\0\4\61\2\0\3\61\2\0\1\353"+ "\2\61\1\0\2\61\2\0\5\61\2\0\6\61\6\0"+ "\5\61\1\0\11\61\1\0\16\61\5\174\13\0\4\174"+ "\2\0\3\174\2\0\3\174\1\0\2\174\2\0\5\174"+ "\2\0\6\174\6\0\5\174\1\0\11\174\1\0\20\174"+ "\2\175\1\174\13\0\1\174\1\176\2\174\2\0\1\174"+ "\1\175\1\174\2\0\3\174\1\0\2\174\2\0\2\174"+ "\2\176\1\200\2\0\2\174\1\200\3\174\6\0\5\174"+ "\1\0\2\174\1\176\6\174\1\0\20\174\2\354\1\174"+ "\13\0\4\174\2\0\1\174\1\354\1\174\2\0\3\174"+ "\1\0\2\174\2\0\5\174\2\355\6\174\6\0\5\174"+ "\1\0\11\174\1\0\20\174\2\201\1\174\1\0\1\175"+ "\11\0\1\174\1\176\2\174\2\0\1\174\1\201\1\174"+ "\2\0\3\174\1\0\2\174\2\0\2\174\2\176\1\200"+ "\2\0\2\174\1\200\3\174\6\0\5\174\1\0\2\174"+ "\1\176\6\174\1\0\20\174\1\201\1\202\1\174\1\0"+ "\1\175\11\0\1\174\1\176\2\174\2\0\1\174\1\202"+ "\1\174\2\0\3\174\1\0\2\174\2\0\1\174\1\356"+ "\2\176\1\200\2\0\2\174\1\200\1\174\1\356\1\174"+ "\6\0\5\174\1\0\2\174\1\176\6\174\1\0\20\174"+ "\2\357\1\174\13\0\3\357\1\174\2\0\2\357\1\174"+ "\2\0\2\174\1\357\1\0\2\174\2\0\2\174\3\357"+ "\2\0\2\174\2\357\2\174\6\0\1\174\1\357\3\174"+ "\1\0\2\174\1\357\6\174\1\0\16\174\17\0\1\360"+ "\105\0\1\361\3\0\1\361\12\0\4\361\2\0\1\361"+ "\4\0\3\361\5\0\5\361\2\0\6\361\6\0\1\362"+ "\3\361\2\0\11\361\1\0\16\361\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\4\62\1\363\1\62\6\0"+ "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\1\364\5\62\6\0"+ "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\1\62\1\365\4\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\25\0"+ "\1\366\113\0\1\43\7\0\1\72\76\0\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ "\1\61\1\0\4\62\1\367\4\62\1\0\16\62\3\370"+ "\1\102\4\370\1\0\16\370\4\102\1\371\2\102\10\370"+ "\1\102\3\370\2\102\50\370\30\217\1\372\1\217\1\373"+ "\74\217\1\103\4\217\1\0\16\217\4\103\1\374\2\103"+ "\10\217\1\103\3\217\2\103\50\217\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\2\62\1\375\1\62\1\376"+ "\1\62\6\0\4\62\1\61\1\0\2\62\1\377\6\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\2\62\1\257\3\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\1\62\1\u0100\1\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ "\2\62\1\u0101\6\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\4\62\1\u0102\1\62\6\0"+ "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ "\1\61\1\0\1\62\1\u0103\6\62\1\u0104\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\1\u0105"+ "\5\62\6\0\4\62\1\61\1\0\6\62\1\u0106\2\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\1\257\5\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\2\62\1\u0107\3\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\5\61\13\0\4\61\2\0\3\61"+ "\2\0\1\61\1\u0108\1\61\1\0\2\61\2\0\5\61"+ "\2\0\6\61\6\0\5\61\1\0\11\61\1\0\16\61"+ "\42\0\1\u0109\61\0\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\1\62\1\u010a\3\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\1\62\1\u010b\1\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\1\62\1\u010c\1\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\4\62\1\u010d\1\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ "\1\62\1\u010e\2\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\1\62\1\u010f\1\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\1\62\1\u0110\4\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\1\u0111\2\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\3\62\1\u0112\2\62\6\0\4\62\1\61"+ "\1\0\5\62\1\257\3\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\4\62\1\u0113\1\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\1\62\1\u0114"+ "\4\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\1\62"+ "\1\u0115\4\62\6\0\2\62\1\u0116\1\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\1\u0117\15\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\6\62\6\0\3\62\1\u0118\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\1\u0119\5\62\6\0\4\62\1\61\1\0"+ "\6\62\1\u011a\2\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\1\62\1\u011b\1\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\5\62\1\223\6\0"+ "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\1\62"+ "\1\u011c\2\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\1\u011d\5\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\3\62\1\u011e"+ "\2\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ "\6\0\4\62\1\61\1\0\2\62\1\257\6\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\2\62\1\u011f\1\0\1\61\1\62\2\0\5\62"+ "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\3\62\1\u0120\2\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\6\62\6\0\3\62\1\u0121\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\3\62\1\u0122\2\62\6\0\4\62\1\61\1\0"+ "\4\62\1\u0123\4\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\1\u0124\5\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\1\62\1\u0125\4\62\6\0"+ "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\2\62"+ "\1\u0126\1\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\1\62\1\u0127"+ "\4\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\4\62"+ "\1\u0128\1\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\1\u0129\2\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\1\u012a\3\62\1\u011e\1\223\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\3\62\1\u012b\2\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\1\62\1\u012c\1\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\1\u012d\5\62\6\0\1\62"+ "\1\u012e\2\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\2\62\1\u012f\2\62\2\0"+ "\6\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\2\62\1\u0130\2\62"+ "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\4\62\1\u0131\11\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\6\62\6\0\3\62\1\u0132\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\2\62\1\u0133\1\0\1\61\1\62"+ "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\2\62\1\u0134\3\62\6\0\2\62\1\u0135"+ "\1\62\1\61\1\0\4\62\1\u0136\4\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\1\62"+ "\1\u0137\4\62\6\0\1\62\1\u0138\2\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\3\62\1\u0139\2\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\1\u013a\5\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\6\62\6\0\2\62\1\u013b\1\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\3\62\1\u013c\1\62\2\0\4\62\1\u013d"+ "\1\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\1\62\1\u013e\1\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\1\u013f\3\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\2\62\1\u0140\3\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\6\62\6\0\4\62\1\61\1\0\10\62\1\u0141"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\1\u0142\5\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\1\u0143\5\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\1\62\1\257\4\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\6\62\6\0\2\62\1\262\1\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ "\5\62\1\u0144\3\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\1\u0145\5\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\1\u0146\2\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\1\62\1\u0147\14\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\4\62\1\u0148"+ "\1\62\6\0\4\62\1\61\1\0\6\62\1\u0149\2\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\6\62\1\u014a\7\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\6\62\6\0\1\62\1\u014b\2\62\1\61"+ "\1\0\11\62\1\0\16\62\71\0\1\u014c\110\0\1\u014d"+ "\117\0\1\u014e\146\0\1\u014f\117\0\1\u0150\110\0\1\u0151"+ "\117\0\1\u0152\146\0\1\u0153\46\0\1\u0154\153\0\1\u0155"+ "\54\0\3\344\1\0\2\344\11\0\4\344\2\0\2\344"+ "\3\0\3\344\5\0\6\344\1\0\6\344\6\0\4\344"+ "\2\0\11\344\1\0\16\344\5\0\1\u0156\172\0\1\345"+ "\140\0\1\u0157\40\0\1\u0158\115\0\2\61\2\u0159\1\61"+ "\13\0\3\u0159\1\61\2\0\2\u0159\1\61\2\0\2\61"+ "\1\u0159\1\0\2\61\2\0\2\61\3\u0159\2\0\2\61"+ "\2\u0159\2\61\6\0\1\61\1\u0159\3\61\1\0\2\61"+ "\1\u0159\6\61\1\0\16\61\2\174\2\354\1\174\13\0"+ "\1\174\1\176\2\174\2\0\1\174\1\354\1\174\2\0"+ "\3\174\1\0\2\174\2\0\2\174\2\176\1\174\2\0"+ "\6\174\6\0\5\174\1\0\2\174\1\176\6\174\1\0"+ "\16\174\2\0\2\354\23\0\1\354\74\0\2\174\2\357"+ "\1\174\13\0\3\357\1\174\2\0\2\357\1\174\2\0"+ "\2\174\1\357\1\0\2\174\2\0\1\174\1\356\3\357"+ "\2\0\2\174\2\357\1\356\1\174\6\0\1\174\1\357"+ "\3\174\1\0\2\174\1\357\6\174\1\0\16\174\20\0"+ "\1\u015a\104\0\3\361\1\0\1\u015b\1\361\11\0\4\361"+ "\2\0\2\361\3\0\3\361\5\0\6\361\1\0\6\361"+ "\6\0\4\361\2\0\11\361\1\0\16\361\1\0\3\361"+ "\1\0\1\u015b\1\361\11\0\4\361\2\0\2\361\3\0"+ "\3\361\5\0\6\361\1\0\6\361\6\0\1\361\1\u015c"+ "\2\361\2\0\11\361\1\0\16\361\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\4\62\1\u015d\4\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\2\62\1\u0144\3\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\3\62\1\323"+ "\2\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\4\62"+ "\1\u015e\1\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\30\370\1\u015f\1\u0160\74\370\2\u0161\14\370\3\u0161"+ "\3\370\2\u0161\1\u015f\1\u0160\3\370\1\u0161\7\370\3\u0161"+ "\4\370\2\u0161\11\370\1\u0161\6\370\1\u0161\25\370\10\217"+ "\1\0\115\217\2\u0162\14\217\3\u0162\3\217\2\u0162\1\372"+ "\1\217\1\373\2\217\1\u0162\7\217\3\u0162\4\217\2\u0162"+ "\11\217\1\u0162\6\217\1\u0162\25\217\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\5\62\1\256\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\4\62\1\u0163\4\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\2\62\1\u0164\3\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\1\u0144\5\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\3\62\1\u0165"+ "\2\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\4\62"+ "\1\257\1\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\4\62\1\u0166\1\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\1\u0167\5\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\6\62\6\0\2\62\1\u0168\1\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\2\62\1\u0169\3\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\3\62\1\u016a\2\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\5\61\13\0\4\61"+ "\2\0\3\61\2\0\3\61\1\0\2\61\2\0\5\61"+ "\2\0\6\61\6\0\1\61\1\u016b\3\61\1\0\11\61"+ "\1\0\16\61\41\0\1\u016c\62\0\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\1\u016d\3\62"+ "\1\61\1\0\11\62\1\0\4\62\1\u016e\11\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ "\1\62\1\u016f\2\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ "\6\0\1\62\1\u0170\2\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\5\62\1\u0111\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\6\62\6\0\4\62\1\61\1\0\4\62\1\u0171\4\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\3\62\1\u0172\2\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ "\1\u0173\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\2\62\1\u0174\3\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\6\62\6\0\1\62\1\u0175\2\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\4\62\1\u0176\1\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\1\u0177\15\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\4\62\1\u0178\4\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\5\62\1\257\6\0"+ "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\1\u0179\15\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\2\62\1\u017a\3\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\1\u017b"+ "\2\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ "\4\62\1\61\1\0\4\62\1\u017c\4\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ "\6\0\4\62\1\61\1\0\2\62\1\u017d\6\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\3\62\1\u017e\2\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\2\62\1\u017f\3\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\4\62\1\u0180\1\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\2\62\1\u0102\3\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\2\62\1\u0181\6\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\2\62\1\321\3\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\1\u0182\1\u0183"+ "\4\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ "\6\0\3\62\1\u0184\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\10\62\1\u0185"+ "\5\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\6\62\6\0\4\62\1\61\1\0\4\62\1\u0186\4\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\1\u012a\5\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\6\62\6\0\2\62\1\u0187\1\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\2\62\1\u010b\3\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\1\62\1\u0188\1\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\1\62\1\u013a"+ "\2\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\5\62\1\u0116\6\0"+ "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\1\u0189\4\62\1\231"+ "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\2\62\1\u018a"+ "\3\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\4\62"+ "\1\u018b\1\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\1\62\1\u018c\4\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\6\62\6\0\2\62\1\u018d\1\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\3\62\1\u018e\2\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\4\62\1\u018f\1\62\6\0\4\62"+ "\1\61\1\0\4\62\1\u0190\4\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\4\62\1\u0182"+ "\1\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\1\62\1\u0167"+ "\14\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\1\62\1\u0191\1\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\1\62\1\u0192\14\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\1\u0193\5\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\5\62\1\u0194\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ "\3\62\1\u0195\5\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\5\62\1\u0180\3\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ "\1\61\1\0\1\257\10\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\4\62\1\223\1\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\3\62\1\u0196"+ "\2\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\2\62"+ "\1\u0197\3\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\3\62\1\u0198\2\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\4\62\1\u0199\1\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\1\62\1\u019a\4\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\5\62\1\u019b\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\3\62"+ "\1\u019c\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\7\62\1\u019d\1\u0185\1\u019e\4\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ "\6\0\4\62\1\61\1\0\4\62\1\u019f\4\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\6\62\6\0\4\62\1\61\1\0\1\u0144\10\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\5\62\1\364\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\6\62\6\0\2\62\1\u01a0\1\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\4\62\1\u0144\1\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\2\62\1\u01a1\1\0\1\61\1\62"+ "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\2\62\1\u01a2\3\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\1\363\5\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\5\0\1\u01a3\172\0\1\u014c"+ "\140\0\1\u01a4\40\0\1\u01a5\122\0\1\u01a6\172\0\1\u0150"+ "\140\0\1\u01a7\40\0\1\u01a8\136\0\1\u01a9\143\0\1\u01aa"+ "\67\0\1\u0156\51\0\1\345\45\0\3\u0158\3\u01ab\4\0"+ "\5\u01ab\4\u0158\1\u01ab\1\0\2\u0158\1\0\1\u01ab\1\0"+ "\3\u0158\1\0\1\u01ab\2\u0158\1\u01ab\5\u0158\2\u01ab\6\u0158"+ "\1\0\1\u01ab\1\0\3\u01ab\4\u0158\2\u01ab\11\u0158\1\0"+ "\16\u0158\2\61\2\u01ac\1\61\13\0\3\u01ac\1\61\2\0"+ "\2\u01ac\1\61\2\0\2\61\1\u01ac\1\0\2\61\2\0"+ "\2\61\3\u01ac\2\0\2\61\2\u01ac\2\61\6\0\1\61"+ "\1\u01ac\3\61\1\0\2\61\1\u01ac\6\61\1\0\16\61"+ "\21\0\1\u01ad\103\0\3\361\1\0\1\u015b\1\361\11\0"+ "\4\361\2\0\2\361\3\0\3\361\5\0\6\361\1\0"+ "\6\361\6\0\1\362\3\361\2\0\11\361\1\0\16\361"+ "\1\0\3\361\1\0\1\u015b\1\361\11\0\4\361\2\0"+ "\2\361\3\0\3\361\5\0\6\361\1\0\1\361\1\u01ae"+ "\4\361\6\0\4\361\2\0\11\361\1\0\16\361\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\1\62\1\u0144"+ "\4\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\2\62"+ "\1\u01af\3\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\10\370\1\0\115\370\2\u01b0\14\370\3\u01b0\3\370"+ "\2\u01b0\1\u015f\1\u0160\3\370\1\u01b0\7\370\3\u01b0\4\370"+ "\2\u01b0\11\370\1\u01b0\6\370\1\u01b0\25\370\2\217\2\u01b1"+ "\14\217\3\u01b1\3\217\2\u01b1\1\372\1\217\1\373\2\217"+ "\1\u01b1\7\217\3\u01b1\4\217\2\u01b1\11\217\1\u01b1\6\217"+ "\1\u01b1\25\217\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\3\62\1\u01b2\2\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\3\62\1\u01b3\1\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\1\u01b4\5\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\6\62\6\0\2\62\1\u01b5\1\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\2\62\1\u01b6\2\62\2\0\6\62\6\0"+ "\1\u01b7\3\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ "\4\62\1\61\1\0\11\62\1\0\1\62\1\223\14\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\5\62"+ "\1\u01b8\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ "\6\0\4\62\1\61\1\0\3\62\1\257\5\62\1\0"+ "\16\62\5\61\13\0\4\61\2\0\3\61\2\0\3\61"+ "\1\0\2\61\2\0\5\61\2\0\4\61\1\u01b9\1\61"+ "\6\0\5\61\1\0\11\61\1\0\17\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\4\62\1\u01ba\4\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ "\1\61\1\0\4\62\1\u01bb\4\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\1\u01bc\5\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\1\u01bd\5\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ "\4\62\1\61\1\0\6\62\1\u01be\2\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\4\62"+ "\1\u01bf\1\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\54\0\1\u01c0\47\0\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\2\62\1\u0180\3\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\3\62\1\u01c1\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\2\62\1\u01c2\3\62\6\0"+ "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ "\1\61\1\0\1\62\1\257\7\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\4\62\1\u01c3"+ "\1\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ "\6\0\4\62\1\61\1\0\4\62\1\u01c4\4\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\1\62\1\u01c5\4\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\1\62\1\u01c6\14\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\4\62"+ "\1\u01c7\4\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\6\62\6\0\3\62\1\u0175\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\1\62\1\u01c8\1\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\3\62\1\u01c9\3\62\1\u01ca\6\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ "\6\0\2\62\1\u01cb\1\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\1\u01cc\5\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\1\62\1\u01cd\1\u01ce\1\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\1\62\1\u01cf\4\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\4\62\1\u011e\1\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\1\62\1\u01d0\1\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ "\1\61\1\0\2\62\1\u0144\6\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ "\2\62\1\u01d1\1\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\1\62"+ "\1\u01d2\4\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\1\u01d3\2\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\3\62\1\u01d4\2\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\1\62\1\u01d5\1\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\4\62\1\u0180\11\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\2\62\1\u01d6\3\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\1\62\1\231\4\62\6\0"+ "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\1\u01d7\5\62\6\0"+ "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\3\62\1\u0197\2\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\2\62\1\u01d8"+ "\3\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\2\62"+ "\1\u01d9\3\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\3\62\1\u01da\2\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\1\u01db\2\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\1\223\5\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\6\62\6\0\4\62\1\61\1\0\6\62\1\u0182"+ "\2\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\6\62\6\0\2\62\1\u01dc\1\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\1\62\1\u01dd\4\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\1\62\1\270"+ "\2\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\2\62"+ "\1\u01de\1\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\2\62\1\u01df"+ "\3\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\12\62\1\u01e0"+ "\3\62\1\61\4\62\13\0\2\62\1\u01e1\1\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\2\62\1\u01e2\3\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\2\62\1\u015d\3\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\6\62\6\0\1\62\1\u0100\2\62"+ "\1\61\1\0\11\62\1\0\16\62\41\0\1\u01e3\67\0"+ "\1\u01a3\51\0\1\u014c\45\0\3\u01a5\3\u01e4\4\0\5\u01e4"+ "\4\u01a5\1\u01e4\1\0\2\u01a5\1\0\1\u01e4\1\0\3\u01a5"+ "\1\0\1\u01e4\2\u01a5\1\u01e4\5\u01a5\2\u01e4\6\u01a5\1\0"+ "\1\u01e4\1\0\3\u01e4\4\u01a5\2\u01e4\11\u01a5\1\0\16\u01a5"+ "\41\0\1\u01e5\67\0\1\u01a6\51\0\1\u0150\45\0\3\u01a8"+ "\3\u01e6\4\0\5\u01e6\4\u01a8\1\u01e6\1\0\2\u01a8\1\0"+ "\1\u01e6\1\0\3\u01a8\1\0\1\u01e6\2\u01a8\1\u01e6\5\u01a8"+ "\2\u01e6\6\u01a8\1\0\1\u01e6\1\0\3\u01e6\4\u01a8\2\u01e6"+ "\11\u01a8\1\0\16\u01a8\22\0\1\u01e7\142\0\1\u0158\62\0"+ "\2\61\2\u01e8\1\61\13\0\3\u01e8\1\61\2\0\2\u01e8"+ "\1\61\2\0\2\61\1\u01e8\1\0\2\61\2\0\2\61"+ "\3\u01e8\2\0\2\61\2\u01e8\2\61\6\0\1\61\1\u01e8"+ "\3\61\1\0\2\61\1\u01e8\6\61\1\0\16\61\22\0"+ "\1\u01e9\102\0\3\361\1\0\1\u015b\1\361\11\0\4\361"+ "\2\0\2\361\3\0\3\361\5\0\6\361\1\0\6\361"+ "\6\0\2\361\1\u01ea\1\361\2\0\11\361\1\0\16\361"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\3\62"+ "\1\u01eb\2\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\2\370\2\u01ec\14\370\3\u01ec\3\370\2\u01ec\1\u015f"+ "\1\u0160\3\370\1\u01ec\7\370\3\u01ec\4\370\2\u01ec\11\370"+ "\1\u01ec\6\370\1\u01ec\25\370\2\217\2\u01ed\14\217\3\u01ed"+ "\3\217\2\u01ed\1\372\1\217\1\373\2\217\1\u01ed\7\217"+ "\3\u01ed\4\217\2\u01ed\11\217\1\u01ed\6\217\1\u01ed\25\217"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ "\6\0\4\62\1\61\1\0\2\62\1\u01ee\6\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\6\62\6\0\2\62\1\u01ef\1\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\2\62\1\u01f0\3\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\1\62\1\u0175\1\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\1\62\1\u01f1\4\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\1\62\1\u01f2"+ "\2\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\3\62"+ "\1\u01f3\1\61\1\0\11\62\1\0\16\62\5\61\13\0"+ "\4\61\2\0\3\61\2\0\1\u01f4\2\61\1\0\2\61"+ "\2\0\5\61\2\0\6\61\6\0\5\61\1\0\11\61"+ "\1\0\17\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\6\62\6\0\1\62\1\u01f5\2\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\6\62\6\0\4\62\1\61\1\0\2\62\1\364"+ "\6\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\6\62\6\0\2\62\1\u01f6\1\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\6\62\6\0\2\62\1\u01f7\1\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\6\62\1\u01f8\2\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\4\62\1\u01f9\1\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\55\0"+ "\1\u01fa\46\0\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\3\62\1\u01fb\2\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\1\u01fc\5\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\2\62\1\u01fd\3\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\3\62\1\257\1\62\2\0\6\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\1\62\1\257\1\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\2\62\1\u01fe\3\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ "\4\62\1\61\1\0\6\62\1\u0180\2\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ "\6\0\4\62\1\61\1\0\2\62\1\u0116\6\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\6\62\6\0\4\62\1\61\1\0\4\62\1\u01ff\4\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\3\62\1\u0200\2\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\6\62\6\0\1\62\1\257\2\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\1\62"+ "\1\u01cd\2\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\1\62\1\u0201\4\62\6\0"+ "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\4\62\1\u0202\1\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ "\4\62\1\61\1\0\4\62\1\u0203\4\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\1\u0144\15\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\1\62\1\u0204\1\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\1\62\1\u0205\1\62\1\0\1\61\1\62\2\0"+ "\3\62\1\u01f3\1\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ "\2\62\1\223\6\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\6\62\1\u0206\2\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\2\62"+ "\1\u0207\1\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ "\4\62\1\61\1\0\6\62\1\u0208\2\62\1\0\16\62"+ "\1\61\4\62\13\0\2\62\1\u0209\1\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\4\62\1\u020a\11\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\6\62\6\0\1\62\1\u020b\2\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\2\62\1\u020c\2\62\2\0\6\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\13\62\1\u020d\2\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ "\4\62\1\61\1\0\11\62\1\0\1\223\15\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\4\62\1\231"+ "\1\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ "\6\0\3\62\1\u020e\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ "\6\0\2\62\1\u01d3\1\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\6\62\6\0\4\62\1\61\1\0\6\62\1\u020f\2\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\1\62\1\u0210\4\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\1\62\1\u0180\3\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\1\62\1\u0211\1\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\1\u0212\3\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\41\0\1\u01a5\123\0"+ "\1\u01a8\105\0\1\u0213\100\0\2\61\2\62\1\61\13\0"+ "\3\62\1\61\2\0\2\62\1\61\2\0\2\61\1\62"+ "\1\0\2\61\2\0\2\61\3\62\2\0\2\61\2\62"+ "\2\61\6\0\1\61\1\62\3\61\1\0\2\61\1\62"+ "\6\61\1\0\16\61\23\0\1\u0214\101\0\3\361\1\0"+ "\1\u015b\1\361\11\0\4\361\2\0\2\361\3\0\3\361"+ "\5\0\6\361\1\0\6\361\6\0\3\361\1\u0215\2\0"+ "\11\361\1\0\16\361\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\1\62\1\u0144\1\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\2\370\2\102\14\370\3\102"+ "\3\370\2\102\1\u015f\1\u0160\3\370\1\102\7\370\3\102"+ "\4\370\2\102\11\370\1\102\6\370\1\102\25\370\2\217"+ "\2\103\14\217\3\103\3\217\2\103\1\372\1\217\1\373"+ "\2\217\1\103\7\217\3\103\4\217\2\103\11\217\1\103"+ "\6\217\1\103\25\217\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\3\62\1\u01c9\12\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\1\62\1\u0216\1\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\2\62\1\u0217\1\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\3\62\1\u0218\2\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\2\62\1\u01b5"+ "\3\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\3\62"+ "\1\u0219\2\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\5\61\13\0\4\61\2\0\3\61\2\0\3\61"+ "\1\0\2\61\2\0\5\61\2\0\6\61\6\0\5\61"+ "\1\0\2\61\1\u021a\6\61\1\0\17\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\3\62\1\u021b\5\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ "\1\61\1\0\4\62\1\u01eb\4\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ "\4\62\1\61\1\0\4\62\1\u01c5\4\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\3\62"+ "\1\u021c\2\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\6\62\6\0\4\62\1\61\1\0\5\62\1\257\3\62"+ "\1\0\16\62\67\0\1\u021d\34\0\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\1\62\1\u021e\4\62\6\0"+ "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\10\62\1\u021f\5\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ "\4\62\1\61\1\0\11\62\1\0\14\62\1\u0220\1\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\3\62\1\u0221"+ "\12\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\6\62\6\0\4\62\1\61\1\0\11\62\1\0\1\62"+ "\1\u0222\14\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\1\62\1\u0223\4\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\3\62\1\u0224\2\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\4\62\1\u0225\1\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\3\62\1\u0226"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\1\223\2\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\3\62\1\u0102\2\62\6\0"+ "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\2\62\1\u0227\3\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\1\u0175\5\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\2\62\1\u0228"+ "\3\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\5\62"+ "\1\u0229\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\1\u01c7\2\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\6\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\1\u0216"+ "\5\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\4\62"+ "\1\u022a\1\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\1\62\1\u022b\1\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\4\62"+ "\1\u022c\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\2\62\1\u022d\3\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\5\62\1\u022e\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\2\62"+ "\1\u022f\6\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\4\62\1\u0230\1\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\22\0\1\u0231\123\0"+ "\1\u0232\102\0\3\361\1\0\1\u015b\1\361\11\0\4\361"+ "\2\0\2\361\3\0\3\361\5\0\6\361\1\0\1\u0233"+ "\5\361\6\0\4\361\2\0\11\361\1\0\16\361\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\2\62\1\262"+ "\3\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\3\62\1\u0234\1\62"+ "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\6\62\6\0\4\62\1\61\1\0\6\62\1\u0175\2\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\6\62\6\0\1\62\1\223\2\62\1\61\1\0"+ "\11\62\1\0\16\62\5\61\13\0\4\61\2\0\3\61"+ "\2\0\3\61\1\0\2\61\2\0\5\61\2\0\2\61"+ "\1\u0235\3\61\6\0\5\61\1\0\11\61\1\0\17\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\2\62\1\u0100"+ "\3\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\1\62\1\u0236\1\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\74\0\1\u0237\27\0\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\1\u0238\15\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\3\62\1\u0239\2\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\2\62\1\u023a"+ "\1\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ "\1\61\1\0\4\62\1\u023b\4\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ "\2\62\1\u023c\1\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ "\6\0\2\62\1\u023d\1\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\6\62\6\0\4\62\1\61\1\0\11\62\1\0\1\u0180"+ "\15\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\6\62\6\0\1\u023e\3\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\2\62\1\u023f\3\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\1\62"+ "\1\u0240\3\62\2\0\6\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\1\62\1\u0241\1\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\1\u0242\1\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ "\4\62\1\u0243\4\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\1\u0180\5\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\1\62\1\u0244\14\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\1\62\1\u0180\4\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ "\2\62\1\u0245\1\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ "\6\0\1\u0246\3\62\1\61\1\0\11\62\1\0\10\62"+ "\1\u0247\5\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\6\62\6\0\2\62\1\u0248\1\62\1\61\1\0"+ "\11\62\1\0\16\62\17\0\1\u0249\123\0\1\366\105\0"+ "\3\361\1\0\1\u015b\1\361\1\u024a\2\0\1\u024a\5\0"+ "\4\361\1\0\1\u024b\2\361\3\0\3\361\5\0\6\361"+ "\1\0\6\361\6\0\4\361\2\0\11\361\1\u024a\16\361"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\1\u024c"+ "\5\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ "\6\0\4\62\1\61\1\0\2\62\1\u0180\6\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\2\62\1\231\3\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\1\u024d\5\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\1\u024e\15\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\1\62\1\u024f\14\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\2\62\1\u0250\3\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\3\62\1\u0251\2\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\4\62\1\u0252\4\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\1\62\1\u0253\4\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ "\4\62\1\61\1\0\4\62\1\u0254\4\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\1\u0116"+ "\5\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ "\6\0\2\62\1\u0255\1\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\3\62\1\u022b\2\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\2\62\1\u0256\3\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\4\62"+ "\1\u0257\4\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\1\u0258\5\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\4\62\1\307\1\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\3\62\1\u0144"+ "\1\61\1\0\11\62\1\0\16\62\7\0\1\u024a\2\0"+ "\1\u024a\12\0\1\u024b\57\0\1\u024a\16\0\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\2\62\1\u0259\3\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ "\4\62\1\61\1\0\1\u0180\10\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ "\4\62\1\61\1\0\1\u025a\10\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ "\2\62\1\u025b\1\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\4\62\1\u020a"+ "\11\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\2\62\1\u025c\1\0\1\61\1\62\2\0\5\62"+ "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\1\u025d\2\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\1\u0139\5\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\3\62\1\u025e\2\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\1\u025f\5\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\1\62\1\231\1\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\1\62\1\u0180\1\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ "\4\62\1\u0260\4\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\1\62\1\u0261\4\62\6\0"+ "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\15\62\1\u0262\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\2\62\1\u0263\3\62"+ "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\4\62\1\u0264"+ "\1\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\1\62\1\u0265\1\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\6\62\6\0\4\62\1\61\1\0\2\62\1\u0216\6\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\6\62\6\0\4\62\1\61\1\0\6\62\1\u0266"+ "\2\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\6\62\6\0\3\62\1\u0180\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\4\62\1\u0267\2\0\6\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\1\u0268\2\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\1\u0269\3\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\2\62\1\u026a\3\62\6\0\4\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ "\2\62\1\u026b\6\62\1\0\16\62\1\61\4\62\13\0"+ "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ "\1\62\2\0\5\62\2\0\3\62\1\u026c\2\62\6\0"+ "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ "\1\61\1\0\11\62\1\0\1\62\1\u026d\14\62\1\61"+ "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ "\1\0\1\61\1\62\2\0\5\62\2\0\3\62\1\u026e"+ "\2\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\4\62"+ "\1\u026f\1\62\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\5\62\1\u0250\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\5\62\1\u0180\6\0\4\62\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\6\62\6\0\3\62\1\u0250\1\61\1\0\11\62\1\0"+ "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ "\2\62\1\u020d\3\62\6\0\4\62\1\61\1\0\11\62"+ "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ "\2\0\4\62\1\u0270\1\62\6\0\4\62\1\61\1\0"+ "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ "\5\62\2\0\6\62\6\0\2\62\1\u0260\1\62\1\61"+ "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ "\2\0\5\62\2\0\6\62\6\0\2\62\1\u0253\1\62"+ "\1\61\1\0\11\62\1\0\16\62"; private static int [] zzUnpackTrans() { int [] result = new int[48384]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\5\0\2\1\1\0\2\1\4\0\2\1\1\11\4\1"+ "\1\11\5\1\1\11\2\1\2\11\2\1\4\11\2\1"+ "\1\11\1\1\4\11\7\1\1\11\2\1\1\11\1\1"+ "\1\11\13\1\1\11\35\1\1\11\5\1\1\11\6\1"+ "\2\11\5\0\1\11\1\0\11\1\3\0\3\1\1\0"+ "\3\1\1\11\2\1\1\11\12\1\1\11\74\1\1\11"+ "\12\0\1\1\2\0\1\11\2\0\1\11\2\1\1\0"+ "\2\1\3\0\3\1\1\11\4\1\1\11\15\1\1\0"+ "\102\1\11\0\1\11\2\0\2\1\3\0\3\1\1\11"+ "\13\1\1\11\6\1\1\0\57\1\2\0\1\1\2\0"+ "\1\1\3\0\1\1\2\0\21\1\1\0\42\1\5\0"+ "\1\1\2\0\17\1\1\0\30\1\3\0\7\1\1\0"+ "\23\1\3\0\3\1\1\11\21\1\1\11\1\0\1\11"+ "\45\1"; private static int [] zzUnpackAttribute() { int [] result = new int[624]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Type specific to JSPTokenMaker denoting a line ending with an unclosed * double-quote attribute. */ public static final int INTERNAL_ATTR_DOUBLE = -1; /** * Type specific to JSPTokenMaker denoting a line ending with an unclosed * single-quote attribute. */ public static final int INTERNAL_ATTR_SINGLE = -2; /** * Token type specific to this class; this signals that the user has * ended a line with an unclosed XML tag; thus a new line is beginning * still inside of the tag. */ public static final int INTERNAL_INTAG = -3; /** * Token type specific to this class; this signals that the user has * ended a line with an unclosed Script tag; thus a new line is beginning * still inside of the tag. */ public static final int INTERNAL_INTAG_SCRIPT = -4; /** * Token type specific to this class; this signals that the user has * ended a line in the middle of a double-quoted attribute in a Script * tag. */ public static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -5; /** * Token type specific to this class; this signals that the user has * ended a line in the middle of a single-quoted attribute in a Script * tag. */ public static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -6; /** * Token type specific to this class; this signals that the user has * ended a line in an ActionScript code block (text content inside a * Script tag). */ public static final int INTERNAL_IN_AS = -7; /** * Token type specific to this class; this signals that the user has * ended a line in an MLC in an ActionScript code block (text content * inside a Script tag). */ public static final int INTERNAL_IN_AS_MLC = -8; /** * Whether closing markup tags are automatically completed for HTML. */ private static boolean completeCloseTags; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public MxmlTokenMaker() { } static { completeCloseTags = true; } /** * Adds the token specified to the current linked list of tokens as an * "end token;" that is, at zzMarkedPos. * * @param tokenType The token's type. */ private void addEndToken(int tokenType) { addToken(zzMarkedPos,zzMarkedPos, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. * @param hyperlink Whether this token is a hyperlink. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset, boolean hyperlink) { super.addToken(array, start,end, tokenType, startOffset, hyperlink); zzStartRead = zzMarkedPos; } /** * Returns whether markup close tags should be completed. For XML, the * default value is true. * * @return Whether closing markup tags are completed. * @see #setCompleteCloseTags(boolean) */ @Override public boolean getCompleteCloseTags() { return completeCloseTags; } /** * Static version of {@link #getCompleteCloseTags()}. This hack is * unfortunately needed for applications to be able to query this value * without instantiating this class. * * @return Whether closing markup tags are completed. * @see #setCompleteCloseTags(boolean) */ public static boolean getCompleteCloseMarkupTags() { return completeCloseTags; } /** * Always returns false, as you never want "mark occurrences" * working in XML files. * * @param type The token type. * @return Whether tokens of this type should have "mark occurrences" * enabled. */ @Override public boolean getMarkOccurrencesOfTokenType(int type) { return false; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.MARKUP_COMMENT: state = COMMENT; start = text.offset; break; case Token.MARKUP_DTD: state = DTD; start = text.offset; break; case INTERNAL_ATTR_DOUBLE: state = INATTR_DOUBLE; start = text.offset; break; case INTERNAL_ATTR_SINGLE: state = INATTR_SINGLE; start = text.offset; break; case Token.MARKUP_PROCESSING_INSTRUCTION: state = PI; start = text.offset; break; case INTERNAL_INTAG: state = INTAG; start = text.offset; break; case INTERNAL_INTAG_SCRIPT: state = INTAG_SCRIPT; start = text.offset; break; case INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT: state = INATTR_DOUBLE_SCRIPT; start = text.offset; break; case INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT: state = INATTR_SINGLE_SCRIPT; start = text.offset; break; case INTERNAL_IN_AS: state = AS; start = text.offset; break; case INTERNAL_IN_AS_MLC: state = AS_MLC; start = text.offset; break; case Token.MARKUP_CDATA: state = CDATA; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Sets whether markup close tags should be completed. * * @param complete Whether closing markup tags are completed. * @see #getCompleteCloseTags() */ public static void setCompleteCloseTags(boolean complete) { completeCloseTags = complete; } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public MxmlTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public MxmlTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 190) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 2: { addToken(Token.IDENTIFIER); } case 59: break; case 53: { addToken(Token.LITERAL_BOOLEAN); } case 60: break; case 29: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_AS); return firstToken; } case 61: break; case 50: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addHyperlinkToken(temp,zzMarkedPos-1, Token.MARKUP_COMMENT); start = zzMarkedPos; } case 62: break; case 51: { addToken(Token.ERROR_CHAR); } case 63: break; case 34: { addToken(Token.ERROR_NUMBER_FORMAT); } case 64: break; case 24: { addEndToken(INTERNAL_IN_AS); return firstToken; } case 65: break; case 19: { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_SCRIPT); } case 66: break; case 13: { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } case 67: break; case 26: { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; } case 68: break; case 38: { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } case 69: break; case 54: { addToken(Token.FUNCTION); } case 70: break; case 43: { int count = yylength(); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-(count-2), zzMarkedPos-1, Token.MARKUP_TAG_NAME); yybegin(INTAG); } case 71: break; case 31: { start = zzMarkedPos-2; yybegin(DTD); } case 72: break; case 27: { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } case 73: break; case 21: { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } case 74: break; case 57: { addToken(Token.MARKUP_CDATA_DELIMITER); start = zzMarkedPos; yybegin(CDATA); } case 75: break; case 22: { addToken(Token.ERROR_IDENTIFIER); } case 76: break; case 4: { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(INTAG); } case 77: break; case 28: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_AS_MLC); return firstToken; } case 78: break; case 46: { addToken(Token.MARKUP_CDATA_DELIMITER); } case 79: break; case 45: { int temp=zzStartRead; yybegin(YYINITIAL); addToken(start,zzStartRead-1, Token.MARKUP_CDATA); addToken(temp,zzMarkedPos-1, Token.MARKUP_CDATA_DELIMITER); } case 80: break; case 17: { yybegin(INTAG); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } case 81: break; case 37: { addToken(Token.LITERAL_CHAR); } case 82: break; case 32: { start = zzMarkedPos-2; yybegin(PI); } case 83: break; case 15: { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE); } case 84: break; case 42: { yybegin(AS); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } case 85: break; case 7: { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; } case 86: break; case 9: { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } case 87: break; case 36: { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } case 88: break; case 8: { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } case 89: break; case 20: { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_SCRIPT); } case 90: break; case 41: { start = zzMarkedPos-2; yybegin(AS_MLC); } case 91: break; case 16: { addToken(Token.MARKUP_TAG_DELIMITER); /* Not valid but we'll still accept it */ } case 92: break; case 5: { addToken(Token.WHITESPACE); } case 93: break; case 30: { int count = yylength(); String tag = yytext(); // Get before addToken calls addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-(count-1), zzMarkedPos-1, Token.MARKUP_TAG_NAME); if (tag.endsWith(":Script") || tag.equals("' while (Character.isWhitespace(text.charAt(tagNameEnd))) { tagNameEnd--; } int tagNameLen = tagNameEnd - 1; yybegin(YYINITIAL); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); addToken(origStart+2,origStart+2+tagNameLen-1, Token.MARKUP_TAG_NAME); if (tagNameEnd * * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated NSISTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 1.0 * */ %% %public %class NSISTokenMaker %extends AbstractJFlexCTokenMaker %unicode %ignorecase %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public NSISTokenMaker() { } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addHyperlinkToken(int, int, int) */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, false); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. * @param hyperlink Whether this token is a hyperlink. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset, boolean hyperlink) { super.addToken(array, start,end, tokenType, startOffset, hyperlink); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = YYINITIAL; switch (initialTokenType) { case Token.LITERAL_STRING_DOUBLE_QUOTE: state = STRING; break; case Token.LITERAL_CHAR: state = CHAR_LITERAL; break; case Token.LITERAL_BACKQUOTE: state = BACKTICKS; break; case Token.COMMENT_MULTILINE: state = MLC; break; } start = text.offset; s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} Letter = ([A-Za-z]) LetterOrUnderscore = ({Letter}|"_") NonzeroDigit = ([1-9]) Digit = ("0"|{NonzeroDigit}) HexDigit = ({Digit}|[A-Fa-f]) OctalDigit = ([0-7]) EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\") IdentifierStart = ({LetterOrUnderscore}|[$/]) IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) LineTerminator = (\n) WhiteSpace = ([ \t\f]) MLCBegin = ("/*") MLCEnd = ("*/") LineCommentBegin = ([;#]) IntegerLiteral = (({NonzeroDigit}{Digit}*)|"0") HexLiteral = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}){NonSeparator}+) BooleanLiteral = ("true"|"false") Separator = ([\(\)\{\}\[\]]) Separator2 = ([\;,.]) NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"|"|"&&"|">>>") AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") Operator = ({NonAssignmentOperator}|{AssignmentOperator}) Identifier = ({IdentifierStart}{IdentifierPart}*) VariableStart = ("$") Variable = ({VariableStart}({Identifier}|"{"{Identifier}"}")) URLGenDelim = ([:\/\?#\[\]@]) URLSubDelim = ([\!\$&'\(\)\*\+,;=]) URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) URLCharacters = ({URLCharacter}*) URLEndCharacter = ([\/\$]|{Letter}|{Digit}) URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) %state STRING %state CHAR_LITERAL %state BACKTICKS %state MLC %state EOL_COMMENT %% { /* Keywords */ "function" | "functionend" | "section" | "sectionend" | "subsection" | "subsectionend" { addToken(Token.RESERVED_WORD); } /* Instructions */ "addbrandingimage" | "addsize" | "allowrootdirinstall" | "allowskipfiles" | "autoclosewindow" | "bggradient" | "brandingtext" | "bringtofront" | "callinstdll" | "caption" | "changeui" | "checkbitmap" | "completedtext" | "componenttext" | "copyfiles" | "crccheck" | "createdirectory" | "createfont" | "createshortcut" | "delete" | "deleteinisec" | "deleteinistr" | "deleteregkey" | "deleteregvalue" | "detailprint" | "detailsbuttontext" | "dirshow" | "dirtext" | "enumregkey" | "enumregvalue" | "exch" | "exec" | "execshell" | "execwait" | "expandenvstrings" | "file" | "fileclose" | "fileerrortext" | "fileopen" | "fileread" | "filereadbyte" | "fileseek" | "filewrite" | "filewritebyte" | "findclose" | "findfirst" | "findnext" | "findwindow" | "flushini" | "getcurinsttype" | "getcurrentaddress" | "getdlgitem" | "getdllversion" | "getdllversionlocal" | "getfiletime" | "getfiletimelocal" | "getfullpathname" | "getfunctionaddress" | "getlabeladdress" | "gettempfilename" | "getwindowtext" | "hidewindow" | "icon" | "initpluginsdir" | "installbuttontext" | "installcolors" | "installdir" | "installdirregkey" | "instprogressflags" | "insttype" | "insttypegettext" | "insttypesettext" | "intfmt" | "intop" | "langstring" | "langstringup" | "licensebkcolor" | "licensedata" | "licenseforceselection" | "licensetext" | "loadlanguagefile" | "loadlanguagefile" | "logset" | "logtext" | "miscbuttontext" | "name" | "nop" | "outfile" | "page" | "plugindir" | "pop" | "push" | "readenvstr" | "readinistr" | "readregdword" | "readregstr" | "regdll" | "rename" | "requestexecutionlevel" | "reservefile" | "rmdir" | "searchpath" | "sectiongetflags" | "sectiongetinsttypes" | "sectiongetsize" | "sectiongettext" | "sectionin" | "sectionsetflags" | "sectionsetinsttypes" | "sectionsetsize" | "sectionsettext" | "sendmessage" | "setautoclose" | "setbkcolor" | "setbrandingimage" | "setcompress" | "setcompressor" | "setcurinsttype" | "setdatablockoptimize" | "setdatesave" | "setdetailsprint" | "setdetailsview" | "setfileattributes" | "setfont" | "setoutpath" | "setoverwrite" | "setpluginunload" | "setrebootflag" | "setshellvarcontext" | "setstaticbkcolor" | "setwindowlong" | "showinstdetails" | "showuninstdetails" | "showwindow" | "silentinstall" | "silentuninstall" | "sleep" | "spacetexts" | "strcpy" | "strlen" | "subcaption" | "uninstallbuttontext" | "uninstallcaption" | "uninstallicon" | "uninstallsubcaption" | "uninstalltext" | "uninstpage" | "unregdll" | "var" | "viaddversionkey" | "videscription" | "vicompanyname" | "vicomments" | "vilegalcopyrights" | "vilegaltrademarks" | "viproductname" | "viproductversion" | "windowicon" | "writeinistr" | "writeregbin" | "writeregdword" | "writeregexpandstr" | "writeregstr" | "writeuninstaller" | "xpstyle" | /* Flow control instructions */ "abort" | "call" | "clearerrors" | "goto" | "ifabort" | "iferrors" | "iffileexists" | "ifrebootflag" | "intcmp" | "intcmpu" | "iswindow" | "messagebox" | "reboot" | "return" | "quit" | "seterrors" | "strcmp" | "strcmps" { addToken(Token.FUNCTION); } /* Compiler utility commands */ "!addincludedir" | "!addplugindir" | "!define" | "!include" | "!cd" | "!echo" | "!error" | "!insertmacro" | "!packhdr" | "!system" | "!warning" | "!undef" | "!verbose" | /* Conditional compilation */ "!ifdef" | "!ifndef" | "!if" | "!else" | "!endif" | "!macro" | "!macroend" { addToken(Token.RESERVED_WORD); } /* Global variables */ "$0" | "$1" | "$2" | "$3" | "$4" | "$5" | "$6" | "$7" | "$8" | "$9" | "$INSTDIR" | "$OUTDIR" | "$CMDLINE" | "$LANGUAGE" | /* Local variables */ ("$R0"{Digit}) | /* Constants */ "ARCHIVE" | "CENTER" | "CONTROL" | "CUR" | "EXT" | ("F"{NonzeroDigit}) | ("F1"{Digit}) | ("F2"[0-4]) | "FILE_ATTRIBUTE_ARCHIVE" | "MB_ABORTRETRYIGNORE" | "RIGHT" | "RO" | "SET" | "SHIFT" | "SW_SHOWMAXIMIZED" | "SW_SHOWMINIMIZED" | "SW_SHOWNORMAL" | "a" | "admin" | "all" | "alwaysoff" | "auto" | "both" | "bottom" | "bzip2" | "checkbox" | "colored" | "components" | "current" | "custom" | "directory" | "force" | "hide" | "highest" | "ifnewer" | "instfiles" | "license" | "listonly" | "manual" | "nevershow" | "none" | "off" | "on" | "r" | "radiobuttons" | "show" | "silent" | "silentlog" | "smooth" | "textonly" | "top" | "try" | "uninstConfirm" | "user" | "w" | "zlib" | "$$" | "$DESKTOP" | "$EXEDIR" | "$HWNDPARENT" | "$PLUGINSDIR" | "$PROGRAMFILES" | "$QUICKLAUNCH" | "$SMPROGRAMS" | "$SMSTARTUP" | "$STARTMENU" | "$SYSDIR" | "$TEMP" | "$WINDIR" | "$\n" | "$\r" | "${NSISDIR}" | "ALT" | "END" | "FILE_ATTRIBUTE_HIDDEN" | "FILE_ATTRIBUTE_NORMAL" | "FILE_ATTRIBUTE_OFFLINE" | "FILE_ATTRIBUTE_READONLY" | "FILE_ATTRIBUTE_SYSTEM" | "FILE_ATTRIBUTE_TEMPORARY" | "HIDDEN" | "HKCC" | "HKCR" | "HKCU" | "HKDD" | "HKLM" | "HKPD" | "HKU" | "SHCTX" | "IDABORT" | "IDCANCEL" | "IDIGNORE" | "IDNO" | "IDOK" | "IDRETRY" | "IDYES" | "LEFT" | "MB_DEFBUTTON1" | "MB_DEFBUTTON2" | "MB_DEFBUTTON3" | "MB_DEFBUTTON4" | "MB_ICONEXCLAMATION" | "MB_ICONINFORMATION" | "MB_ICONQUESTION" | "MB_ICONSTOP" | "MB_OK" | "MB_OKCANCEL" | "MB_RETRYCANCEL" | "MB_RIGHT" | "MB_SETFOREGROUND" | "MB_TOPMOST" | "MB_YESNO" | "MB_YESNOCANCEL" | "NORMAL" | "OFFLINE" | "READONLY" | "SYSTEM" | "TEMPORARY" { addToken(Token.VARIABLE); } {LineTerminator} { addNullToken(); return firstToken; } {BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } {Identifier} { addToken(Token.IDENTIFIER); } {Variable} { addToken(Token.VARIABLE); } {WhiteSpace}+ { addToken(Token.WHITESPACE); } /* String/Character literals. */ \" { start = zzMarkedPos-1; yybegin(STRING); } \' { start = zzMarkedPos-1; yybegin(CHAR_LITERAL); } \` { start = zzMarkedPos-1; yybegin(BACKTICKS); } /* Comment literals. */ "/**/" { addToken(Token.COMMENT_MULTILINE); } {MLCBegin} { start = zzMarkedPos-2; yybegin(MLC); } {LineCommentBegin} { start = zzMarkedPos-1; yybegin(EOL_COMMENT); } /* Separators. */ {Separator} { addToken(Token.SEPARATOR); } {Separator2} { addToken(Token.IDENTIFIER); } /* Operators. */ {Operator} { addToken(Token.OPERATOR); } /* Numbers */ {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } /* Ended with a line not in a string or comment. */ <> { addNullToken(); return firstToken; } /* Catch any other (unhandled) characters and flag them as identifiers. */ . { addToken(Token.IDENTIFIER); } } { [^\n\\\$\"]+ {} \\. { /* Skip all escaped chars. */ } \\ { /* Line ending in '\' => continue to next line. */ addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } {Variable} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } {VariableStart} {} \" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } \n | <> { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); return firstToken; } } { [^\n\\\$\']+ {} \\. { /* Skip all escaped chars. */ } \\ { /* Line ending in '\' => continue to next line. */ addToken(start,zzStartRead, Token.LITERAL_CHAR); return firstToken; } {Variable} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } {VariableStart} {} \' { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); } \n | <> { addToken(start,zzStartRead-1, Token.ERROR_CHAR); return firstToken; } } { [^\n\\\$\`]+ {} \\. { /* Skip all escaped chars. */ } \\ { /* Line ending in '\' => continue to next line. */ addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); return firstToken; } {Variable} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } {VariableStart} {} \` { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); } \n | <> { addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; } } { [^hwf\n\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } [hwf] {} \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } \* {} <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } } { [^hwf\n]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } [hwf] {} \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/NSISTokenMaker.java000066400000000000000000004147571257417003700313520ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 10/7/12 12:43 AM */ /* * 07/14/2014 * * NSISTokenMaker.java - Scanner for NSIS installer scripts. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for NSIS installer scripts.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated NSISTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 1.0 * */ public class NSISTokenMaker extends AbstractJFlexCTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int EOL_COMMENT = 5; public static final int STRING = 1; public static final int CHAR_LITERAL = 2; public static final int YYINITIAL = 0; public static final int MLC = 4; public static final int BACKTICKS = 3; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\16\1\15\1\0\1\16\1\75\22\0\1\16\1\42\1\10"+ "\1\11\1\13\1\41\1\44\1\51\2\31\1\17\1\33\1\52\1\34"+ "\1\32\1\14\1\4\1\72\1\73\1\74\1\74\1\6\1\6\1\6"+ "\1\3\1\3\1\45\1\20\1\35\1\36\1\40\1\43\1\50\1\26"+ "\1\5\1\60\1\62\1\24\1\25\1\63\1\53\1\55\1\1\1\66"+ "\1\27\1\64\1\57\1\61\1\54\1\71\1\23\1\30\1\22\1\7"+ "\1\70\1\56\1\21\1\67\1\65\1\31\1\12\1\31\1\37\1\2"+ "\1\76\1\26\1\5\1\60\1\62\1\24\1\77\1\63\1\100\1\55"+ "\1\1\1\66\1\27\1\64\1\57\1\61\1\54\1\71\1\23\1\30"+ "\1\22\1\7\1\70\1\101\1\21\1\67\1\65\1\46\1\37\1\47"+ "\1\43\uff81\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\6\0\2\1\2\2\2\1\1\3\1\4\2\1\1\5"+ "\1\6\1\7\2\1\1\10\2\1\1\10\2\1\1\11"+ "\7\7\1\12\3\1\1\10\11\1\1\13\1\14\1\15"+ "\1\16\1\14\1\17\1\14\1\20\1\21\1\22\1\14"+ "\1\23\1\14\1\24\1\25\1\14\1\26\10\14\1\27"+ "\6\14\1\0\1\30\1\31\1\30\6\1\2\10\5\1"+ "\1\0\10\1\1\32\17\1\2\10\23\1\1\0\1\7"+ "\13\0\45\1\1\33\1\34\1\0\1\35\1\0\1\36"+ "\4\14\4\0\4\14\5\0\1\31\17\1\1\0\11\1"+ "\1\0\33\1\1\10\12\1\1\10\13\1\10\0\1\37"+ "\2\0\1\37\3\0\7\1\1\40\26\1\1\10\16\1"+ "\1\10\20\1\4\0\4\14\4\0\4\14\5\0\14\1"+ "\1\0\6\1\1\41\1\1\1\42\11\1\1\40\4\1"+ "\1\40\1\1\1\10\34\1\1\10\5\1\16\0\1\10"+ "\30\1\1\40\43\1\2\0\1\34\2\0\1\35\3\14"+ "\1\43\2\0\3\14\1\44\3\0\11\1\1\0\101\1"+ "\14\0\61\1\1\10\11\1\4\0\1\14\2\0\1\14"+ "\3\0\10\1\1\0\41\1\1\40\22\1\1\10\1\1"+ "\7\0\1\37\3\1\1\40\25\1\1\40\32\1\4\0"+ "\12\1\1\0\30\1\1\10\20\1\1\37\6\1\5\0"+ "\55\1\4\0\7\1\1\0\11\1\1\37\1\1\1\40"+ "\42\1\3\0\2\1\1\40\45\1\2\0\44\1\3\0"+ "\60\1\1\40\13\1\1\37\4\1\3\0\2\1\1\40"+ "\45\1\1\40\6\1\1\0\10\1\1\40\147\1"; private static int [] zzUnpackAction() { int [] result = new int[1322]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\102\0\204\0\306\0\u0108\0\u014a\0\u018c\0\u01ce"+ "\0\u0210\0\u0252\0\u0294\0\u02d6\0\u018c\0\u018c\0\u0318\0\u035a"+ "\0\u018c\0\u039c\0\u03de\0\u0420\0\u0462\0\u04a4\0\u04e6\0\u0528"+ "\0\u056a\0\u05ac\0\u05ee\0\u018c\0\u0630\0\u0672\0\u06b4\0\u06f6"+ "\0\u0738\0\u018c\0\u077a\0\u018c\0\u07bc\0\u07fe\0\u0840\0\u0882"+ "\0\u08c4\0\u0906\0\u0948\0\u098a\0\u09cc\0\u0a0e\0\u0a50\0\u0a92"+ "\0\u0ad4\0\u018c\0\u0b16\0\u018c\0\u0b58\0\u0b9a\0\u018c\0\u0bdc"+ "\0\u0b58\0\u018c\0\u018c\0\u0c1e\0\u0b58\0\u0c60\0\u018c\0\u018c"+ "\0\u0ca2\0\u018c\0\u0ce4\0\u0d26\0\u0d68\0\u0daa\0\u0dec\0\u0e2e"+ "\0\u0e70\0\u0eb2\0\u018c\0\u0ef4\0\u0f36\0\u0f78\0\u0fba\0\u0ffc"+ "\0\u103e\0\u1080\0\u10c2\0\u1104\0\u1146\0\u1188\0\u11ca\0\u120c"+ "\0\u124e\0\u1290\0\u12d2\0\u01ce\0\u018c\0\u1314\0\u1356\0\u1398"+ "\0\u13da\0\u141c\0\u145e\0\u14a0\0\u14e2\0\u1524\0\u1566\0\u15a8"+ "\0\u15ea\0\u162c\0\u166e\0\u16b0\0\u16f2\0\u1734\0\u1776\0\u17b8"+ "\0\u17fa\0\u183c\0\u187e\0\u18c0\0\u1902\0\u1944\0\u1986\0\u19c8"+ "\0\u1a0a\0\u1a4c\0\u1a8e\0\u1ad0\0\u1b12\0\u1b54\0\u1b96\0\u1bd8"+ "\0\u1c1a\0\u1c5c\0\u1c9e\0\u1ce0\0\u1d22\0\u1d64\0\u1da6\0\u1de8"+ "\0\u1e2a\0\u1e6c\0\u1eae\0\u1ef0\0\u1f32\0\u1f74\0\u1fb6\0\u1ff8"+ "\0\u03de\0\u203a\0\u207c\0\u20be\0\u2100\0\u2142\0\u2184\0\u21c6"+ "\0\u2208\0\u224a\0\u228c\0\u22ce\0\u2310\0\u2352\0\u2394\0\u23d6"+ "\0\u2418\0\u245a\0\u249c\0\u24de\0\u2520\0\u2562\0\u25a4\0\u25e6"+ "\0\u2628\0\u266a\0\u26ac\0\u26ee\0\u2730\0\u2772\0\u27b4\0\u27f6"+ "\0\u2838\0\u287a\0\u28bc\0\u28fe\0\u2940\0\u2982\0\u29c4\0\u2a06"+ "\0\u2a48\0\u2a8a\0\u2acc\0\u2b0e\0\u2b50\0\u2b92\0\u2bd4\0\u2c16"+ "\0\u2c58\0\u2c9a\0\u018c\0\u2cdc\0\u2d1e\0\u2d60\0\u2da2\0\u018c"+ "\0\u2de4\0\u2e26\0\u2e68\0\u2eaa\0\u2eec\0\u2f2e\0\u2f70\0\u2fb2"+ "\0\u2ff4\0\u3036\0\u3078\0\u30ba\0\u30fc\0\u313e\0\u3180\0\u31c2"+ "\0\u3204\0\u1146\0\u3246\0\u3288\0\u32ca\0\u330c\0\u334e\0\u3390"+ "\0\u33d2\0\u3414\0\u3456\0\u1ad0\0\u3498\0\u34da\0\u351c\0\u355e"+ "\0\u35a0\0\u35e2\0\u3624\0\u3666\0\u36a8\0\u36ea\0\u372c\0\u376e"+ "\0\u37b0\0\u37f2\0\u3834\0\u3876\0\u38b8\0\u38fa\0\u393c\0\u397e"+ "\0\u39c0\0\u3a02\0\u3a44\0\u3a86\0\u3ac8\0\u3b0a\0\u3b4c\0\u3b8e"+ "\0\u3bd0\0\u3c12\0\u3c54\0\u3c96\0\u3cd8\0\u3d1a\0\u3d5c\0\u3d9e"+ "\0\u3de0\0\u3e22\0\u3e64\0\u3ea6\0\u3ee8\0\u3f2a\0\u3f6c\0\u3fae"+ "\0\u3ff0\0\u4032\0\u4074\0\u40b6\0\u40f8\0\u413a\0\u417c\0\u41be"+ "\0\u4200\0\u4242\0\u4284\0\u42c6\0\u4308\0\u434a\0\u438c\0\u43ce"+ "\0\u4410\0\u4452\0\u4494\0\u44d6\0\u4518\0\u455a\0\u459c\0\u45de"+ "\0\u4620\0\u4662\0\u46a4\0\u46e6\0\u4728\0\u476a\0\u47ac\0\u47ee"+ "\0\u4830\0\u018c\0\u4872\0\u48b4\0\u48f6\0\u4938\0\u497a\0\u49bc"+ "\0\u49fe\0\u4a40\0\u4a82\0\u4ac4\0\u01ce\0\u4b06\0\u4b48\0\u4b8a"+ "\0\u4bcc\0\u4c0e\0\u4c50\0\u4c92\0\u4cd4\0\u4d16\0\u4d58\0\u4d9a"+ "\0\u4ddc\0\u4e1e\0\u4e60\0\u4ea2\0\u4ee4\0\u4f26\0\u4f68\0\u4faa"+ "\0\u4fec\0\u502e\0\u5070\0\u50b2\0\u50f4\0\u5136\0\u5178\0\u51ba"+ "\0\u51fc\0\u523e\0\u5280\0\u52c2\0\u5304\0\u5346\0\u5388\0\u53ca"+ "\0\u540c\0\u544e\0\u5490\0\u54d2\0\u5514\0\u5556\0\u5598\0\u55da"+ "\0\u561c\0\u565e\0\u56a0\0\u56e2\0\u5724\0\u5766\0\u57a8\0\u57ea"+ "\0\u582c\0\u586e\0\u58b0\0\u58f2\0\u5934\0\u5976\0\u59b8\0\u59fa"+ "\0\u5a3c\0\u5a7e\0\u5ac0\0\u5b02\0\u5b44\0\u5b86\0\u5bc8\0\u5c0a"+ "\0\u5c4c\0\u5c8e\0\u5cd0\0\u5d12\0\u5d54\0\u5d96\0\u5dd8\0\u5e1a"+ "\0\u5e5c\0\u5e9e\0\u5ee0\0\u5f22\0\u5f64\0\u5fa6\0\u5fe8\0\u602a"+ "\0\u606c\0\u60ae\0\u60f0\0\u6132\0\u6174\0\u61b6\0\u61f8\0\u623a"+ "\0\u5490\0\u627c\0\u62be\0\u018c\0\u6300\0\u01ce\0\u6342\0\u6384"+ "\0\u63c6\0\u6408\0\u644a\0\u648c\0\u64ce\0\u6510\0\u6552\0\u6594"+ "\0\u65d6\0\u6618\0\u665a\0\u669c\0\u66de\0\u6720\0\u6762\0\u67a4"+ "\0\u67e6\0\u6828\0\u686a\0\u68ac\0\u68ee\0\u6930\0\u6972\0\u69b4"+ "\0\u69f6\0\u6a38\0\u6a7a\0\u6abc\0\u6afe\0\u6b40\0\u6b82\0\u6bc4"+ "\0\u6c06\0\u6c48\0\u6c8a\0\u6ccc\0\u6d0e\0\u6d50\0\u6d92\0\u6dd4"+ "\0\u6e16\0\u6e58\0\u6e9a\0\u6edc\0\u6f1e\0\u6f60\0\u6fa2\0\u6fe4"+ "\0\u7026\0\u7068\0\u70aa\0\u70ec\0\u712e\0\u7170\0\u71b2\0\u71f4"+ "\0\u7236\0\u7278\0\u72ba\0\u72fc\0\u733e\0\u7380\0\u73c2\0\u2520"+ "\0\u7404\0\u7446\0\u7488\0\u74ca\0\u750c\0\u754e\0\u7590\0\u75d2"+ "\0\u7614\0\u7656\0\u7698\0\u76da\0\u771c\0\u775e\0\u77a0\0\u77e2"+ "\0\u7824\0\u7866\0\u78a8\0\u78ea\0\u792c\0\u796e\0\u79b0\0\u79f2"+ "\0\u7a34\0\u7a76\0\u7ab8\0\u7afa\0\u7b3c\0\u7b7e\0\u7bc0\0\u7c02"+ "\0\u7c44\0\u7c86\0\u7cc8\0\u7d0a\0\u7d4c\0\u7d8e\0\u7dd0\0\u7e12"+ "\0\u7e54\0\u7e96\0\u7ed8\0\u7f1a\0\u7f5c\0\u7f9e\0\u7fe0\0\u8022"+ "\0\u8064\0\u80a6\0\u80e8\0\u812a\0\u816c\0\u81ae\0\u81f0\0\u8232"+ "\0\u8274\0\u82b6\0\u82f8\0\u833a\0\u837c\0\u83be\0\u018c\0\u8400"+ "\0\u8442\0\u018c\0\u8484\0\u84c6\0\u8508\0\u854a\0\u858c\0\u85ce"+ "\0\u8610\0\u8652\0\u8694\0\u86d6\0\u8718\0\u875a\0\u879c\0\u87de"+ "\0\u8820\0\u8862\0\u88a4\0\u88e6\0\u8928\0\u896a\0\u89ac\0\u89ee"+ "\0\u8a30\0\u8a72\0\u8ab4\0\u8af6\0\u8b38\0\u8b7a\0\u8bbc\0\u8bfe"+ "\0\u8c40\0\u8c82\0\u8cc4\0\u8d06\0\u8d48\0\u8d8a\0\u8dcc\0\u8e0e"+ "\0\u8e50\0\u8e92\0\u8ed4\0\u8f16\0\u8f58\0\u8f9a\0\u8fdc\0\u901e"+ "\0\u9060\0\u90a2\0\u90e4\0\u9126\0\u9168\0\u91aa\0\u91ec\0\u922e"+ "\0\u9270\0\u92b2\0\u92f4\0\u9336\0\u9378\0\u93ba\0\u93fc\0\u943e"+ "\0\u9480\0\u94c2\0\u9504\0\u9546\0\u9588\0\u95ca\0\u960c\0\u964e"+ "\0\u9690\0\u96d2\0\u9714\0\u9756\0\u9798\0\u97da\0\u981c\0\u985e"+ "\0\u98a0\0\u98e2\0\u9924\0\u9966\0\u99a8\0\u99ea\0\u9a2c\0\u9a6e"+ "\0\u9ab0\0\u9af2\0\u9b34\0\u9b76\0\u9bb8\0\u9bfa\0\u9c3c\0\u9c7e"+ "\0\u9cc0\0\u9d02\0\u9d44\0\u9d86\0\u9dc8\0\u9e0a\0\u9e4c\0\u9e8e"+ "\0\u9ed0\0\u9f12\0\u9f54\0\u9f96\0\u9fd8\0\ua01a\0\ua05c\0\ua09e"+ "\0\ua0e0\0\ua122\0\ua164\0\ua1a6\0\ua1e8\0\ua22a\0\ua26c\0\ua2ae"+ "\0\ua2f0\0\ua332\0\ua374\0\ua3b6\0\ua3f8\0\ua43a\0\ua47c\0\ua4be"+ "\0\ua500\0\ua542\0\ua584\0\ua5c6\0\ua608\0\ua64a\0\ua68c\0\ua6ce"+ "\0\ua710\0\ua752\0\ua794\0\ua7d6\0\ua818\0\ua85a\0\ua89c\0\ua8de"+ "\0\ua920\0\ua962\0\ua9a4\0\ua9e6\0\uaa28\0\uaa6a\0\uaaac\0\uaaee"+ "\0\uab30\0\uab72\0\uabb4\0\uabf6\0\uac38\0\uac7a\0\uacbc\0\uacfe"+ "\0\uad40\0\uad82\0\uadc4\0\uae06\0\uae48\0\uae8a\0\u854a\0\uaecc"+ "\0\uaf0e\0\u86d6\0\uaf50\0\uaf92\0\uafd4\0\ub016\0\ub058\0\ub09a"+ "\0\ub0dc\0\ub11e\0\ub160\0\ub1a2\0\ub1e4\0\ub226\0\ub268\0\ub2aa"+ "\0\ub2ec\0\ub32e\0\ub370\0\ub3b2\0\ub3f4\0\ub436\0\ub478\0\ub4ba"+ "\0\ub4fc\0\ub53e\0\ub580\0\ub5c2\0\ub604\0\ub646\0\ub688\0\ub6ca"+ "\0\ub70c\0\ub74e\0\ub790\0\ub7d2\0\ub814\0\ub856\0\ub898\0\ub8da"+ "\0\ub91c\0\ub95e\0\ub9a0\0\ub9e2\0\uba24\0\uba66\0\ubaa8\0\ubaea"+ "\0\ubb2c\0\ubb6e\0\ubbb0\0\ubbf2\0\ubc34\0\ubc76\0\ubcb8\0\ubcfa"+ "\0\ubd3c\0\ubd7e\0\ubdc0\0\ube02\0\ube44\0\ube86\0\ubec8\0\ubf0a"+ "\0\ubf4c\0\ubf8e\0\ubfd0\0\uc012\0\uc054\0\uc096\0\uc0d8\0\uc11a"+ "\0\uc15c\0\uc19e\0\uc1e0\0\uc222\0\uc264\0\uc2a6\0\uc2e8\0\uc32a"+ "\0\uc36c\0\uc3ae\0\uc3f0\0\uc432\0\uc474\0\uc4b6\0\uc4f8\0\uc53a"+ "\0\uc57c\0\uc5be\0\uc600\0\uc642\0\uc684\0\uc6c6\0\uc708\0\uc74a"+ "\0\uc78c\0\uc7ce\0\uc810\0\uc852\0\uc894\0\uc8d6\0\uc918\0\uc95a"+ "\0\uc99c\0\uc9de\0\uca20\0\uca62\0\ucaa4\0\ucae6\0\ucb28\0\ucb6a"+ "\0\ucbac\0\ucbee\0\ucc30\0\ucc72\0\uccb4\0\uccf6\0\ucd38\0\ucd7a"+ "\0\ucdbc\0\ucdfe\0\uce40\0\uce82\0\ucec4\0\ucf06\0\ucf48\0\ucf8a"+ "\0\ucfcc\0\ud00e\0\ud050\0\ud092\0\ud0d4\0\ud116\0\ud158\0\ud19a"+ "\0\ud1dc\0\ud21e\0\ud260\0\ud2a2\0\ud2e4\0\ud326\0\u50b2\0\ud368"+ "\0\ud3aa\0\ud3ec\0\ud42e\0\ud470\0\ud4b2\0\ud4f4\0\ud536\0\ud578"+ "\0\ud5ba\0\ud5fc\0\ud63e\0\ud680\0\ud6c2\0\ud704\0\ud746\0\ud788"+ "\0\ud7ca\0\ud80c\0\ud84e\0\ud890\0\ud8d2\0\ud914\0\ud956\0\ud998"+ "\0\ud9da\0\uda1c\0\uda5e\0\udaa0\0\udae2\0\udb24\0\udb66\0\udba8"+ "\0\udbea\0\udc2c\0\udc6e\0\udcb0\0\udcf2\0\udd34\0\udd76\0\uddb8"+ "\0\uddfa\0\ude3c\0\ude7e\0\udec0\0\udf02\0\udf44\0\udf86\0\udfc8"+ "\0\ue00a\0\ue04c\0\ue08e\0\ue0d0\0\ubaa8\0\ue112\0\ue154\0\ue196"+ "\0\ue1d8\0\ue21a\0\ue25c\0\ue29e\0\ue2e0\0\ue322\0\ue364\0\ue3a6"+ "\0\ue3e8\0\ue42a\0\ue46c\0\ue4ae\0\ue4f0\0\ue532\0\ue574\0\ue5b6"+ "\0\ue5f8\0\ue63a\0\ue67c\0\ue6be\0\ue700\0\ue742\0\ue784\0\ue7c6"+ "\0\ue808\0\ue84a\0\ue88c\0\ue8ce\0\ue910\0\ue952\0\ue994\0\ue9d6"+ "\0\uea18\0\uea5a\0\uea9c\0\ueade\0\ueb20\0\ueb62\0\ueba4\0\uebe6"+ "\0\uec28\0\uec6a\0\uecac\0\uecee\0\ued30\0\ued72\0\uedb4\0\uedf6"+ "\0\uee38\0\uee7a\0\ueebc\0\ueefe\0\uef40\0\uef82\0\uefc4\0\uf006"+ "\0\uf048\0\uf08a\0\uf0cc\0\uf10e\0\uf150\0\uf192\0\uf1d4\0\uf216"+ "\0\uf258\0\uf29a\0\uf2dc\0\uf31e\0\uf360\0\uf3a2\0\uf3e4\0\uf426"+ "\0\uf468\0\uf4aa\0\uf4ec\0\uf52e\0\uf570\0\uf5b2\0\uf5f4\0\uf636"+ "\0\uf678\0\uf6ba\0\uf6fc\0\uf73e\0\uf780\0\uf7c2\0\uf804\0\uf846"+ "\0\uf888\0\uf8ca\0\uf90c\0\uf94e\0\uf990\0\uf9d2\0\ufa14\0\ufa56"+ "\0\ufa98\0\ufada\0\ufb1c\0\ufb5e\0\ufba0\0\ufbe2\0\ufc24\0\ufc66"+ "\0\ufca8\0\ufcea\0\ufd2c\0\ufd6e\0\ufdb0\0\ufdf2\0\ufe34\0\ufe76"+ "\0\ufeb8\0\ufefa\0\uff3c\0\uff7e\0\uffc0\1\2\1\104\1\206"+ "\1\310\1\u010a\1\u014c\1\u018e\1\u01d0\1\u0212\1\u0254\0\uaaee"+ "\1\u0296\1\u02d8\1\u031a\1\u035c\1\u039e\1\u03e0\1\u0422\1\u0464"+ "\1\u04a6\1\u04e8\1\u052a\1\u056c\1\u05ae\1\u05f0\1\u0632\1\u0674"+ "\1\u06b6\1\u06f8\1\u073a\1\u077c\1\u07be\1\u0800\1\u0842\1\u0884"+ "\1\u08c6\1\u0908\1\u094a\1\u098c\1\u09ce\1\u0a10\1\u0a52\1\u0a94"+ "\1\u0ad6\1\u0b18\1\u0b5a\1\u0b9c\1\u0bde\1\u0c20\1\u0c62\1\u0ca4"+ "\1\u0ce6\1\u0d28\1\u0d6a\1\u0dac\1\u0dee\1\u0e30\1\u0e72\1\u0eb4"+ "\1\u0ef6\1\u0f38\1\u0f7a\1\u0fbc\1\u0ffe\1\u1040\1\u1082\1\u10c4"+ "\1\u1106\1\u1148\1\u118a\1\u11cc\1\u120e\1\u1250\1\u1292\1\u12d4"+ "\1\u1316\1\u1358\1\u139a\1\u13dc\1\u141e\1\u1460\1\u14a2\1\u14e4"+ "\1\u1526\1\u1568\1\u15aa\1\u15ec\1\u162e\1\u1670\1\u16b2\1\u16f4"+ "\1\u1736\1\u1778\1\u17ba\1\u17fc\1\u183e\1\u1880\1\u18c2\1\u1904"+ "\1\u1946\1\u1988\1\u19ca\1\u1a0c\1\u1a4e\1\u1a90\1\u1ad2\1\u1b14"+ "\1\u1b56\1\u1b98\1\u1bda\1\u1c1c\1\u1c5e\1\u1ca0\1\u1ce2\1\u1d24"+ "\1\u1d66\1\u1da8\1\u1dea\1\u1e2c\1\u1e6e\1\u1eb0\1\u1ef2\1\u1f34"+ "\1\u1f76\1\u1fb8\0\u01ce\1\u1ffa\1\u203c\1\u207e\1\u20c0\1\u2102"+ "\1\u2144\1\u2186\1\u21c8\1\u220a\1\u224c\1\u228e\1\u22d0\1\u2312"+ "\1\u2354\1\u2396\1\u23d8\1\u241a\1\u245c\1\u249e\1\u24e0\1\u2522"+ "\1\u2564\1\u25a6\1\u25e8\1\u262a\1\u266c\1\u26ae\1\u26f0\1\u2732"+ "\1\u2774\1\u27b6\1\u27f8\1\u283a\1\u287c\1\u28be\1\u2900\1\u2942"+ "\1\u2984\1\u29c6\1\u2a08\1\u2a4a\1\u2a8c\1\u2ace\1\u2b10\1\u2b52"+ "\1\u2b94\1\u2bd6\0\uf570\1\u2c18\1\u2c5a\1\u2c9c\1\u2cde\1\u2d20"+ "\1\u2d62\1\u2da4\1\u2de6\1\u2e28\1\u2e6a\1\u2eac\1\u2eee\1\u2f30"+ "\1\u2f72\1\u2fb4\1\u2ff6\1\u3038\1\u307a\1\u30bc\1\u30fe\1\u3140"+ "\1\u3182\1\u31c4\1\u3206\1\u3248\1\u328a\1\u32cc\1\u330e\1\u3350"+ "\1\u3392\1\u33d4\1\u3416\1\u3458\1\u349a\1\u34dc\1\u351e\1\u3560"+ "\1\u35a2\1\u35e4\1\u3626\1\u3668\1\u36aa\1\u36ec\1\u372e\1\u3770"+ "\1\u37b2\1\u37f4\1\u3836\1\u3878\1\u38ba\1\u38fc\1\u393e\1\u3980"+ "\1\u39c2\1\u3a04\1\u3a46\1\u3a88\1\u3aca\1\u3b0c\1\u3b4e\1\u3b90"+ "\1\u3bd2\1\u3c14\1\u3c56\1\u3c98\1\u3cda\1\u3d1c\1\u3d5e\1\u3da0"+ "\1\u3de2\1\u3e24\1\u3e66\1\u3ea8\1\u3eea\1\u3f2c\1\u3f6e\1\u3fb0"+ "\1\u3ff2\1\u4034\1\u4076\1\u40b8\1\u40fa\1\u413c\1\u417e\1\u41c0"+ "\1\u4202\1\u4244\1\u4286\1\u42c8\1\u430a\1\u434c\1\u438e\1\u43d0"+ "\1\u4412\1\u4454\1\u4496\1\u44d8\1\u451a\1\u455c\1\u459e\1\u45e0"+ "\1\u4622\1\u4664\1\u46a6\1\u46e8\1\u472a\1\u476c\1\u47ae\1\u47f0"+ "\1\u4832\1\u4874\1\u48b6\1\u48f8\1\u493a\1\u497c\1\u49be\1\u4a00"+ "\1\u4a42\1\u4a84"; private static int [] zzUnpackRowMap() { int [] result = new int[1322]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\7\2\10\1\11\1\12\1\13\1\11\1\14\1\15"+ "\1\16\1\7\1\17\1\20\1\21\1\22\1\23\1\16"+ "\1\24\1\25\1\26\1\27\1\30\1\31\1\32\1\33"+ "\1\34\1\7\1\35\1\36\1\37\2\23\1\40\1\23"+ "\1\41\1\42\1\43\1\42\2\34\1\7\1\44\1\7"+ "\1\45\1\46\1\47\1\50\1\51\1\52\1\53\1\54"+ "\1\55\1\56\1\57\2\10\1\60\1\61\3\11\1\7"+ "\1\62\1\30\1\45\1\50\10\63\1\64\1\63\1\65"+ "\1\66\1\63\1\67\64\63\12\70\1\71\1\66\1\70"+ "\1\72\33\70\1\73\30\70\12\74\1\75\1\76\1\74"+ "\1\77\60\74\1\100\3\74\15\101\1\102\1\101\1\103"+ "\5\101\1\104\25\101\1\105\2\101\1\106\20\101\1\107"+ "\1\110\1\111\15\112\1\113\7\112\1\114\25\112\1\115"+ "\2\112\1\116\20\112\1\117\1\120\1\121\103\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\22\10\2\0"+ "\3\10\3\123\2\11\1\123\1\11\1\123\1\0\3\123"+ "\5\0\10\123\17\0\1\123\2\0\17\123\3\11\1\0"+ "\10\123\1\124\1\123\1\124\1\123\1\0\3\123\5\0"+ "\1\125\7\123\17\0\1\123\2\0\17\123\3\124\1\0"+ "\4\123\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ "\1\126\5\10\22\0\6\10\1\127\1\10\1\130\1\10"+ "\1\131\7\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\7\10\1\132\22\0\4\10\1\133\15\10"+ "\2\0\3\10\1\0\2\10\2\134\1\10\1\134\1\10"+ "\2\0\1\122\1\134\1\10\1\135\3\0\1\10\1\136"+ "\1\137\1\140\2\10\1\141\1\142\15\0\1\143\4\0"+ "\1\144\1\145\1\146\1\147\1\10\1\150\1\151\1\152"+ "\6\10\1\153\3\134\1\135\1\0\1\10\1\144\1\147"+ "\1\0\7\10\2\0\1\122\2\10\2\0\1\154\1\0"+ "\10\10\5\0\1\42\14\0\22\10\2\0\3\10\16\0"+ "\1\22\121\0\1\42\44\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\1\10\1\155\20\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\156"+ "\1\157\4\10\22\0\6\10\1\160\13\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\161"+ "\1\10\1\162\2\10\22\0\2\10\1\163\3\10\1\134"+ "\2\10\1\164\10\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\1\165\7\10\22\0\4\10\1\166"+ "\15\10\2\0\3\10\1\0\2\10\1\134\2\10\1\134"+ "\1\167\2\0\1\122\2\10\4\0\5\10\1\170\1\171"+ "\1\10\22\0\2\10\1\172\3\10\1\173\10\10\1\174"+ "\1\175\1\134\2\0\3\10\1\0\4\10\1\176\1\10"+ "\1\177\2\0\1\122\2\10\4\0\2\10\1\200\3\10"+ "\1\201\1\10\22\0\7\10\1\202\12\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\203"+ "\1\10\1\204\2\10\22\0\2\10\1\205\3\10\1\206"+ "\13\10\2\0\3\10\1\0\6\10\1\207\2\0\1\122"+ "\2\10\4\0\1\10\1\210\1\10\1\211\2\10\1\212"+ "\1\10\22\0\1\213\1\214\1\215\1\216\5\10\1\217"+ "\2\10\1\220\5\10\2\0\1\10\1\213\1\216\33\0"+ "\1\42\2\0\1\42\77\0\1\42\1\0\1\42\100\0"+ "\1\221\1\42\101\0\1\42\1\0\1\222\50\0\1\223"+ "\14\0\1\224\1\0\1\225\1\0\1\226\5\0\1\42"+ "\15\0\1\227\1\230\1\231\1\0\1\232\1\0\1\233"+ "\1\0\1\234\3\0\1\235\10\0\1\231\36\0\1\42"+ "\5\0\1\42\36\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\2\10\1\236\10\10\1\237\6\10\2\0"+ "\3\10\1\0\6\10\1\240\2\0\1\122\2\10\4\0"+ "\5\10\1\241\1\242\1\10\22\0\6\10\1\243\13\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\4\10\1\244\2\10\1\245\22\0\4\10\1\246\1\247"+ "\1\10\1\250\12\10\2\0\1\244\2\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\2\10\1\251\5\10\22\0"+ "\2\10\1\252\17\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\3\10\1\253\1\10\1\254\2\10"+ "\22\0\6\10\1\255\13\10\2\0\3\10\1\0\6\10"+ "\1\256\2\0\1\122\2\10\4\0\2\10\1\257\1\260"+ "\1\10\1\261\1\262\1\10\22\0\1\263\5\10\1\264"+ "\13\10\2\0\1\10\1\263\1\10\1\0\6\10\1\265"+ "\2\0\1\122\2\10\4\0\4\10\1\266\3\10\22\0"+ "\4\10\1\134\15\10\2\0\1\266\2\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\3\10\1\267\4\10\22\0"+ "\2\10\1\270\17\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\3\10\1\271\4\10\22\0\6\10"+ "\1\272\13\10\2\0\3\10\1\0\4\10\1\273\2\10"+ "\2\0\1\122\2\10\4\0\3\10\1\274\1\10\1\275"+ "\2\10\22\0\2\10\1\276\17\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\6\10\1\277\1\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\5\10\1\300\2\10\22\0\2\10\1\301"+ "\17\10\2\0\3\10\1\0\6\10\1\302\2\0\1\122"+ "\2\10\4\0\10\10\22\0\22\10\2\0\3\10\10\63"+ "\1\0\1\63\2\0\1\63\1\0\64\63\15\303\1\0"+ "\64\303\1\0\2\304\2\0\1\304\1\0\1\304\3\0"+ "\2\304\4\0\10\304\15\0\1\305\4\0\17\304\5\0"+ "\3\304\12\70\2\0\1\70\1\0\33\70\1\0\30\70"+ "\12\74\2\0\1\74\1\0\60\74\1\0\3\74\1\0"+ "\2\306\2\0\1\306\1\0\1\306\3\0\2\306\4\0"+ "\10\306\15\0\1\307\4\0\17\306\5\0\3\306\15\101"+ "\1\0\1\101\1\0\57\101\17\0\1\310\65\0\15\101"+ "\1\0\1\101\1\0\2\101\1\311\32\101\1\312\21\101"+ "\3\0\15\101\1\0\1\101\1\0\2\101\1\313\54\101"+ "\3\0\15\101\1\0\1\101\1\0\36\101\1\314\20\101"+ "\2\0\1\315\22\0\1\316\32\0\1\317\46\0\1\320"+ "\135\0\1\315\22\0\1\315\15\112\1\0\61\112\3\0"+ "\15\112\1\0\4\112\1\321\32\112\1\322\21\112\3\0"+ "\15\112\1\0\4\112\1\323\54\112\3\0\15\112\1\0"+ "\40\112\1\324\20\112\2\0\1\325\22\0\1\326\32\0"+ "\1\327\46\0\1\330\135\0\1\325\22\0\1\325\7\0"+ "\1\331\72\0\10\123\1\0\3\123\5\0\10\123\17\0"+ "\1\123\2\0\22\123\1\0\10\123\1\124\1\123\1\124"+ "\1\123\1\0\3\123\5\0\10\123\17\0\1\123\2\0"+ "\17\123\3\124\1\0\7\123\4\332\1\123\1\0\3\123"+ "\5\0\3\123\3\332\2\123\17\0\1\123\2\0\5\123"+ "\1\332\1\123\1\332\7\123\3\332\1\0\1\123\1\332"+ "\2\123\1\0\7\10\2\0\1\122\2\10\4\0\5\10"+ "\1\333\2\10\22\0\2\10\1\334\17\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\335"+ "\6\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\10\10\1\336\11\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\2\10\1\337\17\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\3\10\1\340\4\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\2\10\1\341\5\10\22\0\2\10\1\342"+ "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\3\10\1\343\4\10\22\0\22\10\2\0\3\10"+ "\1\0\3\10\1\344\3\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\1\345\7\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\5\10"+ "\1\346\2\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\1\10\1\347\6\10\22\0"+ "\11\10\1\350\2\10\1\351\5\10\2\0\3\10\1\0"+ "\2\352\2\0\1\352\1\0\1\352\3\0\2\352\4\0"+ "\10\352\22\0\17\352\5\0\3\352\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\3\10\1\353\16\10"+ "\2\0\2\10\1\353\1\0\7\10\2\0\1\122\2\10"+ "\4\0\2\10\1\354\3\10\1\355\1\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\4\10\1\356\15\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ "\1\357\17\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\11\10\1\360\10\10\2\0"+ "\3\10\1\0\6\10\1\361\2\0\1\122\2\10\4\0"+ "\10\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\3\10\1\362\4\10\22\0\22\10"+ "\2\0\3\10\1\0\6\10\1\363\2\0\1\122\2\10"+ "\4\0\10\10\22\0\22\10\2\0\3\10\17\0\1\364"+ "\63\0\7\10\2\0\1\122\2\10\4\0\7\10\1\365"+ "\22\0\22\10\2\0\3\10\1\0\6\10\1\366\2\0"+ "\1\122\2\10\4\0\10\10\22\0\14\10\1\134\5\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\1\367\7\10\22\0\11\10\1\370\10\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\1\10\1\134\20\10\2\0\3\10\1\0\4\10\1\371"+ "\2\10\2\0\1\122\2\10\4\0\1\10\1\372\3\10"+ "\1\373\1\10\1\374\22\0\4\10\1\375\3\10\1\376"+ "\5\10\1\377\3\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\7\10\1\u0100\12\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\10\10\1\u0101\11\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\7\10"+ "\1\u0102\12\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\1\10\1\134\1\10\1\u0103\4\10\22\0"+ "\1\10\1\u0104\3\10\1\u0105\14\10\2\0\3\10\1\0"+ "\6\10\1\u0106\2\0\1\122\2\10\4\0\10\10\22\0"+ "\7\10\1\134\12\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\4\10\1\u0107\15\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\6\10\1\u0108\1\10\22\0\22\10\2\0\3\10\1\0"+ "\6\10\1\u0109\2\0\1\122\2\10\4\0\10\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\6\10\1\u010a\1\10\22\0\4\10\1\u010b\15\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\2\10\1\u010c\5\10\22\0\22\10\2\0\3\10\1\0"+ "\2\10\2\134\1\10\1\134\1\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\17\10\3\134\2\0\3\10\1\0"+ "\3\10\1\134\3\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\17\10\3\134\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\6\10\1\u010d\13\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\1\10\1\u010e\6\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\5\10"+ "\1\u010f\14\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\1\10\1\134\4\10\1\u0110\1\10\22\0"+ "\3\10\1\u0111\16\10\2\0\2\10\1\u0111\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\7\10\1\u0112"+ "\1\10\1\u0113\10\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\4\10\1\u0114\3\10\22\0\22\10"+ "\2\0\1\u0114\2\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\4\10\1\u0115\15\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\7\10\1\367"+ "\22\0\5\10\1\u0116\14\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\5\10\1\u0117\2\10\22\0"+ "\10\10\1\u0118\11\10\2\0\3\10\1\0\4\10\1\u0119"+ "\2\10\2\0\1\122\2\10\4\0\10\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\2\10\1\u011a\5\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\1\10\1\u011b\3\10"+ "\1\u011c\2\10\22\0\4\10\1\u011d\1\u011e\14\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ "\1\u011f\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\203"+ "\2\10\1\u0120\1\u0121\13\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\5\10\1\u0122\2\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\6\10\1\u0123\1\10\22\0\22\10\2\0\3\10"+ "\1\0\1\10\1\u0124\5\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\6\10\1\u0125\13\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\7\10\1\u0126\22\0\22\10\2\0\3\10\36\0\1\42"+ "\1\0\1\23\120\0\1\u0127\45\0\1\u0128\3\0\1\u0129"+ "\27\0\1\u012a\1\u012b\103\0\1\u012c\106\0\1\u012d\40\0"+ "\1\u012e\100\0\1\u012f\31\0\1\u0130\17\0\1\u012f\30\0"+ "\1\u0131\135\0\1\u0132\43\0\1\u0133\103\0\1\u0134\77\0"+ "\1\u0135\56\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\7\10\1\u0136\1\u0137\11\10\2\0\3\10\1\0"+ "\6\10\1\134\2\0\1\122\2\10\4\0\6\10\1\u0138"+ "\1\10\22\0\1\10\1\u0139\3\10\1\u013a\1\10\1\u0139"+ "\12\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\7\10\1\u0105\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\10\10"+ "\1\u013b\11\10\2\0\3\10\1\0\6\10\1\u013c\2\0"+ "\1\122\2\10\4\0\10\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\1\10\1\u013d\20\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\2\10\1\u013e\1\u013f\1\u0140\1\u0141"+ "\2\10\22\0\4\10\1\u0142\15\10\2\0\1\u0140\2\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\3\10\1\u0143\16\10\2\0\2\10\1\u0143\1\0\7\10"+ "\2\0\1\122\2\10\4\0\1\10\1\u0144\5\10\1\u0145"+ "\22\0\2\10\1\u0146\17\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\6\10\1\u0147"+ "\13\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\2\10\1\u0148\2\10\1\u0149\2\10\22\0\2\10"+ "\1\u014a\1\10\1\u014b\1\u014c\1\u014d\5\10\1\u014e\5\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\2\10\1\u014f\17\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ "\1\u0150\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\15\10\1\u0151\4\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\11\10\1\u013b\10\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\2\10\1\u0152\5\10\22\0"+ "\1\10\1\u013d\2\10\1\u0153\15\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\2\10\1\u0154\4\10"+ "\1\u0155\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\3\10\1\u0156\4\10\22\0\5\10"+ "\1\u0157\14\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\4\10\1\u0158\15\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\6\10"+ "\1\u0159\1\10\22\0\1\10\1\u015a\20\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u015b"+ "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\3\10\1\u015c\1\10\1\u015d\2\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\6\10\1\u015e\1\10\22\0\1\10\1\u015f"+ "\2\10\1\u0160\4\10\1\u0161\10\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\1\10\1\u0162\6\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\4\10\1\u0163\3\10\22\0\22\10\2\0"+ "\1\u0163\2\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\1\10\1\u0164\4\10\1\u0165\1\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ "\1\u0166\5\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\1\10\1\u0167\6\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\1\10\1\u0168\6\10\22\0\22\10\2\0\3\10"+ "\1\0\1\10\1\u0169\5\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\7\10\1\u016a\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\4\10\1\u016b\15\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\7\10\1\u016c\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\2\10\1\u016d\17\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\2\10\1\u013d\5\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\5\10\1\u016e\1\u016f\1\10\22\0\1\10"+ "\1\u0170\3\10\1\u0171\1\10\1\u0172\12\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\2\10\1\u0173\17\10\2\0\3\10\1\0\7\304\2\0"+ "\1\u0174\2\304\4\0\10\304\22\0\22\304\2\0\3\304"+ "\1\0\2\u0175\2\0\1\u0175\1\0\1\u0175\3\0\2\u0175"+ "\4\0\10\u0175\22\0\17\u0175\5\0\3\u0175\1\0\7\306"+ "\2\0\1\u0176\2\306\4\0\10\306\22\0\22\306\2\0"+ "\3\306\1\0\2\u0177\2\0\1\u0177\1\0\1\u0177\3\0"+ "\2\u0177\4\0\10\u0177\22\0\17\u0177\5\0\3\u0177\15\101"+ "\1\0\1\101\1\0\34\101\1\u0178\22\101\3\0\15\101"+ "\1\0\1\101\1\0\7\101\1\u0179\47\101\3\0\15\101"+ "\1\0\1\101\1\0\2\101\1\u017a\54\101\3\0\15\101"+ "\1\0\1\101\1\0\36\101\1\u017b\20\101\2\0\1\u017c"+ "\56\0\1\u017c\22\0\1\u017c\54\0\1\u017d\54\0\1\u017e"+ "\74\0\1\u017f\57\0\15\112\1\0\36\112\1\u0180\22\112"+ "\3\0\15\112\1\0\11\112\1\u0181\47\112\3\0\15\112"+ "\1\0\4\112\1\u0182\54\112\3\0\15\112\1\0\40\112"+ "\1\u0183\20\112\2\0\1\u0184\56\0\1\u0184\22\0\1\u0184"+ "\54\0\1\u0185\54\0\1\u0186\74\0\1\u0187\62\0\4\u0188"+ "\15\0\3\u0188\31\0\1\u0188\1\0\1\u0188\7\0\3\u0188"+ "\2\0\1\u0188\3\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\4\10\1\u0189\15\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ "\1\u018a\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\1\10\1\u018b\6\10\22\0\1\134\21\10"+ "\2\0\1\10\1\134\1\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\2\10\1\u018c\5\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\1\10\1\u018d\20\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\2\10\1\134\5\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\3\10\1\u018e\4\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\4\10\1\u018f\15\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\11\10\1\160\10\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\3\10\1\u0190\4\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ "\1\u0191\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\5\10\1\u0192\2\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ "\1\u0193\22\0\1\10\1\u0194\20\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\7\10\1\u0190\22\0"+ "\22\10\2\0\3\10\1\0\7\352\2\0\1\u0195\2\352"+ "\4\0\10\352\16\0\1\135\3\0\22\352\2\0\3\352"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\4\10\1\u0196\15\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\6\10\1\u0197\13\10"+ "\2\0\3\10\1\0\6\10\1\u0198\2\0\1\122\2\10"+ "\4\0\10\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\7\10\1\361\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\4\10\1\u0190\15\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\7\10"+ "\1\u0199\12\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\1\10\1\u0190\6\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ "\1\u019a\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\2\10\1\u019b\17\10"+ "\2\0\3\10\14\0\1\u019c\66\0\7\10\2\0\1\122"+ "\2\10\4\0\1\10\1\u019d\6\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ "\1\u019e\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\1\10\1\u019f\6\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\1\10\1\u01a0\20\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\6\10\1\u01a1\13\10\2\0\3\10\1\0\6\10\1\u01a2"+ "\2\0\1\122\2\10\4\0\10\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\7\10\1\u01a3\12\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\3\10\1\u01a4\4\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\5\10\1\254\2\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\7\10\1\u01a5\12\10\2\0\3\10\1\0\6\10\1\u01a6"+ "\2\0\1\122\2\10\4\0\10\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\2\10\1\u01a7\17\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\1\u0114\21\10"+ "\2\0\1\10\1\u0114\1\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\2\10\1\300\17\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\5\10\1\u01a8\14\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\5\10\1\u01a9\2\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\1\u013d\21\10\2\0\1\10\1\u013d"+ "\1\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\11\10\1\u01aa\10\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\5\10\1\u01ab"+ "\14\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\7\10\1\366\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\7\10\1\u01ac\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\3\10\1\u01ad\4\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\7\10\1\u01ae\12\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\5\10\1\u0153\14\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\2\10\1\u0173\5\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ "\1\u01af\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\1\u01b0\21\10\2\0\1\10"+ "\1\u01b0\1\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\6\10\1\u01b1\13\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\5\10\1\u01b2\2\10"+ "\22\0\22\10\2\0\3\10\1\0\4\10\1\u01b3\2\10"+ "\2\0\1\122\2\10\4\0\7\10\1\u01b4\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\2\10\1\u01b5\17\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\1\10\1\134\6\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\10\10\1\u01b6\11\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ "\1\u01b7\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\7\10\1\u01b8"+ "\12\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\1\10\1\u01b9\5\10\1\u01ba\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ "\1\u01bb\22\0\5\10\1\u01bc\14\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\6\10\1\u01bd\1\10"+ "\22\0\5\10\1\u01be\14\10\2\0\3\10\1\0\4\10"+ "\1\u01bf\2\10\2\0\1\122\2\10\4\0\2\10\1\u013e"+ "\1\u013f\1\u01c0\1\u01c1\1\10\1\u01c2\22\0\1\10\1\u01c3"+ "\1\10\1\u01c4\1\10\1\u01c5\1\u01c6\1\u01c7\12\10\2\0"+ "\1\u01c0\1\10\1\u01c4\1\0\7\10\2\0\1\122\2\10"+ "\4\0\2\10\1\u01c8\5\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\7\10\1\u01c9\12\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\1\10\1\u01ca\6\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\3\10\1\243\4\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\1\10\1\u01cb\6\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\3\10\1\u01cc\16\10\2\0"+ "\2\10\1\u01cc\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\5\10\1\u01cd\14\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\3\10\1\u01ce\4\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\7\10\1\u01cf\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\6\10\1\u01d0\13\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\1\10\1\u01d1\6\10\22\0\22\10"+ "\2\0\3\10\62\0\1\u01d2\42\0\1\u01d3\106\0\1\u01d4"+ "\133\0\1\u01d5\72\0\1\u01d6\24\0\1\u01d6\63\0\1\u01d7"+ "\47\0\1\u01d8\131\0\1\u01d9\100\0\1\u0127\2\0\1\u01d2"+ "\47\0\1\u01da\27\0\1\u01db\44\0\1\u01dc\103\0\1\u01dd"+ "\51\0\1\u01dd\62\0\1\u01de\44\0\1\u01df\57\0\7\10"+ "\2\0\1\122\2\10\4\0\3\10\1\u01e0\4\10\22\0"+ "\7\10\1\u01e1\12\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\1\u01e2\21\10\2\0"+ "\1\10\1\u01e2\1\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\11\10\1\134\10\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\7\10\1\134\12\10\2\0\3\10\1\0\6\10\1\134"+ "\2\0\1\122\2\10\4\0\2\10\1\134\5\10\22\0"+ "\5\10\1\134\14\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\3\10\1\u013d\4\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\10\10\1\u01e3\11\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\3\10\1\u01e4\4\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\2\10\1\u01e5\5\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\2\10\1\u01e6\17\10\2\0\3\10\1\0\4\10"+ "\1\176\2\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\3\10\1\u01e7\4\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\2\10\1\u01e8\17\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\4\10\1\u01e9\3\10\22\0\5\10"+ "\1\u01ea\1\243\13\10\2\0\1\u01e9\2\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\1\10\1\u01eb\6\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\1\10\1\u01ec\6\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\4\10\1\u013d\15\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\3\10\1\u01ed\4\10\22\0\22\10"+ "\2\0\3\10\1\0\4\10\1\u01ee\2\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\10\10"+ "\1\u01ef\11\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\6\10\1\134\13\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\5\10"+ "\1\u01f0\2\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\13\10\1\134"+ "\6\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\3\10\1\u01f1\4\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u01f2"+ "\6\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\7\10\1\u01f3\12\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\3\10\1\u01f4\4\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\11\10"+ "\1\u01f5\10\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\3\10\1\134\4\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ "\1\u01f6\5\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\1\10\1\u018b\6\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\5\10\1\u01f7\2\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\5\10\1\u01f8\14\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\1\10\1\132\6\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\6\10\1\u01f9\1\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\1\10\1\u01fa\6\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\5\10\1\u01fb\2\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\5\10\1\u01fc\14\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u01fd"+ "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\6\10\1\u01fe\13\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\14\10\1\u01ff\5\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\1\10\1\u0200\6\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\1\10\1\u0201\20\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\4\10\1\u0202\3\10"+ "\22\0\22\10\2\0\1\u0202\2\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\6\10\1\u0203\1\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\5\10\1\u0204\2\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\3\10\1\u0205\4\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\1\10\1\u01b9\1\10\1\u0206\3\10\1\u0207"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\1\10\1\u0208\2\10\1\u0209\1\10\1\u020a"+ "\1\10\22\0\3\10\1\u020b\1\10\1\u020c\1\10\1\u020d"+ "\12\10\2\0\1\u0209\1\10\1\u020b\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\6\10\1\u013d\13\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\1\10\1\u020e\1\u020f\2\10\1\u0210\1\10\1\u0211\22\0"+ "\2\10\1\u0212\3\10\1\u0213\1\u0214\4\10\1\u0215\5\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\7\10\1\u0216\22\0\22\10\2\0\3\10\1\0\6\10"+ "\1\u01f5\2\0\1\122\2\10\4\0\10\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\5\10\1\u0217\14\10\2\0\3\10\1\0"+ "\4\10\1\134\2\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\7\10\1\u0218\12\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ "\1\u0219\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\2\10\1\u021a\5\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\6\10\1\u021b\13\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u021c"+ "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\1\10\1\u013d\6\10\22\0\22\10"+ "\2\0\3\10\7\0\1\u021d\73\0\7\u0175\2\0\1\u021e"+ "\2\u0175\4\0\10\u0175\16\0\1\u021f\3\0\22\u0175\2\0"+ "\3\u0175\7\0\1\u0220\73\0\7\u0177\2\0\1\u0221\2\u0177"+ "\4\0\10\u0177\16\0\1\u0222\3\0\22\u0177\2\0\3\u0177"+ "\15\101\1\0\1\101\1\0\25\101\1\u0223\31\101\3\0"+ "\15\101\1\0\1\101\1\0\4\101\1\u0178\52\101\3\0"+ "\15\101\1\0\1\101\1\0\34\101\1\u0224\22\101\3\0"+ "\15\101\1\0\1\101\1\0\12\101\1\u0225\44\101\35\0"+ "\1\u0226\114\0\1\u0227\60\0\1\u017d\131\0\1\u0228\25\0"+ "\15\112\1\0\27\112\1\u0229\31\112\3\0\15\112\1\0"+ "\6\112\1\u0180\52\112\3\0\15\112\1\0\36\112\1\u022a"+ "\22\112\3\0\15\112\1\0\14\112\1\u022b\44\112\35\0"+ "\1\u022c\114\0\1\u022d\60\0\1\u0185\131\0\1\u022e\30\0"+ "\4\u022f\15\0\3\u022f\31\0\1\u022f\1\0\1\u022f\7\0"+ "\3\u022f\2\0\1\u022f\3\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\7\10\1\u0230\12\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\10\10\1\u0231\11\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\6\10\1\u0138\13\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\5\10\1\u0232\2\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\20\10"+ "\1\134\1\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\10\10\1\376\11\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ "\1\u0233\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\7\10\1\u0234\12\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\10\10\1\u0235\11\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\2\10\1\u0236\5\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\1\10\1\u0237\6\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ "\1\u0238\5\10\22\0\22\10\2\0\3\10\7\0\1\u0239"+ "\73\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\7\10\1\u023a\12\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\10\10\1\u023b\11\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\10\10\1\u023c\11\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\13\10"+ "\1\u023d\6\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\5\10\1\u023e\14\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\14\10\1\u023f\5\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\6\10\1\u0240"+ "\13\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\6\10\1\u0241\13\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\6\10\1\u0173\13\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\2\10\1\u0147\5\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\2\10\1\u0242\1\u0243\4\10\22\0\2\10\1\u0244\3\10"+ "\1\u0240\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\2\10\1\u0245\5\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\6\10"+ "\1\u0246\1\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\3\10\1\u0247\4\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\6\10\1\u0248\13\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\7\10\1\u0249"+ "\22\0\3\10\1\u024a\16\10\2\0\2\10\1\u024a\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ "\1\u024b\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\2\10\1\u024c\5\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ "\1\u024d\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\1\u024e\21\10"+ "\2\0\1\10\1\u024e\1\10\1\0\1\10\1\u024f\5\10"+ "\2\0\1\122\2\10\4\0\2\10\1\u0250\1\u0251\3\10"+ "\1\u0252\22\0\3\10\1\u0253\1\10\1\u0254\1\u0255\13\10"+ "\2\0\2\10\1\u0253\1\0\7\10\2\0\1\122\2\10"+ "\4\0\4\10\1\u0256\3\10\22\0\3\10\1\u0143\1\u01b9"+ "\1\u0254\14\10\2\0\1\u0256\1\10\1\u0143\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\5\10\1\u0257"+ "\14\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\2\10\1\u0258\17\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\3\10\1\u0259\16\10\2\0\2\10\1\u0259\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\14\10\1\u025a"+ "\5\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\2\10\1\u025b\5\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\2\10\1\u025c\17\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\4\10\1\134\15\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\7\10\1\u025d\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u025e"+ "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\6\10\1\u025f\1\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u0260"+ "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\3\10\1\u0173\4\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\3\10\1\u0107\4\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\5\10\1\u0261\2\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\3\10\1\u0147\4\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\1\10\1\u0262\7\10\1\u0263\10\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u025b"+ "\5\10\22\0\13\10\1\u0264\6\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ "\1\u0265\3\10\1\u0266\13\10\2\0\3\10\1\0\6\10"+ "\1\u0267\2\0\1\122\2\10\4\0\10\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\1\10\1\u0268\6\10\22\0\1\u0269\21\10\2\0\1\10"+ "\1\u0269\1\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\6\10\1\u026a\1\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ "\1\u026b\17\10\2\0\3\10\1\0\6\10\1\u026c\2\0"+ "\1\122\2\10\4\0\10\10\22\0\6\10\1\u026d\13\10"+ "\2\0\3\10\1\0\6\10\1\u026e\2\0\1\122\2\10"+ "\4\0\10\10\22\0\15\10\1\u026f\4\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u0270"+ "\1\10\1\u0271\2\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\5\10"+ "\1\u0272\14\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\11\10\1\u0273\10\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\2\10\1\u0274\17\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\1\134\7\10\22\0\22\10"+ "\2\0\3\10\1\0\6\10\1\u0275\2\0\1\122\2\10"+ "\4\0\10\10\22\0\2\10\1\u0276\1\u0143\16\10\2\0"+ "\2\10\1\u0143\1\0\7\10\2\0\1\122\2\10\4\0"+ "\3\10\1\u0277\4\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ "\1\u0278\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\1\u0279\21\10\2\0\1\10"+ "\1\u0279\1\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\1\10\1\u027a\6\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\3\10\1\u0138\4\10"+ "\22\0\22\10\2\0\3\10\24\0\1\u027b\136\0\1\u027c"+ "\44\0\1\u0132\132\0\1\u027b\105\0\1\u0132\74\0\1\u027d"+ "\1\u027e\46\0\1\u027f\145\0\1\u0280\37\0\1\u0281\104\0"+ "\1\u0282\131\0\1\u0283\77\0\1\u0284\47\0\1\u0285\63\0"+ "\1\u0286\75\0\7\10\2\0\1\122\2\10\4\0\3\10"+ "\1\u01b5\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\3\10\1\u0287\4\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\2\10\1\u0288\17\10\2\0\3\10"+ "\1\0\4\10\1\u0289\2\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\2\10\1\u028a\5\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\6\10\1\u028b\1\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\3\10"+ "\1\132\16\10\2\0\2\10\1\132\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\4\10\1\u028c\15\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\11\10\1\u0173\10\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\11\10"+ "\1\u028d\10\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\1\10\1\u028e\2\10\1\u028f\1\u0290\2\10"+ "\22\0\1\10\1\u0291\20\10\2\0\1\u028f\2\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\1\10"+ "\1\u0292\20\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\1\10\1\u0293\6\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\6\10\1\u0294\13\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u0295"+ "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\4\10\1\u0296\15\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\7\10\1\134"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\3\10\1\u0297\4\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\6\10\1\u0298\13\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\2\10\1\u0299\5\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\5\10\1\u029a\2\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u029b"+ "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\1\10\1\u029c\6\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\1\u029d\21\10\2\0\1\10\1\u029d\1\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\2\10\1\u029e\17\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\2\10\1\247\17\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\2\10\1\u029f\5\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\13\10"+ "\1\u02a0\6\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\10\10\1\u02a1\11\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ "\1\u02a2\5\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\4\10\1\u02a3\3\10\22\0"+ "\22\10\2\0\1\u02a3\2\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\2\10\1\u02a4\5\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\6\10"+ "\1\u02a5\1\10\22\0\6\10\1\u02a6\13\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\2\10\1\u023f\17\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\2\10\1\u02a7\17\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\2\10\1\u02a8\17\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\1\10\1\u02a9\6\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\5\10\1\u02aa\14\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\1\u02ab\21\10\2\0\1\10\1\u02ab\1\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\3\10\1\u02ac\4\10"+ "\22\0\22\10\2\0\3\10\1\0\6\10\1\u02ad\2\0"+ "\1\122\2\10\4\0\10\10\22\0\2\10\1\u02ae\17\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\5\10\1\u02af\2\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ "\1\u02b0\17\10\2\0\3\10\1\0\6\10\1\u02b1\2\0"+ "\1\122\2\10\4\0\10\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\6\10\1\u02b2"+ "\1\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\6\10\1\u02b3\13\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\3\10\1\u02b4\4\10\22\0\2\10\1\163\17\10\2\0"+ "\3\10\1\0\4\10\1\u02b5\2\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\3\10\1\u02b6\4\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\5\10\1\u02b7\14\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\13\10\1\u02b8\6\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\3\10\1\u02b9\4\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\3\10\1\u02ba\4\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\5\10\1\u02bb\2\10"+ "\22\0\22\10\2\0\3\10\1\0\4\10\1\u02bc\2\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\7\10\1\u02bd\12\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\10\10\1\u02be"+ "\11\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\6\10\1\u02bf\13\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\11\10\1\u02c0\10\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\7\10\1\u02c1\22\0\22\10\2\0"+ "\3\10\3\0\4\u02c2\15\0\3\u02c2\31\0\1\u02c2\1\0"+ "\1\u02c2\7\0\3\u02c2\2\0\1\u02c2\11\0\1\u02c3\75\0"+ "\4\u02c4\15\0\3\u02c4\31\0\1\u02c4\1\0\1\u02c4\7\0"+ "\3\u02c4\2\0\1\u02c4\11\0\1\u02c5\72\0\14\101\1\u02c6"+ "\1\0\1\101\1\0\57\101\3\0\15\101\1\0\1\101"+ "\1\0\10\101\1\u0178\14\101\1\u0223\31\101\3\0\1\101"+ "\7\u0225\1\101\1\u0225\1\101\2\u0225\1\0\1\101\1\u02c7"+ "\15\u0225\1\101\1\u0225\2\101\5\u0225\2\101\25\u0225\2\101"+ "\3\u0226\1\0\1\u0226\1\u02c7\5\u0226\1\0\1\u02c7\1\0"+ "\2\u0226\2\0\2\u02c7\10\u0226\4\u02c7\1\0\1\u02c7\2\0"+ "\5\u02c7\2\0\3\u02c7\22\u0226\2\0\3\u0226\14\0\1\u02c8"+ "\115\0\1\u017d\14\0\1\u0227\34\0\14\112\1\u02c9\1\0"+ "\61\112\3\0\15\112\1\0\12\112\1\u0180\14\112\1\u0229"+ "\31\112\3\0\1\112\7\u022b\1\112\1\u022b\1\112\2\u022b"+ "\1\0\1\112\16\u022b\1\112\1\u022b\2\112\5\u022b\2\112"+ "\25\u022b\2\112\3\u022c\1\0\1\u022c\1\u02ca\5\u022c\1\0"+ "\1\u02ca\1\0\2\u022c\2\0\2\u02ca\10\u022c\4\u02ca\1\0"+ "\1\u02ca\2\0\5\u02ca\2\0\3\u02ca\22\u022c\2\0\3\u022c"+ "\14\0\1\u02cb\115\0\1\u0185\14\0\1\u022d\37\0\4\u02cc"+ "\15\0\3\u02cc\31\0\1\u02cc\1\0\1\u02cc\7\0\3\u02cc"+ "\2\0\1\u02cc\3\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\2\10\1\u02cd\17\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\1\10\1\u02ce\6\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\7\10\1\u02cf\12\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ "\1\u02d0\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\340"+ "\17\10\2\0\3\10\1\0\6\10\1\u02d1\2\0\1\122"+ "\2\10\4\0\10\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\1\10\1\u02d2\6\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\5\10\1\u02d3\2\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\6\10\1\u02d4\13\10\2\0\3\10\3\0\4\u02d5"+ "\15\0\3\u02d5\31\0\1\u02d5\1\0\1\u02d5\7\0\3\u02d5"+ "\2\0\1\u02d5\3\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\1\10\1\u02d6\20\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\2\10\1\u02d7\5\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\2\10\1\u02d8\17\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ "\1\u02d9\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\13\10\1\u02da"+ "\6\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\6\10\1\u013b\1\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\4\10\1\u02db\15\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\2\10\1\u02dc\5\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\3\10\1\u02dd\4\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ "\1\u02de\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\4\10\1\u02df\15\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\15\10\1\u02e0\4\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\6\10\1\u013d\1\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\7\10\1\u02e1\22\0\22\10\2\0\3\10\1\0"+ "\4\10\1\u02e2\2\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\1\u02e3\21\10\2\0\1\10"+ "\1\u02e3\1\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\5\10\1\302\2\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\7\10"+ "\1\u02e4\12\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\3\10\1\u02e5\4\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\2\10\1\u02e6\17\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u02e7"+ "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\5\10\1\u02e8\2\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u02e9"+ "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\2\10\1\u02ea\5\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\3\10\1\u02eb\4\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\2\10\1\u02ec\5\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\6\10\1\u02ed\1\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\1\10\1\u01bd\20\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u02ee"+ "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\6\10\1\u02ef\1\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\15\10\1\u0153\4\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\2\10\1\u02f0\4\10\1\u02f1\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\7\10\1\u02f2\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\5\10\1\u02f3\2\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\12\10\1\u013b\7\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ "\1\u02f4\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\7\10\1\u02f5\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\5\10\1\u02f6\2\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\1\u0173\7\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\1\10\1\u015a\20\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\14\10\1\u013d\5\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\1\10\1\u02f7\20\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\5\10\1\u02f8\14\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\6\10\1\u02f9\1\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\4\10\1\u0173\15\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ "\1\u02fa\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\5\10\1\u02fb\2\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\3\10\1\u02fc\4\10\22\0\22\10\2\0\3\10"+ "\1\0\6\10\1\u02fd\2\0\1\122\2\10\4\0\10\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\4\10\1\u02fe\15\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ "\1\u02ff\5\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\11\10\1\u0300"+ "\10\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\1\10\1\u0301\6\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u0302"+ "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\1\10\1\u0303\6\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\1\10\1\u0304\6\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\1\u0301"+ "\21\10\2\0\1\10\1\u0301\1\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\3\10\1\u0305\4\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\6\10\1\u0306\13\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ "\1\u0307\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\4\10\1\u0308\15\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ "\1\u0309\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\1\10\1\u030a\6\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\6\10\1\u030b\13\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\1\134\21\10\2\0\1\10\1\134\1\10\25\0\1\u0132"+ "\51\0\1\u0132\25\0\1\u0132\105\0\1\u030c\131\0\1\u030d"+ "\46\0\1\u030e\130\0\1\u030f\24\0\1\u030f\24\0\1\u0310"+ "\65\0\1\u0311\147\0\1\u0312\103\0\1\u01d4\103\0\1\u0313"+ "\101\0\1\u0129\21\0\7\10\2\0\1\122\2\10\4\0"+ "\7\10\1\u0114\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\164"+ "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\6\10\1\u0314\13\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\6\10\1\u0315\13\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\3\10\1\u0316\4\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\7\10\1\u02ab\12\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\1\10"+ "\1\u0317\20\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\14\10\1\u0318\5\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\2\10\1\u0319\17\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\6\10\1\u031a\1\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\2\10\1\u031b\5\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\6\10\1\u031c"+ "\1\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\2\10\1\u031d\5\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\2\10\1\u0114\5\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ "\1\u031e\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\5\10\1\u031f\14\10\2\0"+ "\3\10\1\0\6\10\1\u0320\2\0\1\122\2\10\4\0"+ "\2\10\1\u0321\5\10\22\0\2\10\1\u0244\17\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\3\10\1\u0322\16\10\2\0\2\10\1\u0322\1\0"+ "\7\10\2\0\1\122\2\10\4\0\7\10\1\u0323\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\6\10\1\134\1\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\4\10\1\u0114\15\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\3\10\1\u0324\4\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\3\10\1\u0325\4\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ "\1\u0326\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\3\10\1\u013f\4\10\22\0\22\10\2\0"+ "\3\10\1\0\4\10\1\u0327\2\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\3\10\1\u0328\4\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\3\10\1\u0139\4\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\2\10\1\u0329\17\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\6\10\1\u029a\13\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\3\10\1\u032a\4\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ "\1\u032b\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\4\10\1\u0153\15\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\6\10"+ "\1\u032c\1\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\3\10\1\u032d\4\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\1\10\1\u032e\6\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\6\10\1\u032f\13\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\11\10\1\u0330\10\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\6\10\1\u0331\1\10\22\0\4\10\1\u0332\15\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\6\10"+ "\1\u0333\1\10\22\0\22\10\2\0\3\10\1\0\4\10"+ "\1\u0334\2\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\4\10\1\u0335\15\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u0336"+ "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\6\10\1\u0337\1\10\22\0\10\10"+ "\1\u0338\11\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\1\10\1\u0339\20\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ "\1\u033a\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\6\10\1\u033b"+ "\13\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\1\10\1\u033c\6\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\6\10\1\u033d\13\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\5\10\1\u014c\14\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\4\10\1\u033e\3\10\22\0\22\10\2\0\1\u033e\2\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\7\10\1\u033f"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\10\10\1\u0340\11\10\2\0"+ "\3\10\1\0\6\10\1\u0341\2\0\1\122\2\10\4\0"+ "\10\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\15\10\1\u0342\4\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\5\10\1\u0343\2\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\7\10"+ "\1\u0344\12\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\1\10\1\u0345\7\10\1\u0346"+ "\10\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\5\10\1\u0347\14\10\2\0\3\10"+ "\3\0\4\u0348\15\0\3\u0348\31\0\1\u0348\1\0\1\u0348"+ "\7\0\3\u0348\2\0\1\u0348\5\0\4\u0349\15\0\3\u0349"+ "\31\0\1\u0349\1\0\1\u0349\7\0\3\u0349\2\0\1\u0349"+ "\5\0\4\u034a\15\0\3\u034a\31\0\1\u034a\1\0\1\u034a"+ "\7\0\3\u034a\2\0\1\u034a\5\0\4\u034b\15\0\3\u034b"+ "\31\0\1\u034b\1\0\1\u034b\7\0\3\u034b\2\0\1\u034b"+ "\2\0\14\101\1\u0225\1\0\1\101\1\0\57\101\17\0"+ "\1\u0226\65\0\14\112\1\u022b\1\0\61\112\17\0\1\u022c"+ "\70\0\4\10\15\0\3\10\31\0\1\10\1\0\1\10"+ "\7\0\3\10\2\0\1\10\3\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\4\10\1\u034c\15\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\6\10\1\u034d\13\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u034e"+ "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\5\10\1\u034f\2\10\22\0\1\10\1\u0350\3\10"+ "\1\u0351\14\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\5\10\1\u0352\2\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\11\10\1\u0353\10\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\2\10\1\u0354\5\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\10\10\1\u0355\11\10\2\0\3\10"+ "\3\0\4\u0356\15\0\3\u0356\31\0\1\u0356\1\0\1\u0356"+ "\7\0\3\u0356\2\0\1\u0356\3\0\7\10\2\0\1\122"+ "\2\10\4\0\5\10\1\u0357\2\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\5\10"+ "\1\u0358\2\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\351"+ "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\6\10\1\160\13\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\6\10\1\u0359"+ "\1\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\6\10\1\u031d\1\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\5\10\1\u0293\2\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\10\10"+ "\1\u035a\11\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\15\10\1\u035b\4\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\2\10\1\u035b\17\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\3\10\1\u0162\4\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\1\10\1\u035c\6\10\22\0\22\10\2\0\3\10"+ "\1\0\6\10\1\u035d\2\0\1\122\2\10\4\0\10\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\3\10\1\u01a5\4\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ "\1\u035e\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\10\10\1\u035f"+ "\11\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\6\10\1\u0360\13\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\4\10\1\u0361\15\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\1\10\1\u0362\6\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\5\10\1\u0363\2\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\2\10\1\u0364\5\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\3\10\1\u0365\4\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\2\10\1\u0366\17\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\6\10\1\u0367"+ "\13\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\2\10\1\u0368\5\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\6\10\1\u0369\13\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\6\10\1\u036a\13\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\13\10\1\u036b\6\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ "\1\u036c\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\4\10\1\u036d\15\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ "\1\u036e\5\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\3\10\1\u036f\4\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\4\10\1\u0370\15\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\7\10\1\u013d"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\6\10\1\u0371\13\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ "\1\u0372\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\6\10\1\u0373"+ "\13\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\1\10\1\u0374\6\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\6\10\1\u0375"+ "\1\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\10\10\1\u0376\11\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\7\10\1\u0377\12\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ "\1\u0378\17\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\1\10\1\u0379\20\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\1\10\1\u037a\20\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\2\10\1\u037b\5\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\5\10\1\u037c\2\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u037d"+ "\1\10\1\u037e\2\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\7\10\1\u037f\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\4\10\1\u0380\15\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\2\10\1\u0276\17\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\7\10\1\u0381\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ "\1\u0382\4\10\22\0\22\10\2\0\3\10\1\0\6\10"+ "\1\u0383\2\0\1\122\2\10\4\0\6\10\1\u0384\1\10"+ "\22\0\2\10\1\u0385\17\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\3\10\1\u0386"+ "\16\10\2\0\2\10\1\u0386\7\0\1\u0387\152\0\1\u0388"+ "\105\0\1\u0132\77\0\1\u027c\41\0\1\u0389\141\0\1\u01d4"+ "\76\0\1\u038a\46\0\1\u038b\56\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\6\10\1\u038c\13\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ "\1\u038d\5\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\3\10\1\u038e\4\10\22\0"+ "\22\10\2\0\3\10\1\0\6\10\1\u013d\2\0\1\122"+ "\2\10\4\0\10\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\1\10"+ "\1\u038f\20\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\6\10\1\u014e\1\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\6\10"+ "\1\u0390\1\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\6\10\1\u0391"+ "\13\10\2\0\3\10\1\0\6\10\1\u0392\2\0\1\122"+ "\2\10\4\0\10\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\14\10"+ "\1\134\5\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\2\10\1\u0153\5\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ "\1\u029a\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u0393"+ "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\3\10\1\u0394\4\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\2\10\1\u0395\17\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\1\u0396\21\10\2\0"+ "\1\10\1\u0396\1\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\4\10\1\u0397\2\10\1\u0398\22\0\7\10\1\u0399"+ "\12\10\2\0\1\u0397\2\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\5\10\1\u0365\14\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ "\1\u039a\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\2\10\1\u039b\3\10"+ "\1\u01cb\13\10\2\0\3\10\1\0\6\10\1\u0361\2\0"+ "\1\122\2\10\4\0\10\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\6\10\1\u039c"+ "\1\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\1\10\1\u039d\6\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\3\10\1\u039e\4\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\7\10\1\u0217\22\0"+ "\1\10\1\u039f\20\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\2\10\1\u024c\5\10\22\0\2\10"+ "\1\u03a0\17\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\6\10\1\u0293\13\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\3\10\1\u013d\16\10\2\0\2\10\1\u013d\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\1\10"+ "\1\u03a1\20\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\6\10\1\u03a2\1\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\5\10\1\u03a3\14\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\3\10\1\u03a4\4\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\3\10\1\u03a5\4\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\7\10\1\u03a6\12\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\2\10\1\u03a7\5\10\22\0\2\10"+ "\1\u0378\17\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\15\10\1\u03a8\4\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\2\10\1\u03a9\17\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\11\10\1\u03aa"+ "\10\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\2\10\1\u03ab\5\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u03ac"+ "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\4\10\1\u03ad\3\10\22\0\22\10"+ "\2\0\1\u03ad\2\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\4\10\1\u03ae\15\10\2\0\3\10"+ "\1\0\4\10\1\u03af\2\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\4\10\1\u03b0\15\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\3\10\1\u03b1\4\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\1\10\1\u03b2\6\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\3\10\1\u03b3\4\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\6\10"+ "\1\u03b4\1\10\22\0\22\10\2\0\3\10\1\0\6\10"+ "\1\u03b5\2\0\1\122\2\10\4\0\10\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\5\10\1\u03b6\2\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\3\10\1\u03b7\4\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\2\10\1\u03b8\5\10\22\0\22\10\2\0"+ "\3\10\3\0\4\u03b9\15\0\3\u03b9\31\0\1\u03b9\1\0"+ "\1\u03b9\7\0\3\u03b9\2\0\1\u03b9\5\0\4\u03ba\15\0"+ "\3\u03ba\31\0\1\u03ba\1\0\1\u03ba\7\0\3\u03ba\2\0"+ "\1\u03ba\5\0\4\u03bb\15\0\3\u03bb\31\0\1\u03bb\1\0"+ "\1\u03bb\7\0\3\u03bb\2\0\1\u03bb\5\0\4\u03bc\15\0"+ "\3\u03bc\31\0\1\u03bc\1\0\1\u03bc\7\0\3\u03bc\2\0"+ "\1\u03bc\3\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\10\10\1\u03bd\11\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\4\10\1\u03be\3\10\22\0"+ "\22\10\2\0\1\u03be\2\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\3\10\1\u0266\4\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\6\10"+ "\1\u03bf\1\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\5\10\1\241\2\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\6\10\1\u03c0\13\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\10\10\1\u0153\11\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\3\10\1\u03c1\4\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\1\10\1\u03c2\6\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\2\10\1\u03c3\5\10"+ "\22\0\22\10\2\0\3\10\3\0\4\u03c4\15\0\3\u03c4"+ "\31\0\1\u03c4\1\0\1\u03c4\7\0\3\u03c4\2\0\1\u03c4"+ "\3\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\11\10\1\u03c5\10\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\5\10\1\u03c6\2\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\7\10\1\u03c7\22\0\7\10\1\u03c8\12\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\7\10\1\u03c7"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\3\10\1\u03c9\4\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ "\1\u03ca\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u03cb"+ "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\13\10\1\u03cc\1\10\1\u03cd\4\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\4\10\1\u03ce\15\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ "\1\u013d\17\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\1\10\1\u03cf\6\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\7\10\1\u03d0\12\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\6\10\1\u03d1"+ "\13\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\13\10\1\u013d\6\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u03d2"+ "\6\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\7\10\1\u013b\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ "\1\u0173\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\7\10\1\u03d3\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\6\10\1\u03d4\13\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u03d5"+ "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\4\10\1\u03d6\3\10\22\0\22\10\2\0\1\u03d6"+ "\2\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\7\10\1\u03d7\12\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u03d8"+ "\17\10\2\0\3\10\1\0\4\10\1\u03d9\2\10\2\0"+ "\1\122\2\10\4\0\1\10\1\u01b9\2\10\1\u03da\3\10"+ "\22\0\7\10\1\u03db\12\10\2\0\1\u03da\2\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\10\10"+ "\1\u03dc\11\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\6\10\1\u03dd\1\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\5\10"+ "\1\u03de\2\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\5\10\1\u0254"+ "\14\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\2\10\1\u03df\17\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\6\10\1\u03e0"+ "\1\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\2\10\1\u03e1\17\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\6\10\1\u03e2\13\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ "\1\u03e3\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\2\10\1\u03e4\5\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\5\10"+ "\1\u03e5\2\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\3\10\1\u03e6"+ "\16\10\2\0\2\10\1\u03e6\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\2\10\1\u03e7\17\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ "\1\u03e8\22\0\22\10\2\0\3\10\1\0\4\10\1\u03e9"+ "\2\10\2\0\1\122\2\10\4\0\10\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\7\10\1\u0350\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\3\10\1\u03ea\3\10\1\u03eb"+ "\22\0\2\10\1\u0147\5\10\1\u03eb\11\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u03ec"+ "\6\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\1\u03ed\7\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\4\10\1\u03ee\15\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\6\10\1\u03ef"+ "\13\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\4\10\1\u03f0\15\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\4\10\1\u03f1\4\10\1\u03f2\10\10\2\0\3\10\63\0"+ "\1\u03f3\45\0\1\u03f4\136\0\1\u03f5\100\0\1\u0132\75\0"+ "\1\232\23\0\7\10\2\0\1\122\2\10\4\0\1\10"+ "\1\u03f6\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\1\u03f7\7\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\3\10\1\u03f8\4\10\22\0\22\10\2\0\3\10\1\0"+ "\4\10\1\u02bc\2\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\5\10\1\u03f9\1\10\1\u03fa\12\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\10\10\1\u03fb\11\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\10\10\1\u03fc\11\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\2\10\1\u03fd\17\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\10\10"+ "\1\u03fe\11\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\5\10\1\247\14\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\6\10\1\u03ff\13\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\6\10\1\u0266"+ "\13\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\1\u0400\21\10\2\0\1\10\1\u0400"+ "\1\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\2\10\1\u0401\17\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\1\10\1\376\6\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\1\10\1\u0402\6\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u038d"+ "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\3\10\1\u0403\4\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\4\10\1\u0404\15\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\2\10\1\u0405\5\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\4\10\1\u0406\15\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\4\10"+ "\1\u0407\3\10\22\0\22\10\2\0\1\u0407\2\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\1\10"+ "\1\u0408\20\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\1\10\1\u0409\6\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ "\1\u040a\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\6\10\1\u040b\1\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\6\10\1\u040c\13\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u040d"+ "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\3\10\1\u040e\4\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\1\10\1\u040f\6\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ "\1\u0287\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\14\10\1\u0410\5\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ "\1\u0411\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\6\10\1\u0412"+ "\13\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\3\10\1\u0413\3\10\1\u023d\22\0\2\10\1\u0414"+ "\13\10\1\u0415\3\10\2\0\3\10\1\0\6\10\1\u0416"+ "\2\0\1\122\2\10\4\0\10\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\6\10\1\u02b8\13\10\2\0\3\10\1\0\4\10"+ "\1\u0417\2\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\1\10\1\u0418\6\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u0419"+ "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\1\10\1\u041a\6\10\22\0\5\10"+ "\1\u041b\14\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\5\10\1\u041c\14\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\4\10\1\u041d\15\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u03ed"+ "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\2\10\1\u0261\17\10\2\0\3\10"+ "\3\0\4\304\15\0\3\304\31\0\1\304\1\0\1\304"+ "\7\0\3\304\2\0\1\304\5\0\4\u041e\15\0\3\u041e"+ "\31\0\1\u041e\1\0\1\u041e\7\0\3\u041e\2\0\1\u041e"+ "\5\0\4\306\15\0\3\306\31\0\1\306\1\0\1\306"+ "\7\0\3\306\2\0\1\306\5\0\4\u041f\15\0\3\u041f"+ "\31\0\1\u041f\1\0\1\u041f\7\0\3\u041f\2\0\1\u041f"+ "\3\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u01b9"+ "\6\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\2\10\1\u0397\5\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\6\10\1\u0420\1\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ "\1\u0421\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\4\10\1\u0422\15\10\2\0"+ "\3\10\1\0\6\10\1\160\2\0\1\122\2\10\4\0"+ "\10\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\5\10\1\u0423\2\10\22\0\22\10"+ "\2\0\3\10\3\0\4\352\15\0\3\352\31\0\1\352"+ "\1\0\1\352\7\0\3\352\2\0\1\352\3\0\7\10"+ "\2\0\1\122\2\10\4\0\4\10\1\u028f\3\10\22\0"+ "\22\10\2\0\1\u028f\2\10\1\0\6\10\1\u0424\2\0"+ "\1\122\2\10\4\0\10\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\300"+ "\6\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\3\10\1\u0425\16\10"+ "\2\0\2\10\1\u0425\1\0\7\10\2\0\1\122\2\10"+ "\4\0\1\u0426\7\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\1\10\1\u0427\6\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\15\10\1\u0428\4\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ "\1\u0262\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\5\10\1\u0429\2\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\3\10\1\u03ea\4\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u042a"+ "\5\10\22\0\22\10\2\0\3\10\1\0\4\10\1\u042b"+ "\2\10\2\0\1\122\2\10\4\0\10\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\2\10\1\u03bd\5\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\3\10\1\u03d0\4\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\3\10\1\245\4\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ "\1\u042c\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\1\10\1\u01ff"+ "\20\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\4\10\1\134\3\10\22\0\22\10\2\0\1\134"+ "\2\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\2\10\1\u042d\17\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u042e"+ "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\13\10\1\u0264\6\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\6\10\1\u042f\13\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\5\10\1\u0430\2\10\22\0\22\10"+ "\2\0\3\10\1\0\6\10\1\u0431\2\0\1\122\2\10"+ "\4\0\10\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\6\10\1\300"+ "\13\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\1\10\1\u0432\6\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\5\10\1\u0433\14\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\15\10\1\u0434\4\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\4\10\1\u0435\15\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\3\10"+ "\1\u0436\16\10\2\0\2\10\1\u0436\1\0\7\10\2\0"+ "\1\122\2\10\4\0\7\10\1\u0437\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ "\1\u0438\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\1\10\1\u0105\6\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\2\10\1\u0439\5\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\6\10\1\u043a"+ "\1\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\5\10\1\u043b\2\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\6\10\1\u043c\1\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ "\1\u043d\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\3\10\1\u043e\4\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\7\10\1\u043f\12\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\1\10\1\u038d\6\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\2\10\1\u0385\17\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\10\10\1\134\11\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\7\10\1\u0440\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\6\10\1\u0441\13\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\5\10\1\u0442\2\10\22\0"+ "\2\10\1\u0443\17\10\2\0\3\10\55\0\1\u0444\33\0"+ "\1\u0445\120\0\1\u0446\54\0\7\10\2\0\1\122\2\10"+ "\4\0\4\10\1\u0447\3\10\22\0\22\10\2\0\1\u0447"+ "\2\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\2\10\1\u0448\17\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\7\10\1\u0449\22\0\10\10"+ "\1\u0449\11\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\6\10\1\u044a\13\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\2\10\1\u044b\17\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\2\10\1\u044c\5\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\2\10\1\u044d\17\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\4\10\1\u044e\15\10\2\0\3\10\1\0\4\10\1\u044f"+ "\2\10\2\0\1\122\2\10\4\0\3\10\1\u0450\3\10"+ "\1\u03c7\22\0\7\10\1\u03c8\12\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\3\10"+ "\1\134\16\10\2\0\2\10\1\134\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\6\10\1\u0451\13\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\2\10\1\u0452\5\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\11\10"+ "\1\u0453\10\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\7\10\1\u03bd\12\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ "\1\u0454\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u0266"+ "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\2\10\1\u0455\17\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\2\10\1\u0456\17\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\5\10\1\u0457\2\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\2\10\1\u0458\17\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ "\1\u0459\17\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\5\10\1\u045a\2\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\3\10\1\u03bd\16\10\2\0\2\10\1\u03bd\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ "\1\u045b\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\2\10\1\u045c\5\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ "\1\u045d\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\2\10\1\u045e\5\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\2\10\1\u045f\5\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\1\u0460\7\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\4\10\1\u0461\15\10\2\0"+ "\3\10\1\0\6\10\1\u0462\2\0\1\122\2\10\4\0"+ "\10\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\1\10\1\u0463\6\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\6\10\1\u0464\13\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ "\1\u0465\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\7\10\1\u0466\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u0467"+ "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\6\10\1\u0468\13\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\1\10\1\u0469\6\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\14\10"+ "\1\u046a\5\10\2\0\3\10\3\0\4\u0175\15\0\3\u0175"+ "\31\0\1\u0175\1\0\1\u0175\7\0\3\u0175\2\0\1\u0175"+ "\5\0\4\u0177\15\0\3\u0177\31\0\1\u0177\1\0\1\u0177"+ "\7\0\3\u0177\2\0\1\u0177\3\0\4\10\1\u02bc\2\10"+ "\2\0\1\122\2\10\4\0\1\10\1\u01b9\5\10\1\u046b"+ "\22\0\2\10\1\u0395\2\10\1\u01bc\14\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\4\10\1\u046c"+ "\3\10\22\0\22\10\2\0\1\u046c\2\10\1\0\6\10"+ "\1\134\2\0\1\122\2\10\4\0\10\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\11\10\1\u01f1\10\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ "\1\u046d\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\6\10\1\u046e\13\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ "\1\u046f\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\6\10\1\u0470"+ "\13\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\7\10\1\u0471\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\6\10\1\u0472\1\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\2\10\1\u0473\17\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\14\10\1\u0474\5\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\7\10\1\u0475"+ "\12\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\4\10\1\u0476\15\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\10\10\1\u0477\11\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\2\10\1\u0478\5\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\1\10\1\u0479\6\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\5\10\1\u047a\2\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\1\10\1\u047b\6\10\22\0\22\10\2\0"+ "\3\10\1\0\4\10\1\u03d9\2\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\5\10\1\u047c\2\10\22\0"+ "\22\10\2\0\3\10\1\0\6\10\1\u047d\2\0\1\122"+ "\2\10\4\0\10\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\6\10\1\u047e\1\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\1\10\1\u047f\6\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ "\1\u0480\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\2\10\1\u0474\17\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\7\10\1\u0481\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\15\10\1\u013b"+ "\4\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\6\10\1\u0482\13\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\7\10\1\u0483\12\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\1\10\1\u0484\6\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\3\10\1\u0485\4\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\1\10\1\u0486\6\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\2\10\1\u0152\5\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\u0487"+ "\7\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\4\10\1\u0487\15\10"+ "\2\0\3\10\57\0\1\u0488\104\0\1\u0489\77\0\1\u048a"+ "\22\0\7\10\2\0\1\122\2\10\4\0\6\10\1\u048b"+ "\1\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\7\10\1\u03ed\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ "\1\u048c\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\6\10\1\u028a\1\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\2\10\1\u048d\5\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u048e"+ "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\4\10\1\u048f\15\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\7\10\1\u0490\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u0147"+ "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\1\u0491\7\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\2\10\1\u0492\5\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\3\10\1\u0493\4\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\5\10"+ "\1\243\2\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\1\10\1\u01b9\5\10\1\134"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\7\10\1\u0494\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\6\10\1\u0495"+ "\1\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\1\10\1\u0496\6\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\6\10\1\u0497\13\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\11\10"+ "\1\u0498\10\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\7\10\1\u0499\12\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ "\1\u040b\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\7\10\1\u049a\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\11\10\1\u013d\10\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\3\10\1\u049b\4\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\3\10\1\u049c\4\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\5\10\1\u049d\14\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\4\10\1\u049e\3\10\22\0"+ "\22\10\2\0\1\u049e\2\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\3\10\1\u049f\4\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ "\1\u04a0\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\1\u013d\7\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\4\10\1\u03bd\15\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ "\1\u04a1\17\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\5\10\1\u04a2\2\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\1\10\1\u04a3\20\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\375"+ "\10\10\1\u04a4\4\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\4\10\1\375\15\10"+ "\2\0\3\10\1\0\6\10\1\u04a5\2\0\1\122\2\10"+ "\4\0\10\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u04a6"+ "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\5\10\1\u027a\14\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u04a7"+ "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\5\10\1\u04a8\14\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\4\10\1\u01f1\15\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\1\10\1\u04a9\6\10"+ "\22\0\22\10\2\0\3\10\1\0\6\10\1\u013b\2\0"+ "\1\122\2\10\4\0\10\10\22\0\22\10\2\0\3\10"+ "\1\0\4\10\1\u04aa\2\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\1\10\1\u013b\6\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\2\10\1\u04ab\17\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\10\10"+ "\1\u04ac\11\10\2\0\3\10\1\0\6\10\1\243\2\0"+ "\1\122\2\10\4\0\10\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\5\10\1\u04ad\14\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\5\10\1\u013d\2\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\10\10\1\u02e0\11\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\2\10\1\u04ae\5\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\2\10\1\u04af\5\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\4\10\1\u04b0\15\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\6\10\1\u04b1"+ "\13\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\1\10\1\u04b2\6\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\7\10\1\u04b3"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\1\10\1\u039f\13\10\1\u04b4"+ "\4\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\5\10\1\u04b5\14\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u01b9"+ "\2\10\1\u04b6\2\10\1\u01b4\22\0\2\10\1\u04b7\17\10"+ "\2\0\1\u04b6\2\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\1\10\1\u04b8\6\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\5\10\1\u01a5"+ "\2\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\2\10\1\u04b9\17\10"+ "\2\0\3\10\62\0\1\u04ba\43\0\1\u0488\100\0\1\u01d6"+ "\57\0\7\10\2\0\1\122\2\10\4\0\5\10\1\u04bb"+ "\2\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\1\10\1\u03bd\6\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\2\10\1\u04bc\5\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\7\10\1\u04bd\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\7\10\1\164\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\1\10\1\u04be\6\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\1\10\1\u04bf\20\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ "\1\u04c0\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\5\10\1\u04c1"+ "\14\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\1\10\1\300\1\10\1\u04c2\4\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\3\10\1\u046a\4\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\1\u046a"+ "\21\10\2\0\1\10\1\u046a\1\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\4\10\1\u040b\15\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\3\10\1\u04c3\4\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\7\10"+ "\1\u04c4\12\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\2\10\1\u04c5\17\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ "\1\u04c6\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\10\10\1\u04c7"+ "\11\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\6\10\1\u04c8\1\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\6\10\1\u04c9\13\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\7\10\1\u04ca\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\6\10\1\u04cb\13\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\6\10\1\u04cc"+ "\13\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\7\10\1\u04cd\12\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\14\10\1\u04ce\5\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\3\10\1\u04cf\4\10\22\0\22\10"+ "\2\0\3\10\1\0\4\10\1\u04d0\2\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\2\10\1\u0138\5\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\7\10\1\u013d\12\10\2\0"+ "\3\10\1\0\6\10\1\u04d1\2\0\1\122\2\10\4\0"+ "\10\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\2\10\1\u04d2\5\10\22\0\22\10"+ "\2\0\3\10\1\0\6\10\1\u04d3\2\0\1\122\2\10"+ "\4\0\10\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\2\10\1\u03ee\5\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\2\10\1\u04d4\17\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u04d5"+ "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\2\10\1\u04d6\17\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\5\10\1\u0418\14\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\6\10\1\u04d7\1\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\4\10\1\u04bb\15\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\14\10\1\u04d8\5\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u04d9"+ "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\13\10\1\u04da\6\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\6\10\1\u04db"+ "\1\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\4\10\1\u04dc\15\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\5\10\1\u04dd\2\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\11\10"+ "\1\u04de\10\10\2\0\3\10\55\0\1\u027c\25\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\10\10\1\u013d"+ "\11\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\3\10\1\u04df\4\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\7\10\1\u04e0"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\5\10\1\u04e1\2\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\5\10"+ "\1\u04e2\2\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\5\10\1\u04e3"+ "\14\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\1\10\1\u04e4\6\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\5\10\1\u013d\14\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\6\10\1\u04e5\1\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\2\10\1\u04e6\5\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ "\1\u04e7\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\2\10\1\u04e8\5\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ "\1\u04e9\5\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\5\10\1\u04ea\2\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\2\10\1\u04ea\5\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u04eb"+ "\6\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\4\10\1\u04ec\15\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\4\10\1\u04ed\15\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\3\10\1\u04ee\4\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\2\10\1\u04ef\5\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ "\1\u04f0\5\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\5\10\1\u01bc"+ "\14\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\1\10\1\u04f1\6\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\2\10\1\u04f2\17\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\1\10\1\u04f3\6\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\11\10\1\u0350\10\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\7\10\1\u04f4\22\0"+ "\22\10\2\0\3\10\1\0\4\10\1\u04f5\2\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\6\10\1\u04f6\13\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\1\10\1\u013b\20\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\3\10\1\u032f\4\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ "\1\u04f7\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\5\10\1\u04f8\2\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ "\1\u04f9\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\2\10\1\u04fa\17\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\2\10\1\u04fb\17\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\10\10"+ "\1\u04ed\11\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\4\10\1\u04b6\3\10\22\0\22\10\2\0"+ "\1\u04b6\2\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\6\10\1\u04fc\1\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ "\1\u04fd\15\10\2\0\3\10\1\0\6\10\1\u0173\2\0"+ "\1\122\2\10\4\0\10\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\6\10\1\u04fe\13\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\6\10\1\u04ff\13\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\3\10\1\u0500\4\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ "\1\u04c3\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\14\10\1\u0501\5\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\6\10\1\u0502\13\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\11\10\1\u0503"+ "\10\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\2\10\1\u0504\17\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\17\10\3\134\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\13\10\1\u03cc\6\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\11\10\1\u0505\10\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u0506"+ "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\7\10\1\u01fa\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ "\1\u0507\17\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\4\10\1\u04f8\15\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ "\1\u0508\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\3\10\1\u0509\4\10\22\0"+ "\22\10\2\0\3\10\1\0\6\10\1\u050a\2\0\1\122"+ "\2\10\4\0\10\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\5\10\1\u04a7\2\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\1\10\1\u050b\20\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\10\10\1\u038d\11\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\1\10\1\u050c\6\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\6\10\1\u038d\1\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\12\10\1\u02a2\7\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\6\10\1\u050d\1\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\7\10\1\u035b\12\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\2\10\1\u0262\5\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\5\10\1\u050e\14\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ "\1\u038d\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\2\10\1\u014a\17\10"+ "\2\0\3\10\1\0\6\10\1\u050f\2\0\1\122\2\10"+ "\4\0\10\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\5\10\1\u04ca\2\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\6\10\1\u01b5\13\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\5\10\1\u0510"+ "\2\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\10\10\1\u0511\11\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\6\10\1\u0512\13\10\2\0\3\10\1\0"+ "\1\10\1\u0513\5\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\6\10\1\u0514\1\10\22\0\22\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ "\1\u039c\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\1\10\1\u0515\6\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\1\10\1\u0516\6\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\300"+ "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\5\10\1\u0246\2\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\4\10\1\u0139\15\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\2\10\1\u0517\5\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\1\u03ed\21\10\2\0\1\10"+ "\1\u03ed\1\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\4\10\1\u0518\15\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\1\10\1\u0519\1\u051a"+ "\2\10\1\u051b\1\10\1\u051c\22\0\1\u051d\3\10\1\u03f1"+ "\1\10\1\u051e\13\10\2\0\1\10\1\u051d\1\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\3\10\1\u051f\4\10"+ "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\2\10\1\u0520\17\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\14\10\1\u0521\5\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\10\10\22\0\13\10\1\u038d"+ "\6\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\6\10\1\u0522\1\10\22\0\22\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u0523"+ "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\3\10\1\u0524\4\10\22\0\22\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\2\10\1\200\5\10\22\0\22\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\14\10"+ "\1\220\5\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\2\10\1\u0525\17\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\4\10"+ "\1\u0526\3\10\22\0\22\10\2\0\1\u0526\2\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\5\10"+ "\1\u015a\14\10\2\0\3\10\1\0\7\10\2\0\1\122"+ "\2\10\4\0\10\10\22\0\11\10\1\u01b4\10\10\2\0"+ "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ "\22\0\1\10\1\u039c\20\10\2\0\3\10\1\0\7\10"+ "\2\0\1\122\2\10\4\0\3\10\1\u0527\4\10\22\0"+ "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ "\4\0\10\10\22\0\11\10\1\370\10\10\2\0\3\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\5\10\1\u0528"+ "\2\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\7\10\1\u0529\12\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\4\10\1\u0199\3\10\22\0\22\10\2\0\1\u0199\2\10"+ "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ "\15\10\1\u052a\4\10\2\0\3\10\1\0\7\10\2\0"+ "\1\122\2\10\4\0\10\10\22\0\7\10\1\u019f\12\10"+ "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ "\10\10\22\0\7\10\1\u01e1\12\10\2\0\3\10\1\0"+ "\7\10\2\0\1\122\2\10\4\0\3\10\1\u0246\4\10"+ "\22\0\22\10\2\0\3\10"; private static int [] zzUnpackTrans() { int [] result = new int[84678]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\6\0\1\11\5\1\2\11\2\1\1\11\12\1\1\11"+ "\5\1\1\11\1\1\1\11\15\1\1\11\1\1\1\11"+ "\2\1\1\11\2\1\2\11\3\1\2\11\1\1\1\11"+ "\10\1\1\11\6\1\1\0\12\1\1\11\5\1\1\0"+ "\55\1\1\0\1\1\13\0\45\1\1\11\1\1\1\0"+ "\1\1\1\0\1\11\4\1\4\0\4\1\5\0\20\1"+ "\1\0\11\1\1\0\62\1\10\0\1\1\2\0\1\11"+ "\3\0\76\1\4\0\4\1\4\0\4\1\5\0\14\1"+ "\1\0\6\1\1\11\65\1\16\0\75\1\2\0\1\11"+ "\2\0\1\11\4\1\2\0\4\1\3\0\11\1\1\0"+ "\101\1\14\0\73\1\4\0\1\1\2\0\1\1\3\0"+ "\10\1\1\0\66\1\7\0\65\1\4\0\12\1\1\0"+ "\60\1\5\0\55\1\4\0\7\1\1\0\56\1\3\0"+ "\50\1\2\0\44\1\3\0\101\1\3\0\57\1\1\0"+ "\160\1"; private static int [] zzUnpackAttribute() { int [] result = new int[1322]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public NSISTokenMaker() { } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addHyperlinkToken(int, int, int) */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, false); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. * @param hyperlink Whether this token is a hyperlink. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset, boolean hyperlink) { super.addToken(array, start,end, tokenType, startOffset, hyperlink); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = YYINITIAL; switch (initialTokenType) { case Token.LITERAL_STRING_DOUBLE_QUOTE: state = STRING; break; case Token.LITERAL_CHAR: state = CHAR_LITERAL; break; case Token.LITERAL_BACKQUOTE: state = BACKTICKS; break; case Token.COMMENT_MULTILINE: state = MLC; break; } start = text.offset; s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public NSISTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public NSISTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 204) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 1: { addToken(Token.IDENTIFIER); } case 37: break; case 34: { addToken(Token.LITERAL_BOOLEAN); } case 38: break; case 29: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } case 39: break; case 19: { /* Line ending in '\' => continue to next line. */ addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); return firstToken; } case 40: break; case 27: { /* Skip all escaped chars. */ } case 41: break; case 24: { addToken(Token.ERROR_NUMBER_FORMAT); } case 42: break; case 3: { start = zzMarkedPos-1; yybegin(STRING); } case 43: break; case 32: { addToken(Token.FUNCTION); } case 44: break; case 8: { addToken(Token.VARIABLE); } case 45: break; case 16: { /* Line ending in '\' => continue to next line. */ addToken(start,zzStartRead, Token.LITERAL_CHAR); return firstToken; } case 46: break; case 14: { /* Line ending in '\' => continue to next line. */ addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } case 47: break; case 17: { addToken(start,zzStartRead-1, Token.ERROR_CHAR); return firstToken; } case 48: break; case 18: { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); } case 49: break; case 25: { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } case 50: break; case 26: { start = zzMarkedPos-2; yybegin(MLC); } case 51: break; case 6: { addToken(Token.WHITESPACE); } case 52: break; case 30: { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } case 53: break; case 10: { start = zzMarkedPos-1; yybegin(CHAR_LITERAL); } case 54: break; case 2: { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } case 55: break; case 28: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } case 56: break; case 4: { start = zzMarkedPos-1; yybegin(EOL_COMMENT); } case 57: break; case 21: { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); } case 58: break; case 13: { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } case 59: break; case 15: { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); return firstToken; } case 60: break; case 31: { addToken(Token.RESERVED_WORD); } case 61: break; case 35: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } case 62: break; case 20: { addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; } case 63: break; case 23: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } case 64: break; case 9: { addToken(Token.SEPARATOR); } case 65: break; case 5: { addNullToken(); return firstToken; } case 66: break; case 22: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } case 67: break; case 7: { addToken(Token.OPERATOR); } case 68: break; case 36: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } case 69: break; case 33: { addToken(Token.COMMENT_MULTILINE); } case 70: break; case 11: { start = zzMarkedPos-1; yybegin(BACKTICKS); } case 71: break; case 12: { } case 72: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case EOL_COMMENT: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } case 1323: break; case STRING: { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); return firstToken; } case 1324: break; case CHAR_LITERAL: { addToken(start,zzStartRead-1, Token.ERROR_CHAR); return firstToken; } case 1325: break; case YYINITIAL: { addNullToken(); return firstToken; } case 1326: break; case MLC: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } case 1327: break; case BACKTICKS: { addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; } case 1328: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PHPTokenMaker.flex000066400000000000000000002722611257417003700312320ustar00rootroot00000000000000/* * 01/28/2009 * * PHPTokenMaker.java - Generates tokens for PHP syntax highlighting. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for PHP files. * * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated PHPTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.9 */ %% %public %class PHPTokenMaker %extends AbstractMarkupTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Type specific to PHPTokenMaker denoting a line ending with an unclosed * double-quote attribute. */ private static final int INTERNAL_ATTR_DOUBLE = -1; /** * Type specific to PHPTokenMaker denoting a line ending with an unclosed * single-quote attribute. */ private static final int INTERNAL_ATTR_SINGLE = -2; /** * Token type specific to PHPTokenMaker; this signals that the user has * ended a line with an unclosed HTML tag; thus a new line is beginning * still inside of the tag. */ private static final int INTERNAL_INTAG = -3; /** * Token type specific to PHPTokenMaker; this signals that the user has * ended a line with an unclosed <script> tag. */ private static final int INTERNAL_INTAG_SCRIPT = -4; /** * Token type specifying we're in a double-qouted attribute in a * script tag. */ private static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -5; /** * Token type specifying we're in a single-qouted attribute in a * script tag. */ private static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -6; /** * Token type specifying that the user has * ended a line with an unclosed <style> tag. */ private static final int INTERNAL_INTAG_STYLE = -7; /** * Token type specifying we're in a double-qouted attribute in a * style tag. */ private static final int INTERNAL_ATTR_DOUBLE_QUOTE_STYLE = -8; /** * Token type specifying we're in a single-qouted attribute in a * style tag. */ private static final int INTERNAL_ATTR_SINGLE_QUOTE_STYLE = -9; /** * Token type specifying we're in JavaScript. */ private static final int INTERNAL_IN_JS = -10; /** * Token type specifying we're in a JavaScript multiline comment. */ private static final int INTERNAL_IN_JS_MLC = -11; /** * Token type specifying we're in an invalid multi-line JS string. */ private static final int INTERNAL_IN_JS_STRING_INVALID = -12; /** * Token type specifying we're in a valid multi-line JS string. */ private static final int INTERNAL_IN_JS_STRING_VALID = -13; /** * Token type specifying we're in an invalid multi-line JS single-quoted string. */ private static final int INTERNAL_IN_JS_CHAR_INVALID = -14; /** * Token type specifying we're in a valid multi-line JS single-quoted string. */ private static final int INTERNAL_IN_JS_CHAR_VALID = -15; /** * Internal type denoting a line ending in CSS. */ private static final int INTERNAL_CSS = -16; /** * Internal type denoting a line ending in a CSS property. */ private static final int INTERNAL_CSS_PROPERTY = -17; /** * Internal type denoting a line ending in a CSS property value. */ private static final int INTERNAL_CSS_VALUE = -18; /** * Internal type denoting line ending in a CSS double-quote string. * The state to return to is embedded in the actual end token type. */ private static final int INTERNAL_CSS_STRING = -(1<<11); /** * Internal type denoting line ending in a CSS single-quote string. * The state to return to is embedded in the actual end token type. */ private static final int INTERNAL_CSS_CHAR = -(2<<11); /** * Internal type denoting line ending in a CSS multi-line comment. * The state to return to is embedded in the actual end token type. */ private static final int INTERNAL_CSS_MLC = -(3<<11); /** * Token type specifying we're in PHP. This particular field is public so * that we can hack and key off of it for code completion. */ public static final int INTERNAL_IN_PHP = -(4<<11); /** * Token type specifying we're in a PHP multiline comment. */ private static final int INTERNAL_IN_PHP_MLC = -(5<<11); /** * Token type specifying we're in a PHP multiline string. */ private static final int INTERNAL_IN_PHP_STRING = -(6<<11); /** * Token type specifying we're in a PHP multiline char. */ private static final int INTERNAL_IN_PHP_CHAR = -(7<<11); /** * The state previous CSS-related state we were in before going into a CSS * string, multi-line comment, etc. */ private int cssPrevState; /** * Whether closing markup tags are automatically completed for PHP. */ private static boolean completeCloseTags; /** * The state PHP was started in (YYINITIAL, INTERNAL_IN_JS, etc.). */ private int phpInState; /** * The language index we were in when PHP was started. */ private int phpInLangIndex; /** * When in the JS_STRING state, whether the current string is valid. */ private boolean validJSString; /** * Language state set on HTML tokens. Must be 0. */ private static final int LANG_INDEX_DEFAULT = 0; /** * Language state set on JavaScript tokens. */ private static final int LANG_INDEX_JS = 1; /** * Language state set on CSS tokens. */ private static final int LANG_INDEX_CSS = 2; /** * Language state set on PHP. */ private static final int LANG_INDEX_PHP = 3; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public PHPTokenMaker() { super(); } /** * Adds the token specified to the current linked list of tokens as an * "end token;" that is, at zzMarkedPos. * * @param tokenType The token's type. */ private void addEndToken(int tokenType) { addToken(zzMarkedPos,zzMarkedPos, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds an end token that encodes the information necessary to return * to the pre-PHP state and language index. * * @param endTokenState The PHP-related end-token state. */ private void addPhpEndToken(int endTokenState) { addEndToken(endTokenState - phpInState - (phpInLangIndex<<16)); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override protected OccurrenceMarker createOccurrenceMarker() { return new HtmlOccurrenceMarker(); } /** * Sets whether markup close tags should be completed. You might not want * this to be the case, since some tags in standard HTML aren't usually * closed. * * @return Whether closing markup tags are completed. * @see #setCompleteCloseTags(boolean) */ @Override public boolean getCompleteCloseTags() { return completeCloseTags; } @Override public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { return languageIndex==LANG_INDEX_CSS || languageIndex==LANG_INDEX_JS || languageIndex==LANG_INDEX_PHP; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { switch (languageIndex) { case LANG_INDEX_JS: case LANG_INDEX_PHP: return new String[] { "//", null }; case LANG_INDEX_CSS: return new String[] { "/*", "*/" }; default: return new String[] { "" }; } } /** * {@inheritDoc} */ @Override public boolean getMarkOccurrencesOfTokenType(int type) { return type==Token.FUNCTION || type==Token.VARIABLE || type==Token.MARKUP_TAG_NAME; } /** * Overridden to handle newlines in JS and CSS differently than those in * markup. */ @Override public boolean getShouldIndentNextLineAfter(Token token) { int languageIndex = token==null ? 0 : token.getLanguageIndex(); if (getCurlyBracesDenoteCodeBlocks(languageIndex)) { if (token!=null && token.length()==1) { char ch = token.charAt(0); return ch=='{' || ch=='('; } } return false; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; phpInState = YYINITIAL; // Shouldn't be necessary cssPrevState = CSS; // Shouldn't be necessary int languageIndex = LANG_INDEX_DEFAULT; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.MARKUP_COMMENT: state = COMMENT; break; case Token.VARIABLE: state = DTD; break; case INTERNAL_INTAG: state = INTAG; break; case INTERNAL_INTAG_SCRIPT: state = INTAG_SCRIPT; break; case INTERNAL_INTAG_STYLE: state = INTAG_STYLE; break; case INTERNAL_ATTR_DOUBLE: state = INATTR_DOUBLE; break; case INTERNAL_ATTR_SINGLE: state = INATTR_SINGLE; break; case INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT: state = INATTR_DOUBLE_SCRIPT; break; case INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT: state = INATTR_SINGLE_SCRIPT; break; case INTERNAL_ATTR_DOUBLE_QUOTE_STYLE: state = INATTR_DOUBLE_STYLE; break; case INTERNAL_ATTR_SINGLE_QUOTE_STYLE: state = INATTR_SINGLE_STYLE; break; case INTERNAL_IN_JS: state = JAVASCRIPT; languageIndex = LANG_INDEX_JS; break; case INTERNAL_IN_JS_MLC: state = JS_MLC; languageIndex = LANG_INDEX_JS; break; case INTERNAL_IN_JS_STRING_INVALID: state = JS_STRING; languageIndex = LANG_INDEX_JS; validJSString = false; break; case INTERNAL_IN_JS_STRING_VALID: state = JS_STRING; languageIndex = LANG_INDEX_JS; validJSString = true; break; case INTERNAL_IN_JS_CHAR_INVALID: state = JS_CHAR; languageIndex = LANG_INDEX_JS; validJSString = false; break; case INTERNAL_IN_JS_CHAR_VALID: state = JS_CHAR; languageIndex = LANG_INDEX_JS; validJSString = true; break; case INTERNAL_CSS: state = CSS; languageIndex = LANG_INDEX_CSS; break; case INTERNAL_CSS_PROPERTY: state = CSS_PROPERTY; languageIndex = LANG_INDEX_CSS; break; case INTERNAL_CSS_VALUE: state = CSS_VALUE; languageIndex = LANG_INDEX_CSS; break; default: if (initialTokenType<-1024) { // INTERNAL_IN_PHPxxx - phpInState int main = -(-initialTokenType & 0x0000ff00); switch (main) { default: // Should never happen case INTERNAL_IN_PHP: state = PHP; languageIndex = LANG_INDEX_PHP; phpInState = -initialTokenType&0xff; phpInLangIndex = (-initialTokenType&0x00ff0000)>>16; break; case INTERNAL_IN_PHP_MLC: state = PHP_MLC; languageIndex = LANG_INDEX_PHP; phpInState = -initialTokenType&0xff; phpInLangIndex = (-initialTokenType&0x00ff0000)>>16; break; case INTERNAL_IN_PHP_STRING: state = PHP_STRING; languageIndex = LANG_INDEX_PHP; phpInState = -initialTokenType&0xff; phpInLangIndex = (-initialTokenType&0x00ff0000)>>16; break; case INTERNAL_IN_PHP_CHAR: state = PHP_CHAR; languageIndex = LANG_INDEX_PHP; phpInState = -initialTokenType&0xff; phpInLangIndex = (-initialTokenType&0x00ff0000)>>16; break; case INTERNAL_CSS_STRING: state = CSS_STRING; languageIndex = LANG_INDEX_CSS; cssPrevState = -initialTokenType&0xff; break; case INTERNAL_CSS_CHAR: state = CSS_CHAR_LITERAL; languageIndex = LANG_INDEX_CSS; cssPrevState = -initialTokenType&0xff; break; case INTERNAL_CSS_MLC: state = CSS_C_STYLE_COMMENT; languageIndex = LANG_INDEX_CSS; cssPrevState = -initialTokenType&0xff; break; } } else { state = YYINITIAL; } break; } setLanguageIndex(languageIndex); start = text.offset; s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Sets whether markup close tags should be completed. You might not want * this to be the case, since some tags in standard HTML aren't usually * closed. * * @param complete Whether closing markup tags are completed. * @see #getCompleteCloseTags() */ public static void setCompleteCloseTags(boolean complete) { completeCloseTags = complete; } /** * Overridden to remember the language index we're leaving. */ @Override protected void yybegin(int state, int languageIndex) { phpInLangIndex = getLanguageIndex(); yybegin(state); setLanguageIndex(languageIndex); } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} // HTML-specific stuff. Whitespace = ([ \t\f]+) LineTerminator = ([\n]) Identifier = ([^ \t\n<&]+) EntityReference = ([&][^; \t]*[;]?) InTagIdentifier = ([^ \t\n\"\'/=>]+) EndScriptTag = ("") EndStyleTag = ("") // General stuff. Letter = [A-Za-z] NonzeroDigit = [1-9] Digit = ("0"|{NonzeroDigit}) HexDigit = ({Digit}|[A-Fa-f]) OctalDigit = ([0-7]) LetterOrUnderscore = ({Letter}|"_") LetterOrUnderscoreOrDash = ({LetterOrUnderscore}|[\-]) // JavaScript stuff. EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\") IdentifierStart = ({Letter}|"_"|"$") IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) JS_MLCBegin = "/*" JS_MLCEnd = "*/" JS_LineCommentBegin = "//" JS_IntegerHelper1 = (({NonzeroDigit}{Digit}*)|"0") JS_IntegerHelper2 = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) JS_IntegerLiteral = ({JS_IntegerHelper1}[lL]?) JS_HexLiteral = ({JS_IntegerHelper2}[lL]?) JS_FloatHelper1 = ([fFdD]?) JS_FloatHelper2 = ([eE][+-]?{Digit}+{JS_FloatHelper1}) JS_FloatLiteral1 = ({Digit}+"."({JS_FloatHelper1}|{JS_FloatHelper2}|{Digit}+({JS_FloatHelper1}|{JS_FloatHelper2}))) JS_FloatLiteral2 = ("."{Digit}+({JS_FloatHelper1}|{JS_FloatHelper2})) JS_FloatLiteral3 = ({Digit}+{JS_FloatHelper2}) JS_FloatLiteral = ({JS_FloatLiteral1}|{JS_FloatLiteral2}|{JS_FloatLiteral3}|({Digit}+[fFdD])) JS_ErrorNumberFormat = (({JS_IntegerLiteral}|{JS_HexLiteral}|{JS_FloatLiteral}){NonSeparator}+) JS_Separator = ([\(\)\{\}\[\]\]]) JS_Separator2 = ([\;,.]) JS_NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"||"|"&&"|">>>") JS_AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") JS_Operator = ({JS_NonAssignmentOperator}|{JS_AssignmentOperator}) JS_Identifier = ({IdentifierStart}{IdentifierPart}*) JS_ErrorIdentifier = ({NonSeparator}+) JS_Regex = ("/"([^\*\\/]|\\.)([^/\\]|\\.)*"/"[gim]*) JS_BooleanLiteral = ("true"|"false") // PHP stuff (most PHP stuff is shared with JS for simplicity) PHP_Start = (" { "" { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); } "-" {} {LineTerminator} | <> { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; } } { [^\n>]+ {} ">" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.MARKUP_DTD); } {LineTerminator} | <> { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } } { [Aa] | [aA][bB][bB][rR] | [aA][cC][rR][oO][nN][yY][mM] | [aA][dD][dD][rR][eE][sS][sS] | [aA][pP][pP][lL][eE][tT] | [aA][rR][eE][aA] | [aA][rR][tT][iI][cC][lL][eE] | [aA][sS][iI][dD][eE] | [aA][uU][dD][iI][oO] | [bB] | [bB][aA][sS][eE] | [bB][aA][sS][eE][fF][oO][nN][tT] | [bB][dD][oO] | [bB][gG][sS][oO][uU][nN][dD] | [bB][iI][gG] | [bB][lL][iI][nN][kK] | [bB][lL][oO][cC][kK][qQ][uU][oO][tT][eE] | [bB][oO][dD][yY] | [bB][rR] | [bB][uU][tT][tT][oO][nN] | [cC][aA][nN][vV][aA][sS] | [cC][aA][pP][tT][iI][oO][nN] | [cC][eE][nN][tT][eE][rR] | [cC][iI][tT][eE] | [cC][oO][dD][eE] | [cC][oO][lL] | [cC][oO][lL][gG][rR][oO][uU][pP] | [cC][oO][mM][mM][aA][nN][dD] | [cC][oO][mM][mM][eE][nN][tT] | [dD][dD] | [dD][aA][tT][aA][gG][rR][iI][dD] | [dD][aA][tT][aA][lL][iI][sS][tT] | [dD][aA][tT][aA][tT][eE][mM][pP][lL][aA][tT][eE] | [dD][eE][lL] | [dD][eE][tT][aA][iI][lL][sS] | [dD][fF][nN] | [dD][iI][aA][lL][oO][gG] | [dD][iI][rR] | [dD][iI][vV] | [dD][lL] | [dD][tT] | [eE][mM] | [eE][mM][bB][eE][dD] | [eE][vV][eE][nN][tT][sS][oO][uU][rR][cC][eE] | [fF][iI][eE][lL][dD][sS][eE][tT] | [fF][iI][gG][uU][rR][eE] | [fF][oO][nN][tT] | [fF][oO][oO][tT][eE][rR] | [fF][oO][rR][mM] | [fF][rR][aA][mM][eE] | [fF][rR][aA][mM][eE][sS][eE][tT] | [hH][123456] | [hH][eE][aA][dD] | [hH][eE][aA][dD][eE][rR] | [hH][rR] | [hH][tT][mM][lL] | [iI] | [iI][fF][rR][aA][mM][eE] | [iI][lL][aA][yY][eE][rR] | [iI][mM][gG] | [iI][nN][pP][uU][tT] | [iI][nN][sS] | [iI][sS][iI][nN][dD][eE][xX] | [kK][bB][dD] | [kK][eE][yY][gG][eE][nN] | [lL][aA][bB][eE][lL] | [lL][aA][yY][eE][rR] | [lL][eE][gG][eE][nN][dD] | [lL][iI] | [lL][iI][nN][kK] | [mM][aA][pP] | [mM][aA][rR][kK] | [mM][aA][rR][qQ][uU][eE][eE] | [mM][eE][nN][uU] | [mM][eE][tT][aA] | [mM][eE][tT][eE][rR] | [mM][uU][lL][tT][iI][cC][oO][lL] | [nN][aA][vV] | [nN][eE][sS][tT] | [nN][oO][bB][rR] | [nN][oO][eE][mM][bB][eE][dD] | [nN][oO][fF][rR][aA][mM][eE][sS] | [nN][oO][lL][aA][yY][eE][rR] | [nN][oO][sS][cC][rR][iI][pP][tT] | [oO][bB][jJ][eE][cC][tT] | [oO][lL] | [oO][pP][tT][gG][rR][oO][uU][pP] | [oO][pP][tT][iI][oO][nN] | [oO][uU][tT][pP][uU][tT] | [pP] | [pP][aA][rR][aA][mM] | [pP][lL][aA][iI][nN][tT][eE][xX][tT] | [pP][rR][eE] | [pP][rR][oO][gG][rR][eE][sS][sS] | [qQ] | [rR][uU][lL][eE] | [sS] | [sS][aA][mM][pP] | [sS][cC][rR][iI][pP][tT] | [sS][eE][cC][tT][iI][oO][nN] | [sS][eE][lL][eE][cC][tT] | [sS][eE][rR][vV][eE][rR] | [sS][mM][aA][lL][lL] | [sS][oO][uU][rR][cC][eE] | [sS][pP][aA][cC][eE][rR] | [sS][pP][aA][nN] | [sS][tT][rR][iI][kK][eE] | [sS][tT][rR][oO][nN][gG] | [sS][tT][yY][lL][eE] | [sS][uU][bB] | [sS][uU][pP] | [tT][aA][bB][lL][eE] | [tT][bB][oO][dD][yY] | [tT][dD] | [tT][eE][xX][tT][aA][rR][eE][aA] | [tT][fF][oO][oO][tT] | [tT][hH] | [tT][hH][eE][aA][dD] | [tT][iI][mM][eE] | [tT][iI][tT][lL][eE] | [tT][rR] | [tT][tT] | [uU] | [uU][lL] | [vV][aA][rR] | [vV][iI][dD][eE][oO] { addToken(Token.MARKUP_TAG_NAME); } {InTagIdentifier} { /* A non-recognized HTML tag name */ yypushback(yylength()); yybegin(INTAG); } . { /* Shouldn't happen */ yypushback(1); yybegin(INTAG); } <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } } { {PHP_Start} { addToken(Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } "/" { addToken(Token.MARKUP_TAG_DELIMITER); } {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } {Whitespace} { addToken(Token.WHITESPACE); } "=" { addToken(Token.OPERATOR); } "/>" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } ">" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE); } [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE); } <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } } { {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } [^\"<]* {} "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; } } { {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } [^\'<]* {} "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; } } { {PHP_Start} { addToken(Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } "/>" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } "/" { addToken(Token.MARKUP_TAG_DELIMITER); } // Won't appear in valid HTML. {Whitespace} { addToken(Token.WHITESPACE); } "=" { addToken(Token.OPERATOR); } ">" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(JAVASCRIPT, LANG_INDEX_JS); } [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_SCRIPT); } [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_SCRIPT); } <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_SCRIPT); return firstToken; } } { {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } [^\"<]* {} "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); return firstToken; } } { {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } [^\'<]* {} "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); return firstToken; } } { {PHP_Start} { addToken(Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } "/>" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } "/" { addToken(Token.MARKUP_TAG_DELIMITER); } // Won't appear in valid HTML. {Whitespace} { addToken(Token.WHITESPACE); } "=" { addToken(Token.OPERATOR); } ">" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(CSS, LANG_INDEX_CSS); } [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_STYLE); } [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_STYLE); } <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_STYLE); return firstToken; } } { {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } [^\"<]* {} "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_STYLE); return firstToken; } } { {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } [^\'<]* {} "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_STYLE); return firstToken; } } { {EndScriptTag} { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } // ECMA 3+ keywords. "break" | "continue" | "delete" | "else" | "for" | "function" | "if" | "in" | "new" | "this" | "typeof" | "var" | "void" | "while" | "with" { addToken(Token.RESERVED_WORD); } "return" { addToken(Token.RESERVED_WORD_2); } //JavaScript 1.6 "each" {if(JavaScriptTokenMaker.isJavaScriptCompatible("1.6")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } //JavaScript 1.7 "let" {if(JavaScriptTokenMaker.isJavaScriptCompatible("1.7")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } // Reserved (but not yet used) ECMA keywords. "abstract" { addToken(Token.RESERVED_WORD); } "boolean" { addToken(Token.DATA_TYPE); } "byte" { addToken(Token.DATA_TYPE); } "case" { addToken(Token.RESERVED_WORD); } "catch" { addToken(Token.RESERVED_WORD); } "char" { addToken(Token.DATA_TYPE); } "class" { addToken(Token.RESERVED_WORD); } "const" { addToken(Token.RESERVED_WORD); } "debugger" { addToken(Token.RESERVED_WORD); } "default" { addToken(Token.RESERVED_WORD); } "do" { addToken(Token.RESERVED_WORD); } "double" { addToken(Token.DATA_TYPE); } "enum" { addToken(Token.RESERVED_WORD); } "export" { addToken(Token.RESERVED_WORD); } "extends" { addToken(Token.RESERVED_WORD); } "final" { addToken(Token.RESERVED_WORD); } "finally" { addToken(Token.RESERVED_WORD); } "float" { addToken(Token.DATA_TYPE); } "goto" { addToken(Token.RESERVED_WORD); } "implements" { addToken(Token.RESERVED_WORD); } "import" { addToken(Token.RESERVED_WORD); } "instanceof" { addToken(Token.RESERVED_WORD); } "int" { addToken(Token.DATA_TYPE); } "interface" { addToken(Token.RESERVED_WORD); } "long" { addToken(Token.DATA_TYPE); } "native" { addToken(Token.RESERVED_WORD); } "package" { addToken(Token.RESERVED_WORD); } "private" { addToken(Token.RESERVED_WORD); } "protected" { addToken(Token.RESERVED_WORD); } "public" { addToken(Token.RESERVED_WORD); } "short" { addToken(Token.DATA_TYPE); } "static" { addToken(Token.RESERVED_WORD); } "super" { addToken(Token.RESERVED_WORD); } "switch" { addToken(Token.RESERVED_WORD); } "synchronized" { addToken(Token.RESERVED_WORD); } "throw" { addToken(Token.RESERVED_WORD); } "throws" { addToken(Token.RESERVED_WORD); } "transient" { addToken(Token.RESERVED_WORD); } "try" { addToken(Token.RESERVED_WORD); } "volatile" { addToken(Token.RESERVED_WORD); } "null" { addToken(Token.RESERVED_WORD); } // Literals. {JS_BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } "NaN" { addToken(Token.RESERVED_WORD); } "Infinity" { addToken(Token.RESERVED_WORD); } // Functions. "eval" | "parseInt" | "parseFloat" | "escape" | "unescape" | "isNaN" | "isFinite" { addToken(Token.FUNCTION); } {LineTerminator} { addEndToken(INTERNAL_IN_JS); return firstToken; } {JS_Identifier} { addToken(Token.IDENTIFIER); } {Whitespace} { addToken(Token.WHITESPACE); } /* String/Character literals. */ [\'] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); } [\"] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); } /* Comment literals. */ "/**/" { addToken(Token.COMMENT_MULTILINE); } {JS_MLCBegin} { start = zzMarkedPos-2; yybegin(JS_MLC); } {JS_LineCommentBegin} { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); } /* Attempt to identify regular expressions (not foolproof) - do after comments! */ {JS_Regex} { boolean highlightedAsRegex = false; if (firstToken==null) { addToken(Token.REGEX); highlightedAsRegex = true; } else { // If this is *likely* to be a regex, based on // the previous token, highlight it as such. Token t = firstToken.getLastNonCommentNonWhitespaceToken(); if (RSyntaxUtilities.regexCanFollowInJavaScript(t)) { addToken(Token.REGEX); highlightedAsRegex = true; } } // If it doesn't *appear* to be a regex, highlight it as // individual tokens. if (!highlightedAsRegex) { int temp = zzStartRead + 1; addToken(zzStartRead, zzStartRead, Token.OPERATOR); zzStartRead = zzCurrentPos = zzMarkedPos = temp; } } /* Separators. */ {JS_Separator} { addToken(Token.SEPARATOR); } {JS_Separator2} { addToken(Token.IDENTIFIER); } {PHP_Start} { addToken(Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } /* Operators. */ {JS_Operator} { addToken(Token.OPERATOR); } /* Numbers */ {JS_IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {JS_HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } {JS_FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } {JS_ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } {JS_ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } /* Ended with a line not in a string or comment. */ <> { addEndToken(INTERNAL_IN_JS); return firstToken; } /* Catch any other (unhandled) characters and flag them as bad. */ . { addToken(Token.ERROR_IDENTIFIER); } } { {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE); validJSString = true; addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } [^\n\\\"<]+ {} "<" { /* Allowing " continue to next line. */ if (validJSString) { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_IN_JS_STRING_VALID); } else { addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS_STRING_INVALID); } return firstToken; } \" { int type = validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } <> { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } } { {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR); validJSString = true; addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } [^\n\\\'<]+ {} "<" { /* Allowing " continue to next line. */ if (validJSString) { addToken(start,zzStartRead, Token.LITERAL_CHAR); addEndToken(INTERNAL_IN_JS_CHAR_VALID); } else { addToken(start,zzStartRead, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS_CHAR_INVALID); } return firstToken; } \' { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } <> { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; } } { // JavaScript MLC's. This state is essentially Java's MLC state. [^hwf<\n\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } [hwf] {} {EndScriptTag} { yybegin(YYINITIAL); int temp = zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } "<" {} \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } {JS_MLCEnd} { yybegin(JAVASCRIPT); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } \* {} <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } } { [^hwf<\n]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } [hwf] {} {EndScriptTag} { int temp = zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); yybegin(YYINITIAL, LANG_INDEX_DEFAULT); addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } "<" {} \n { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } } { {PHP_Start} { addToken(Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } {EndStyleTag} { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } {CSS_SelectorPiece} { addToken(Token.DATA_TYPE); } {CSS_PseudoClass} { addToken(Token.RESERVED_WORD); } ":" { /* Unknown pseudo class */ addToken(Token.DATA_TYPE); } {CSS_AtKeyword} { addToken(Token.REGEX); } {CSS_Id} { addToken(Token.VARIABLE); } "{" { addToken(Token.SEPARATOR); yybegin(CSS_PROPERTY); } [,] { addToken(Token.IDENTIFIER); } \" { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } \' { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } [+>~\^$\|=] { addToken(Token.OPERATOR); } {CSS_Separator} { addToken(Token.SEPARATOR); } {Whitespace} { addToken(Token.WHITESPACE); } {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } . { /*System.out.println("CSS: " + yytext());*/ addToken(Token.IDENTIFIER); } "\n" | <> { addEndToken(INTERNAL_CSS); return firstToken; } } { {PHP_Start} { addToken(Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } {EndStyleTag} { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } {CSS_Property} { addToken(Token.RESERVED_WORD); } "}" { addToken(Token.SEPARATOR); yybegin(CSS); } ":" { addToken(Token.OPERATOR); yybegin(CSS_VALUE); } {Whitespace} { addToken(Token.WHITESPACE); } {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } . { /*System.out.println("css_property: " + yytext());*/ addToken(Token.IDENTIFIER); } "\n" | <> { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; } } { {PHP_Start} { addToken(Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } {EndStyleTag} { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } {CSS_Value} { addToken(Token.IDENTIFIER); } "!important" { addToken(Token.ANNOTATION); } {CSS_Function} { int temp = zzMarkedPos - 2; addToken(zzStartRead, temp, Token.FUNCTION); addToken(zzMarkedPos-1, zzMarkedPos-1, Token.SEPARATOR); zzStartRead = zzCurrentPos = zzMarkedPos; } {CSS_Number} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } \" { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } \' { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } ")" { /* End of a function */ addToken(Token.SEPARATOR); } [;] { addToken(Token.OPERATOR); yybegin(CSS_PROPERTY); } [,\.] { addToken(Token.IDENTIFIER); } "}" { addToken(Token.SEPARATOR); yybegin(CSS); } {Whitespace} { addToken(Token.WHITESPACE); } {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } . { /*System.out.println("css_value: " + yytext());*/ addToken(Token.IDENTIFIER); } "\n" | <> { addEndToken(INTERNAL_CSS_VALUE); return firstToken; } } { {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR); validJSString = true; addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } [^\n\\\"<]+ {} "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; } } { {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR); validJSString = true; addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } [^\n\\\'<]+ {} "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; } } { {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR); validJSString = true; addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } [^hwf\n\*<]+ {} "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; } } { "?>" { yybegin(phpInState, phpInLangIndex); addToken(Token.MARKUP_TAG_DELIMITER); start = zzMarkedPos; } /* Error control operator */ ("@"{JS_Identifier}) { int count = yylength(); addToken(zzStartRead,zzStartRead, Token.FUNCTION); zzMarkedPos -= (count-1); //yypushback(count-1); } /* Keywords */ "__CLASS__" | "__DIR__" | "__FILE__" | "__FUNCTION__" | "__METHOD__" | "__NAMESPACE__" | "abstract" | "and" | "array" | "as" | "break" | "case" | "catch" | "cfunction" | "class" | "clone" | "const" | "continue" | "declare" | "default" | "die" | "do" | "echo" | "else" | "elseif" | "empty" | "enddeclare" | "endfor" | "endforeach" | "endif" | "endswitch" | "endwhile" | "eval" | "extends" | "final" | "for" | "foreach" | "function" | "global" | "goto" | "if" | "implements" | "include" | "include_once" | "interface" | "instanceof" | "isset" | "list" | "namespace" | "new" | "old_function" | "or" | "print" | "private" | "protected" | "public" | "require" | "require_once" | "static" | "switch" | "throw" | "try" | "unset" | "use" | "var" | "while" | "xor" | "parent" | "self" | "stdClass" { addToken(Token.RESERVED_WORD); } "exit" | "return" { addToken(Token.RESERVED_WORD_2); } /* Functions */ "__call" | "__construct" | "__getfunctions" | "__getlastrequest" | "__getlastresponse" | "__gettypes" | "__tostring" | "abs" | "acos" | "acosh" | "add" | ("add"("_namespace"|"_root"|"action"|"color"|"cslashes"|"entry"|"fill"|"function"|"shape"|"slashes"|"string")) | "aggregate" | "aggregate_info" | "aggregate_methods" | "aggregate_methods_by_list" | "aggregate_methods_by_regexp" | "aggregate_properties" | "aggregate_properties_by_list" | "aggregate_properties_by_regexp" | "aggregation_info" | "align" | ("apd_"("breakpoint"|"callstack"|"clunk"|"continue"|"croak"|"dump_function_table"|"dump_persistent_resources"|"dump_regular_resources"|"echo"|"get_active_symbols"|"set_pprof_trace"|"set_session"|"set_session_trace"|"set_socket_session_trace")) | "append" | "append_child" | "append_sibling" | "appendchild" | "appenddata" | ("array_"("change_key_case"|"chunk"|"combine"|"count_values"|"diff"|"diff_assoc"|"diff_key"|"diff_uassoc"|"diff_ukey"|"fill"|"filter"|"flip"|"intersect"|"intersect_assoc"|"intersect_key"|"intersect_uassoc"|"intersect_ukey"|"key_exists"|"keys"|"map"|"merge"|"merge_recursive"|"multisort"|"pad"|"pop"|"push"|"rand"|"reduce"|"reverse"|"search"|"shift"|"slice"|"splice"|"sum"|"udiff"|"udiff_assoc"|"udiff_uassoc"|"uintersect"|"uintersect_assoc"|"uintersect_uassoc"|"unique"|"unshift"|"values"|"walk"|"walk_recursive")) | "arsort" | "ascii2ebcdic" | "asin" | "asinh" | "asort" | "assert" | "assert_options" | "assign" | "assignelem" | "asxml" | "atan" | "atan2" | "atanh" | "attreditable" | "attributes" | "base64_decode" | "base64_encode" | "base_convert" | "basename" | "bcadd" | "bccomp" | "bcdiv" | "bcmod" | "bcmul" | "bcpow" | "bcpowmod" | "bcscale" | "bcsqrt" | "bcsub" | "begintransaction" | "bin2hex" | "bind_textdomain_codeset" | "bindcolumn" | "bindec" | "bindparam" | "bindtextdomain" | "bzclose" | "bzcompress" | "bzdecompress" | "bzerrno" | "bzerror" | "bzerrstr" | "bzflush" | "bzopen" | "bzread" | "bzwrite" | "cal_days_in_month" | "cal_from_jd" | "cal_info" | "cal_to_jd" | "call_user_func" | "call_user_func_array" | "call_user_method" | "call_user_method_array" | ("ccvs_"("add"|"auth"|"command"|"count"|"delete"|"done"|"init"|"lookup"|"new"|"report"|"return"|"reverse"|"sale"|"status"|"textvalue"|"void")) | "ceil" | "chdir" | "checkdate" | "checkdnsrr" | "checkin" | "checkout" | "chgrp" | "child_nodes" | "children" | "chmod" | "chop" | "chown" | "chr" | "chroot" | "chunk_split" | "class_exists" | "class_implements" | "class_parents" | "classkit_import" | "classkit_method_add" | "classkit_method_copy" | "classkit_method_redefine" | "classkit_method_remove" | "classkit_method_rename" | "clearstatcache" | "clone_node" | "clonenode" | "close" | "closedir" | "closelog" | "com" | "commit" | "compact" | "connect" | "connection_aborted" | "connection_status" | "connection_timeout" | "constant" | "content" | "convert_cyr_string" | "convert_uudecode" | "convert_uuencode" | "copy" | "cos" | "cosh" | "count" | "count_chars" | "crack_check" | "crack_closedict" | "crack_getlastmessage" | "crack_opendict" | "crc32" | ("create"("_attribute"|"_cdata_section"|"_comment"|"_element"|"_element_ns"|"_entity_reference"|"_function"|"_processing_instruction"|"_text_node"|"attribute"|"attributens"|"cdatasection"|"comment"|"document"|"documentfragment"|"documenttype"|"element"|"elementns"|"entityreference"|"processinginstruction"|"textnode")) | "crypt" | ("curl_"("close"|"copy_handle"|"errno"|"error"|"exec"|"getinfo"|"init"|"multi_add_handle"|"multi_close"|"multi_exec"|"multi_getcontent"|"multi_info_read"|"multi_init"|"multi_remove_handle"|"multi_select"|"setopt"|"version")) | "current" | "cybercash_base64_decode" | "cybercash_base64_encode" | "cybercash_decr" | "cybercash_encr" | "cyrus_authenticate" | "cyrus_bind" | "cyrus_close" | "cyrus_connect" | "cyrus_query" | "cyrus_unbind" | "data" | "date" | "date_sunrise" | "date_sunset" | "dblist" | "dbmclose" | "dbmdelete" | "dbmexists" | "dbmfetch" | "dbmfirstkey" | "dbminsert" | "dbmnextkey" | "dbmopen" | "dbmreplace" | "dbstat" | "dcgettext" | "dcngettext" | "dcstat" | "deaggregate" | "debug_backtrace" | "debug_print_backtrace" | "debug_zval_dump" | "debugger_off" | "debugger_on" | "decbin" | "dechex" | "decoct" | "decrement" | "define" | "define_syslog_variables" | "defined" | "deg2rad" | "delete" | "deletedata" | "description" | "dgettext" | ("dio_"("close"|"fcntl"|"open"|"read"|"seek"|"stat"|"tcsetattr"|"truncate"|"write")) | "dir" | "dirname" | "disk_free_space" | "disk_total_space" | "diskfreespace" | "dl" | "dngettext" | "dns_check_record" | "dns_get_mx" | "dns_get_record" | "doctype" | "document_element" | "dom_import_simplexml" | ("domxml_"("new_doc"|"open_file"|"open_mem"|"version"|"xmltree"|"xslt_stylesheet"|"xslt_stylesheet_doc"|"xslt_stylesheet_file")) | "dotnet" | "dotnet_load" | "doubleval" | "drawcurve" | "drawcurveto" | "drawline" | "drawlineto" | "dstanchors" | "dstofsrcanchors" | "dump_file" | "dump_mem" | "dump_node" | "each" | "easter_date" | "easter_days" | "ebcdic2ascii" | "end" | "entities" | "eof" | "erase" | "ereg" | "ereg_replace" | "eregi" | "eregi_replace" | "error_log" | "error_reporting" | "errorcode" | "errorinfo" | "escapeshellarg" | "escapeshellcmd" | "exec" | "execute" | "exif_imagetype" | "exif_read_data" | "exif_tagname" | "exif_thumbnail" | "exp" | "explode" | "expm1" | "export" | "extension_loaded" | "extract" | "ezmlm_hash" | "fclose" | "feof" | "fetch" | "fetchall" | "fetchsingle" | "fflush" | "fgetc" | "fgetcsv" | "fgets" | "fgetss" | "file" | ("file"("_exists"|"_get_contents"|"_put_contents"|"atime"|"ctime"|"group"|"inode"|"mtime"|"owner"|"perms"|"pro"|"pro_fieldcount"|"pro_fieldname"|"pro_fieldtype"|"pro_fieldwidth"|"pro_retrieve"|"pro_rowcount"|"size"|"type")) | "find" | "first_child" | "floatval" | "flock" | "floor" | "flush" | "fmod" | "fnmatch" | "fopen" | "fpassthru" | "fprintf" | "fputcsv" | "fputs" | "fread" | "free" | "frenchtojd" | "fribidi_log2vis" | "fscanf" | "fseek" | "fsockopen" | "fstat" | "ftell" | "ftok" | ("ftp_"("alloc"|"cdup"|"chdir"|"chmod"|"close"|"connect"|"delete"|"exec"|"fget"|"fput"|"get"|"get_option"|"login"|"mdtm"|"mkdir"|"nb_continue"|"nb_fget"|"nb_fput"|"nb_get"|"nb_put"|"nlist"|"pasv"|"put"|"pwd"|"quit"|"raw"|"rawlist"|"rename"|"rmdir"|"set_option"|"site"|"size"|"ssl_connect"|"systype")) | "ftruncate" | "ftstat" | "func_get_arg" | "func_get_args" | "func_num_args" | "function_exists" | "fwrite" | "gd_info" | "get" | ("get"("_attr"|"_attribute"|"_attribute_node"|"_browser"|"_cfg_var"|"_class"|"_class_methods"|"_class_vars"|"_content"|"_current_user"|"_declared_classes"|"_declared_interfaces"|"_defined_constants"|"_defined_functions"|"_defined_vars"|"_element_by_id"|"_elements_by_tagname"|"_extension_funcs"|"_headers"|"_html_translation_table"|"_include_path"|"_included_files"|"_loaded_extensions"|"_magic_quotes_gpc"|"_magic_quotes_runtime"|"_meta_tags"|"_nodes"|"_object_vars"|"_parent_class"|"_required_files"|"_resource_type"|"allheaders"|"atime"|"attr"|"attribute"|"attributenode"|"attributenodens"|"attributens"|"buffering"|"children"|"crc"|"ctime"|"cwd"|"date"|"depth"|"elem"|"elementbyid"|"elementsbytagname"|"elementsbytagnamens"|"env"|"filename"|"filetime"|"functions"|"group"|"height"|"hostbyaddr"|"hostbyname"|"hostbynamel"|"hostos"|"imagesize"|"inneriterator"|"inode"|"iterator"|"lastmod"|"method"|"mtime"|"mxrr"|"mygid"|"myinode"|"mypid"|"myuid"|"name"|"nameditem"|"nameditemns"|"opt"|"owner"|"packedsize"|"path"|"pathname"|"perms"|"position"|"protobyname"|"protobynumber"|"randmax"|"rusage"|"servbyname"|"servbyport"|"shape1"|"shape2"|"size"|"stats"|"subiterator"|"text"|"timeofday"|"type"|"unpackedsize"|"version"|"width")) | "glob" | "gmdate" | "gmmktime" | ("gmp_"("abs"|"add"|"and"|"clrbit"|"cmp"|"com"|"div"|"div_q"|"div_qr"|"div_r"|"divexact"|"fact"|"gcd"|"gcdext"|"hamdist"|"init"|"intval"|"invert"|"jacobi"|"legendre"|"mod"|"mul"|"neg"|"or"|"perfect_square"|"popcount"|"pow"|"powm"|"prob_prime"|"random"|"scan0"|"scan1"|"setbit"|"sign"|"sqrt"|"sqrtrem"|"strval"|"sub"|"xor")) | "gmstrftime" | "gregoriantojd" | ("gz"("close"|"compress"|"deflate"|"encode"|"eof"|"file"|"getc"|"gets"|"getss"|"inflate"|"open"|"passthru"|"puts"|"read"|"rewind"|"seek"|"tell"|"uncompress"|"write")) | "handle" | ("has"("_attribute"|"_attributes"|"_child_nodes"|"attribute"|"attributens"|"attributes"|"childnodes"|"children"|"feature"|"next"|"siblings")) | "header" | "headers_list" | "headers_sent" | "hebrev" | "hebrevc" | "hexdec" | "highlight_file" | "highlight_string" | "html_dump_mem" | "html_entity_decode" | "htmlentities" | "htmlspecialchars" | ("http_"("build_query"|"response_code")) | ("hw_"("array2objrec"|"changeobject"|"children"|"childrenobj"|"close"|"connect"|"connection_info"|"cp"|"deleteobject"|"docbyanchor"|"docbyanchorobj"|"document_attributes"|"document_bodytag"|"document_content"|"document_setcontent"|"document_size"|"dummy"|"edittext"|"error"|"errormsg"|"free_document"|"getanchors"|"getanchorsobj"|"getandlock"|"getchildcoll"|"getchildcollobj"|"getchilddoccoll"|"getchilddoccollobj"|"getobject"|"getobjectbyquery"|"getobjectbyquerycoll"|"getobjectbyquerycollobj"|"getobjectbyqueryobj"|"getparents"|"getparentsobj"|"getrellink"|"getremote"|"getremotechildren"|"getsrcbydestobj"|"gettext"|"getusername"|"identify"|"incollections"|"info"|"inscoll"|"insdoc"|"insertanchors"|"insertdocument"|"insertobject"|"mapid"|"modifyobject"|"mv"|"new_document"|"objrec2array"|"output_document"|"pconnect"|"pipedocument"|"root"|"setlinkroot"|"stat"|"unlock"|"who")) | "hwapi_hgcsp" | "hwstat" | "hypot" | ("ibase_"("add_user"|"affected_rows"|"backup"|"blob_add"|"blob_cancel"|"blob_close"|"blob_create"|"blob_echo"|"blob_get"|"blob_import"|"blob_info"|"blob_open"|"close"|"commit"|"commit_ret"|"connect"|"db_info"|"delete_user"|"drop_db"|"errcode"|"errmsg"|"execute"|"fetch_assoc"|"fetch_object"|"fetch_row"|"field_info"|"free_event_handler"|"free_query"|"free_result"|"gen_id"|"maintain_db"|"modify_user"|"name_result"|"num_fields"|"num_params"|"param_info"|"pconnect"|"prepare"|"query"|"restore"|"rollback"|"rollback_ret"|"server_info"|"service_attach"|"service_detach"|"set_event_handler"|"timefmt"|"trans"|"wait_event")) | "iconv" | ("iconv_"("get_encoding"|"mime_decode"|"mime_decode_headers"|"mime_encode"|"set_encoding"|"strlen"|"strpos"|"strrpos"|"substr")) | "identify" | "ignore_user_abort" | ("image"("2wbmp"|"_type_to_extension"|"_type_to_mime_type"|"alphablending"|"antialias"|"arc"|"char"|"charup"|"colorallocate"|"colorallocatealpha"|"colorat"|"colorclosest"|"colorclosestalpha"|"colorclosesthwb"|"colordeallocate"|"colorexact"|"colorexactalpha"|"colormatch"|"colorresolve"|"colorresolvealpha"|"colorset"|"colorsforindex"|"colorstotal"|"colortransparent"|"copy"|"copymerge"|"copymergegray"|"copyresampled"|"copyresized"|"create"|"createfromgd"|"createfromgd2"|"createfromgd2part"|"createfromgif"|"createfromjpeg"|"createfrompng"|"createfromstring"|"createfromwbmp"|"createfromxbm"|"createfromxpm"|"createtruecolor"|"dashedline"|"destroy"|"ellipse"|"fill"|"filledarc"|"filledellipse"|"filledpolygon"|"filledrectangle"|"filltoborder"|"filter"|"fontheight"|"fontwidth"|"ftbbox"|"fttext"|"gammacorrect"|"gd"|"gd2"|"gif"|"interlace"|"istruecolor"|"jpeg"|"layereffect"|"line"|"loadfont"|"palettecopy"|"png"|"polygon"|"psbbox"|"pscopyfont"|"psencodefont"|"psextendfont"|"psfreefont"|"psloadfont"|"psslantfont"|"pstext"|"rectangle"|"rotate"|"savealpha"|"setbrush"|"setpixel"|"setstyle"|"setthickness"|"settile"|"string"|"stringup"|"sx"|"sy"|"truecolortopalette"|"ttfbbox"|"ttftext"|"types"|"wbmp"|"xbm")) | ("imap_"("8bit"|"alerts"|"append"|"base64"|"binary"|"body"|"bodystruct"|"check"|"clearflag_full"|"close"|"createmailbox"|"delete"|"deletemailbox"|"errors"|"expunge"|"fetch_overview"|"fetchbody"|"fetchheader"|"fetchstructure"|"get_quota"|"get_quotaroot"|"getacl"|"getmailboxes"|"getsubscribed"|"header"|"headerinfo"|"headers"|"last_error"|"list"|"listmailbox"|"listscan"|"listsubscribed"|"lsub"|"mail"|"mail_compose"|"mail_copy"|"mail_move"|"mailboxmsginfo"|"mime_header_decode"|"msgno"|"num_msg"|"num_recent"|"open"|"ping"|"qprint"|"renamemailbox"|"reopen"|"rfc822_parse_adrlist"|"rfc822_parse_headers"|"rfc822_write_address"|"scanmailbox"|"search"|"set_quota"|"setacl"|"setflag_full"|"sort"|"status"|"subscribe"|"thread"|"timeout"|"uid"|"undelete"|"unsubscribe"|"utf7_decode"|"utf7_encode"|"utf8")) | "implode" | "import" | "import_request_variables" | "importnode" | "in_array" | "increment" | "inet_ntop" | "inet_pton" | "info" | ("ini_"("alter"|"get"|"get_all"|"restore"|"set")) | "insert" | "insert_before" | "insertanchor" | "insertbefore" | "insertcollection" | "insertdata" | "insertdocument" | "interface_exists" | "internal_subset" | "intval" | "ip2long" | "iptcembed" | "iptcparse" | ("is_"("a"|"array"|"blank_node"|"bool"|"callable"|"dir"|"double"|"executable"|"file"|"finite"|"float"|"infinite"|"int"|"integer"|"link"|"long"|"nan"|"null"|"numeric"|"object"|"readable"|"real"|"resource"|"scalar"|"soap_fault"|"string"|"subclass_of"|"uploaded_file"|"writable"|"writeable")) | ("is"("asp"|"comment"|"dir"|"dot"|"executable"|"file"|"html"|"id"|"jste"|"link"|"php"|"readable"|"samenode"|"supported"|"text"|"whitespaceinelementcontent"|"writable"|"xhtml"|"xml")) | "item" | "iterator_count" | "iterator_to_array" | "java_last_exception_clear" | "java_last_exception_get" | "jddayofweek" | "jdmonthname" | "jdtofrench" | "jdtogregorian" | "jdtojewish" | "jdtojulian" | "jdtounix" | "jewishtojd" | "join" | "jpeg2wbmp" | ("json_"("decode"|"encode"|"last_error"("_msg")?)) | "juliantojd" | "key" | "krsort" | "ksort" | "langdepvalue" | "last_child" | "lastinsertid" | "lcg_value" | ("ldap_"("8859_to_t61"|"add"|"bind"|"close"|"compare"|"connect"|"count_entries"|"delete"|"dn2ufn"|"err2str"|"errno"|"error"|"explode_dn"|"first_attribute"|"first_entry"|"first_reference"|"free_result"|"get_attributes"|"get_dn"|"get_entries"|"get_option"|"get_values"|"get_values_len"|"list"|"mod_add"|"mod_del"|"mod_replace"|"modify"|"next_attribute"|"next_entry"|"next_reference"|"parse_reference"|"parse_result"|"read"|"rename"|"sasl_bind"|"search"|"set_option"|"set_rebind_proc"|"sort"|"start_tls"|"t61_to_8859"|"unbind")) | "levenshtein" | "link" | "linkinfo" | "load" | "loadhtml" | "loadhtmlfile" | "loadxml" | "localeconv" | "localtime" | "lock" | "log" | "log10" | "log1p" | "long2ip" | "lookupnamespaceuri" | "lookupprefix" | "lstat" | "ltrim" | "lzf_compress" | "lzf_decompress" | "lzf_optimized_for" | "mail" | "main" | "max" | ("mb_"("convert_case"|"convert_encoding"|"convert_kana"|"convert_variables"|"decode_mimeheader"|"decode_numericentity"|"detect_encoding"|"detect_order"|"encode_mimeheader"|"encode_numericentity"|"ereg"|"ereg_match"|"ereg_replace"|"ereg_search"|"ereg_search_getpos"|"ereg_search_getregs"|"ereg_search_init"|"ereg_search_pos"|"ereg_search_regs"|"ereg_search_setpos"|"eregi"|"eregi_replace"|"get_info"|"http_input"|"http_output"|"internal_encoding"|"language"|"list_encodings"|"output_handler"|"parse_str"|"preferred_mime_name"|"regex_encoding"|"regex_set_options"|"send_mail"|"split"|"strcut"|"strimwidth"|"strlen"|"strpos"|"strrpos"|"strtolower"|"strtoupper"|"strwidth"|"substitute_character"|"substr"|"substr_count")) | ("mcal_"("append_event"|"close"|"create_calendar"|"date_compare"|"date_valid"|"day_of_week"|"day_of_year"|"days_in_month"|"delete_calendar"|"delete_event"|"event_add_attribute"|"event_init"|"event_set_alarm"|"event_set_category"|"event_set_class"|"event_set_description"|"event_set_end"|"event_set_recur_daily"|"event_set_recur_monthly_mday"|"event_set_recur_monthly_wday"|"event_set_recur_none"|"event_set_recur_weekly"|"event_set_recur_yearly"|"event_set_start"|"event_set_title"|"expunge"|"fetch_current_stream_event"|"fetch_event"|"is_leap_year"|"list_alarms"|"list_events"|"next_recurrence"|"open"|"popen"|"rename_calendar"|"reopen"|"snooze"|"store_event"|"time_valid"|"week_of_year")) | ("mcrypt_"("cbc"|"cfb"|"create_iv"|"decrypt"|"ecb"|"enc_get_algorithms_name"|"enc_get_block_size"|"enc_get_iv_size"|"enc_get_key_size"|"enc_get_modes_name"|"enc_get_supported_key_sizes"|"enc_is_block_algorithm"|"enc_is_block_algorithm_mode"|"enc_is_block_mode"|"enc_self_test"|"encrypt"|"generic"|"generic_deinit"|"generic_end"|"generic_init"|"get_block_size"|"get_cipher_name"|"get_iv_size"|"get_key_size"|"list_algorithms"|"list_modes"|"module_close"|"module_get_algo_block_size"|"module_get_algo_key_size"|"module_get_supported_key_sizes"|"module_is_block_algorithm"|"module_is_block_algorithm_mode"|"module_is_block_mode"|"module_open"|"module_self_test"|"ofb")) | "md5" | "md5_file" | "mdecrypt_generic" | "memcache_debug" | "memory_get_usage" | "metaphone" | "method_exists" | "mhash" | "mhash_count" | "mhash_get_block_size" | "mhash_get_hash_name" | "mhash_keygen_s2k" | "microtime" | "mime_content_type" | "mimetype" | "min" | "ming_setcubicthreshold" | "ming_setscale" | "ming_useswfversion" | "mkdir" | "mktime" | "money_format" | "move" | "move_uploaded_file" | "movepen" | "movepento" | "moveto" | ("msession_"("connect"|"count"|"create"|"destroy"|"disconnect"|"find"|"get"|"get_array"|"get_data"|"inc"|"list"|"listvar"|"lock"|"plugin"|"randstr"|"set"|"set_array"|"set_data"|"timeout"|"uniq"|"unlock")) | "msg_get_queue" | "msg_receive" | "msg_remove_queue" | "msg_send" | "msg_set_queue" | "msg_stat_queue" | "msql" | "mt_getrandmax" | "mt_rand" | "mt_srand" | "name" | "natcasesort" | "natsort" | "next" | "next_sibling" | "nextframe" | "ngettext" | "nl2br" | "nl_langinfo" | ("node_"("name"|"type"|"value")) | "normalize" | "notations" | ("notes_"("body"|"copy_db"|"create_db"|"create_note"|"drop_db"|"find_note"|"header_info"|"list_msgs"|"mark_read"|"mark_unread"|"nav_create"|"search"|"unread"|"version")) | ("nsapi_"("request_headers"|"response_headers"|"virtual")) | "number_format" | ("ob_"("clean"|"end_clean"|"end_flush"|"flush"|"get_clean"|"get_contents"|"get_flush"|"get_length"|"get_level"|"get_status"|"gzhandler"|"iconv_handler"|"implicit_flush"|"list_handlers"|"start"|"tidyhandler")) | "object" | "objectbyanchor" | ("oci"("_bind_by_name"|"_cancel"|"_close"|"_commit"|"_connect"|"_define_by_name"|"_error"|"_execute"|"_fetch"|"_fetch_all"|"_fetch_array"|"_fetch_assoc"|"_fetch_object"|"_fetch_row"|"_field_is_null"|"_field_name"|"_field_precision"|"_field_scale"|"_field_size"|"_field_type"|"_field_type_raw"|"_free_statement"|"_internal_debug"|"_lob_copy"|"_lob_is_equal"|"_new_collection"|"_new_connect"|"_new_cursor"|"_new_descriptor"|"_num_fields"|"_num_rows"|"_parse"|"_password_change"|"_pconnect"|"_result"|"_rollback"|"_server_version"|"_set_prefetch"|"_statement_type"|"bindbyname"|"cancel"|"closelob"|"collappend"|"collassign"|"collassignelem"|"collgetelem"|"collmax"|"collsize"|"colltrim"|"columnisnull"|"columnname"|"columnprecision"|"columnscale"|"columnsize"|"columntype"|"columntyperaw"|"commit"|"definebyname"|"error"|"execute"|"fetch"|"fetchinto"|"fetchstatement"|"freecollection"|"freecursor"|"freedesc"|"freestatement"|"internaldebug"|"loadlob"|"logoff"|"logon"|"newcollection"|"newcursor"|"newdescriptor"|"nlogon"|"numcols"|"parse"|"plogon"|"result"|"rollback"|"rowcount"|"savelob"|"savelobfile"|"serverversion"|"setprefetch"|"statementtype"|"writelobtofile"|"writetemporarylob")) | "octdec" | ("odbc_"("autocommit"|"binmode"|"close"|"close_all"|"columnprivileges"|"columns"|"commit"|"connect"|"cursor"|"data_source"|"do"|"error"|"errormsg"|"exec"|"execute"|"fetch_array"|"fetch_into"|"fetch_object"|"fetch_row"|"field_len"|"field_name"|"field_num"|"field_precision"|"field_scale"|"field_type"|"foreignkeys"|"free_result"|"gettypeinfo"|"longreadlen"|"next_result"|"num_fields"|"num_rows"|"pconnect"|"prepare"|"primarykeys"|"procedurecolumns"|"procedures"|"result"|"result_all"|"rollback"|"setoption"|"specialcolumns"|"statistics"|"tableprivileges"|"tables")) | "offsetexists" | "offsetget" | "offsetset" | "offsetunset" | "opendir" | "openlog" | ("openssl_"("csr_export"|"csr_export_to_file"|"csr_new"|"csr_sign"|"error_string"|"free_key"|"get_privatekey"|"get_publickey"|"open"|"pkcs7_decrypt"|"pkcs7_encrypt"|"pkcs7_sign"|"pkcs7_verify"|"pkey_export"|"pkey_export_to_file"|"pkey_get_private"|"pkey_get_public"|"pkey_new"|"private_decrypt"|"private_encrypt"|"public_decrypt"|"public_encrypt"|"seal"|"sign"|"verify"|"x509_check_private_key"|"x509_checkpurpose"|"x509_export"|"x509_export_to_file"|"x509_free"|"x509_parse"|"x509_read")) | ("ora_"("bind"|"close"|"columnname"|"columnsize"|"columntype"|"commit"|"commitoff"|"commiton"|"do"|"error"|"errorcode"|"exec"|"fetch"|"fetch_into"|"getcolumn"|"logoff"|"logon"|"numcols"|"numrows"|"open"|"parse"|"plogon"|"rollback")) | "ord" | "output" | "output_add_rewrite_var" | "output_reset_rewrite_vars" | "overload" | "override_function" | "owner_document" | "pack" | "parent_node" | "parents" | "parse_ini_file" | "parse_str" | "parse_url" | "parsekit_compile_file" | "parsekit_compile_string" | "parsekit_func_arginfo" | "passthru" | "pathinfo" | "pclose" | ("pcntl_"("alarm"|"exec"|"fork"|"getpriority"|"setpriority"|"signal"|"wait"|"waitpid"|"wexitstatus"|"wifexited"|"wifsignaled"|"wifstopped"|"wstopsig"|"wtermsig")) | "pconnect" | ("pdf_"("add_annotation"|"add_bookmark"|"add_launchlink"|"add_locallink"|"add_note"|"add_outline"|"add_pdflink"|"add_thumbnail"|"add_weblink"|"arc"|"arcn"|"attach_file"|"begin_page"|"begin_pattern"|"begin_template"|"circle"|"clip"|"close"|"close_image"|"close_pdi"|"close_pdi_page"|"closepath"|"closepath_fill_stroke"|"closepath_stroke"|"concat"|"continue_text"|"curveto"|"delete"|"end_page"|"end_pattern"|"end_template"|"endpath"|"fill"|"fill_stroke"|"findfont"|"fit_pdi_page"|"get_buffer"|"get_font"|"get_fontname"|"get_fontsize"|"get_image_height"|"get_image_width"|"get_majorversion"|"get_minorversion"|"get_parameter"|"get_pdi_parameter"|"get_pdi_value"|"get_value"|"initgraphics"|"lineto"|"load_font"|"makespotcolor"|"moveto"|"new"|"open"|"open_ccitt"|"open_file"|"open_gif"|"open_image"|"open_image_file"|"open_jpeg"|"open_memory_image"|"open_pdi"|"open_pdi_page"|"open_png"|"open_tiff"|"place_image"|"place_pdi_page"|"rect"|"restore"|"rotate"|"save"|"scale"|"set_border_color"|"set_border_dash"|"set_border_style"|"set_char_spacing"|"set_duration"|"set_font"|"set_horiz_scaling"|"set_info"|"set_info_author"|"set_info_creator"|"set_info_keywords"|"set_info_subject"|"set_info_title"|"set_leading"|"set_parameter"|"set_text_matrix"|"set_text_pos"|"set_text_rendering"|"set_text_rise"|"set_value"|"set_word_spacing"|"setcolor"|"setdash"|"setflat"|"setfont"|"setgray"|"setgray_fill"|"setgray_stroke"|"setlinecap"|"setlinejoin"|"setlinewidth"|"setmatrix"|"setmiterlimit"|"setpolydash"|"setrgbcolor"|"setrgbcolor_fill"|"setrgbcolor_stroke"|"show"|"show_boxed"|"show_xy"|"skew"|"stringwidth"|"stroke"|"translate")) | "pfpro_cleanup" | "pfpro_init" | "pfpro_process" | "pfpro_process_raw" | "pfpro_version" | "pfsockopen" | ("pg_"("affected_rows"|"cancel_query"|"client_encoding"|"close"|"connect"|"connection_busy"|"connection_reset"|"connection_status"|"convert"|"copy_from"|"copy_to"|"dbname"|"delete"|"end_copy"|"escape_bytea"|"escape_string"|"fetch_all"|"fetch_array"|"fetch_assoc"|"fetch_object"|"fetch_result"|"fetch_row"|"field_is_null"|"field_name"|"field_num"|"field_prtlen"|"field_size"|"field_type"|"free_result"|"get_notify"|"get_pid"|"get_result"|"host"|"insert"|"last_error"|"last_notice"|"last_oid"|"lo_close"|"lo_create"|"lo_export"|"lo_import"|"lo_open"|"lo_read"|"lo_read_all"|"lo_seek"|"lo_tell"|"lo_unlink"|"lo_write"|"meta_data"|"num_fields"|"num_rows"|"options"|"parameter_status"|"pconnect"|"ping"|"port"|"put_line"|"query"|"result_error"|"result_seek"|"result_status"|"select"|"send_query"|"set_client_encoding"|"trace"|"tty"|"unescape_bytea"|"untrace"|"update"|"version")) | "php_check_syntax" | "php_ini_scanned_files" | "php_logo_guid" | "php_sapi_name" | "php_strip_whitespace" | "php_uname" | "phpcredits" | "phpinfo" | "phpversion" | "pi" | "png2wbmp" | "popen" | "pos" | ("posix_"("ctermid"|"get_last_error"|"getcwd"|"getegid"|"geteuid"|"getgid"|"getgrgid"|"getgrnam"|"getgroups"|"getlogin"|"getpgid"|"getpgrp"|"getpid"|"getppid"|"getpwnam"|"getpwuid"|"getrlimit"|"getsid"|"getuid"|"isatty"|"kill"|"mkfifo"|"setegid"|"seteuid"|"setgid"|"setpgid"|"setsid"|"setuid"|"strerror"|"times"|"ttyname"|"uname")) | "pow" | "prefix" | "preg_grep" | "preg_match" | "preg_match_all" | "preg_quote" | "preg_replace" | "preg_replace_callback" | "preg_split" | "prepare" | "prev" | "previous_sibling" | "print_r" | ("printer_"("abort"|"close"|"create_brush"|"create_dc"|"create_font"|"create_pen"|"delete_brush"|"delete_dc"|"delete_font"|"delete_pen"|"draw_bmp"|"draw_chord"|"draw_elipse"|"draw_line"|"draw_pie"|"draw_rectangle"|"draw_roundrect"|"draw_text"|"end_doc"|"end_page"|"get_option"|"list"|"logical_fontheight"|"open"|"select_brush"|"select_font"|"select_pen"|"set_option"|"start_doc"|"start_page"|"write")) | "printf" | "proc_close" | "proc_get_status" | "proc_nice" | "proc_open" | "proc_terminate" | "process" | "public_id" | "putenv" | "qdom_error" | "qdom_tree" | "query" | "quoted_printable_decode" | "quotemeta" | "rad2deg" | "rand" | "range" | "rar_close" | "rar_entry_get" | "rar_list" | "rar_open" | "rawurldecode" | "rawurlencode" | "read" | "read_exif_data" | "readdir" | "readfile" | "readgzfile" | "readline" | ("readline_"("add_history"|"callback_handler_install"|"callback_handler_remove"|"callback_read_char"|"clear_history"|"completion_function"|"info"|"list_history"|"on_new_line"|"read_history"|"redisplay"|"write_history")) | "readlink" | "realpath" | "reason" | "recode" | "recode_file" | "recode_string" | "register_shutdown_function" | "register_tick_function" | "registernamespace" | "relaxngvalidate" | "relaxngvalidatesource" | "remove" | "remove_attribute" | "remove_child" | "removeattribute" | "removeattributenode" | "removeattributens" | "removechild" | "rename" | "rename_function" | "replace" | "replace_child" | "replace_node" | "replacechild" | "replacedata" | "reset" | "restore_error_handler" | "restore_exception_handler" | "restore_include_path" | "result_dump_file" | "result_dump_mem" | "rewind" | "rewinddir" | "rmdir" | "rollback" | "rotate" | "rotateto" | "round" | "rowcount" | "rsort" | "rtrim" | "save" | "savehtml" | "savehtmlfile" | "savexml" | "scale" | "scaleto" | "scandir" | "schemavalidate" | "schemavalidatesource" | "seek" | "sem_acquire" | "sem_get" | "sem_release" | "sem_remove" | "serialize" | ("sesam_"("affected_rows"|"commit"|"connect"|"diagnostic"|"disconnect"|"errormsg"|"execimm"|"fetch_array"|"fetch_result"|"fetch_row"|"field_array"|"field_name"|"free_result"|"num_fields"|"query"|"rollback"|"seek_row"|"sesam_settransaction")) | ("session_"("cache_expire"|"cache_limiter"|"commit"|"decode"|"destroy"|"encode"|"get_cookie_params"|"id"|"is_registered"|"module_name"|"name"|"regenerate_id"|"register"|"save_path"|"set_cookie_params"|"set_save_handler"|"start"|"unregister"|"unset"|"write_close")) | "set" | ("set"("_attribute"|"_content"|"_error_handler"|"_exception_handler"|"_file_buffer"|"_include_path"|"_magic_quotes_runtime"|"_name"|"_namespace"|"_time_limit"|"action"|"attribute"|"attributenode"|"attributenodens"|"attributens"|"background"|"bounds"|"buffering"|"class"|"color"|"commitedversion"|"cookie"|"depth"|"dimension"|"down"|"font"|"frames"|"height"|"hit"|"indentation"|"leftfill"|"leftmargin"|"line"|"linespacing"|"locale"|"margins"|"name"|"over"|"persistence"|"rate"|"ratio"|"rawcookie"|"rightfill"|"rightmargin"|"spacing"|"type"|"up")) | "sha1" | "sha1_file" | "shell_exec" | "shm_attach" | "shm_detach" | "shm_get_var" | "shm_put_var" | "shm_remove" | "shm_remove_var" | "shmop_close" | "shmop_delete" | "shmop_open" | "shmop_read" | "shmop_size" | "shmop_write" | "show_source" | "shuffle" | "similar_text" | "simplexml_import_dom" | "simplexml_load_file" | "simplexml_load_string" | "sin" | "sinh" | "size" | "sizeof" | "skewx" | "skewxto" | "skewy" | "skewyto" | "sleep" | ("socket_"("accept"|"bind"|"clear_error"|"close"|"connect"|"create"|"create_listen"|"create_pair"|"get_option"|"get_status"|"getpeername"|"getsockname"|"last_error"|"listen"|"read"|"recv"|"recvfrom"|"select"|"send"|"sendto"|"set_block"|"set_blocking"|"set_nonblock"|"set_option"|"set_timeout"|"shutdown"|"strerror"|"write")) | "sort" | "soundex" | "specified" | "spl_classes" | "split" | "spliti" | "splittext" | "sprintf" | "sql_regcase" | "sqrt" | "srand" | "srcanchors" | "srcsofdst" | "sscanf" | "stat" | ("str_"("ireplace"|"pad"|"repeat"|"replace"|"rot13"|"shuffle"|"split"|"word_count")) | "strcasecmp" | "strchr" | "strcmp" | "strcoll" | "strcspn" | ("stream_"("context_create"|"context_get_default"|"context_get_options"|"context_set_option"|"context_set_params"|"copy_to_stream"|"filter_append"|"filter_prepend"|"filter_register"|"filter_remove"|"get_contents"|"get_filters"|"get_line"|"get_meta_data"|"get_transports"|"get_wrappers"|"register_wrapper"|"select"|"set_blocking"|"set_timeout"|"set_write_buffer"|"socket_accept"|"socket_client"|"socket_enable_crypto"|"socket_get_name"|"socket_recvfrom"|"socket_sendto"|"socket_server"|"wrapper_register"|"wrapper_restore"|"wrapper_unregister")) | ("str"("eammp3"|"ftime"|"ip_tags"|"ipcslashes"|"ipos"|"ipslashes"|"istr"|"len"|"natcasecmp"|"natcmp"|"ncasecmp"|"ncmp"|"pbrk"|"pos"|"ptime"|"rchr"|"rev"|"ripos"|"rpos"|"spn"|"str"|"tok"|"tolower"|"totime"|"toupper"|"tr"|"val")) | "substr" | "substr_compare" | "substr_count" | "substr_replace" | "substringdata" | ("swf_"("actiongeturl"|"actiongotoframe"|"actiongotolabel"|"actionnextframe"|"actionplay"|"actionprevframe"|"actionsettarget"|"actionstop"|"actiontogglequality"|"actionwaitforframe"|"addbuttonrecord"|"addcolor"|"closefile"|"definebitmap"|"definefont"|"defineline"|"definepoly"|"definerect"|"definetext"|"endbutton"|"enddoaction"|"endshape"|"endsymbol"|"fontsize"|"fontslant"|"fonttracking"|"getbitmapinfo"|"getfontinfo"|"getframe"|"labelframe"|"lookat"|"modifyobject"|"mulcolor"|"nextid"|"oncondition"|"openfile"|"ortho"|"ortho2"|"perspective"|"placeobject"|"polarview"|"popmatrix"|"posround"|"pushmatrix"|"removeobject"|"rotate"|"scale"|"setfont"|"setframe"|"shapearc"|"shapecurveto"|"shapecurveto3"|"shapefillbitmapclip"|"shapefillbitmaptile"|"shapefilloff"|"shapefillsolid"|"shapelinesolid"|"shapelineto"|"shapemoveto"|"showframe"|"startbutton"|"startdoaction"|"startshape"|"startsymbol"|"textwidth"|"translate"|"viewport")) | "swfbutton_keypress" | "symlink" | "syslog" | "system" | "system_id" | "tagname" | "tan" | "tanh" | "target" | "tcpwrap_check" | "tell" | "tempnam" | "textdomain" | ("tidy_"("access_count"|"clean_repair"|"config_count"|"diagnose"|"error_count"|"get_body"|"get_config"|"get_error_buffer"|"get_head"|"get_html"|"get_html_ver"|"get_output"|"get_release"|"get_root"|"get_status"|"getopt"|"is_xhtml"|"is_xml"|"load_config"|"parse_file"|"parse_string"|"repair_file"|"repair_string"|"reset_config"|"save_config"|"set_encoding"|"setopt"|"warning_count")) | "time" | "time_nanosleep" | "title" | "tmpfile" | "token_get_all" | "token_name" | "touch" | "trigger_error" | "trim" | "truncate" | "type" | "uasort" | "ucfirst" | "ucwords" | "uksort" | "umask" | "uniqid" | "unixtojd" | "unlink" | "unlink_node" | "unlock" | "unpack" | "unregister_tick_function" | "unserialize" | "urldecode" | "urlencode" | "user" | "user_error" | "userlist" | "usleep" | "usort" | "utf8_"("decode"|"encode") | "valid" | "validate" | "value" | "values" | "var_"("dump"|"export") | ("variant_"("abs"|"add"|"and"|"cast"|"cat"|"cmp"|"date_from_timestamp"|"date_to_timestamp"|"div"|"eqv"|"fix"|"get_type"|"idiv"|"imp"|"int"|"mod"|"mul"|"neg"|"not"|"or"|"pow"|"round"|"set"|"set_type"|"sub"|"xor")) | "version_compare" | "vfprintf" | "virtual" | ("vpopmail_"("add_alias_domain"|"add_alias_domain_ex"|"add_domain"|"add_domain_ex"|"add_user"|"alias_add"|"alias_del"|"alias_del_domain"|"alias_get"|"alias_get_all"|"auth_user"|"del_domain"|"del_domain_ex"|"del_user"|"error"|"passwd"|"set_user_quota")) | "vprintf" | "vsprintf" | ("w32api_"("deftype"|"init_dtype"|"invoke_function"|"register_function"|"set_call_method")) | "wddx_add_vars" | "wddx_deserialize" | "wddx_packet_end" | "wddx_packet_start" | "wddx_serialize_value" | "wddx_serialize_vars" | "wordwrap" | "write" | "writetemporary" | "xattr_get" | "xattr_list" | "xattr_remove" | "xattr_set" | "xattr_supported" | "xinclude" | ("xml"("_error_string"|"_get_current_byte_index"|"_get_current_column_number"|"_get_current_line_number"|"_get_error_code"|"_parse"|"_parse_into_struct"|"_parser_create"|"_parser_create_ns"|"_parser_free"|"_parser_get_option"|"_parser_set_option"|"_set_character_data_handler"|"_set_default_handler"|"_set_element_handler"|"_set_end_namespace_decl_handler"|"_set_external_entity_ref_handler"|"_set_notation_decl_handler"|"_set_object"|"_set_processing_instruction_handler"|"_set_start_namespace_decl_handler"|"_set_unparsed_entity_decl_handler"|"rpc_decode"|"rpc_decode_request"|"rpc_encode"|"rpc_encode_request"|"rpc_get_type"|"rpc_is_fault"|"rpc_parse_method_descriptions"|"rpc_server_add_introspection_data"|"rpc_server_call_method"|"rpc_server_create"|"rpc_server_destroy"|"rpc_server_register_introspection_callback"|"rpc_server_register_method"|"rpc_set_type")) | "xpath" | "xpath_eval" | "xpath_eval_expression" | "xpath_new_context" | "xptr_eval" | "xptr_new_context" | ("xsl_xsltprocessor_"("get_parameter"|"has_exslt_support"|"import_stylesheet"|"register_php_functions"|"remove_parameter"|"set_parameter"|"transform_to_doc"|"transform_to_uri"|"transform_to_xml"|"xslt_backend_info")) | ("xslt_"("backend_name"|"backend_version"|"create"|"errno"|"error"|"free"|"getopt"|"process"|"set_base"|"set_encoding"|"set_error_handler"|"set_log"|"set_object"|"set_sax_handler"|"set_sax_handlers"|"set_scheme_handler"|"set_scheme_handlers"|"setopt")) | ("yp_"("all"|"cat"|"err_string"|"errno"|"first"|"get_default_domain"|"master"|"match"|"next"|"yp_order")) | "zend_logo_guid" | "zend_version" | ("zip_"("close"|"entry_close"|"entry_compressedsize"|"entry_compressionmethod"|"entry_filesize"|"entry_name"|"entry_open"|"entry_read"|"open"|"read")) | "zlib_get_coding_type" | /* mysql functions */ ("mysql_"("affected_rows"|"client_encoding"|"close"|"connect"|"create_db"|"data_seek"|"db_"("name"|"query")|"drop_db"|"errno"|"error"|"escape_string"|"fetch_"("array"|"assoc"|"field"|"lengths"|"object"|"row")|"field_"("flags"|"len"|"name"|"seek"|"table"|"type")|"free_result"|"get_"("client_info"|"host_info"|"proto_info"|"server_info")|"info"|"insert_id"|"list_"("dbs"|"fields"|"processes"|"tables")|"num_"("fields"|"rows")|"pconnect"|"ping"|"query"|"real_escape_string"|"result"|"select_db"|"set_charset"|"stat"|"tablename"|"thread_id"|"unbuffered_query")) | /* Function aliases */ "apache_request_headers" | "apache_response_headers" | "attr_get" | "attr_set" | "autocommit" | "bind_param" | "bind_result" | "bzclose" | "bzflush" | "bzwrite" | "change_user" | "character_set_name" | "checkdnsrr" | "chop" | "client_encoding" | "close" | "commit" | "connect" | "data_seek" | "debug" | "disable_reads_from_master" | "disable_rpl_parse" | "diskfreespace" | "doubleval" | "dump_debug_info" | "enable_reads_from_master" | "enable_rpl_parse" | "escape_string" | "execute" | "fbsql" | "fbsql_tablename" | "fetch" | "fetch_array" | "fetch_assoc" | "fetch_field" | "fetch_field_direct" | "fetch_fields" | "fetch_object" | "fetch_row" | "field_count" | "field_seek" | "fputs" | "free" | "free_result" | "ftp_quit" | "get_client_info" | "get_required_files" | "get_server_info" | "getallheaders" | "getmxrr" | "gmp_div" | ("gz"("close"|"eof"|"getc"|"gets"|"getss"|"passthru"|"puts"|"read"|"rewind"|"seek"|"tell"|"gzwrite")) | "imap_create" | "imap_fetchtext" | "imap_header" | "imap_listmailbox" | "imap_listsubscribed" | "imap_rename" | "ini_alter" | "init" | "is_double" | "is_int" | "is_integer" | "is_real" | "is_writeable" | "join" | "key_exists" | "kill" | "ldap_close" | "ldap_modify" | "magic_quotes_runtime" | "master_query" | "ming_keypress" | "ming_setcubicthreshold" | "ming_setscale" | "ming_useconstants" | "ming_useswfversion" | "more_results" | "next_result" | "num_rows" | ("oci"("_free_cursor"|"bindbyname"|"cancel"|"collappend"|"collassignelem"|"collgetelem"|"collmax"|"collsize"|"colltrim"|"columnisnull"|"columnname"|"columnprecision"|"columnscale"|"columnsize"|"columntype"|"columntyperaw"|"commit"|"definebyname"|"error"|"execute"|"fetch"|"fetchstatement"|"freecollection"|"freecursor"|"freedesc"|"freestatement"|"internaldebug"|"loadlob"|"logoff"|"logon"|"newcollection"|"newcursor"|"newdescriptor"|"nlogon"|"numcols"|"parse"|"passwordchange"|"plogon"|"result"|"rollback"|"rowcount"|"savelob"|"savelobfile"|"serverversion"|"setprefetch"|"statementtype"|"writelobtofile")) | "odbc_do" | "odbc_field_precision" | "openssl_free_key" | "openssl_get_privatekey" | "openssl_get_publickey" | "options" | ("pg_"("clientencoding"|"cmdtuples"|"errormessage"|"exec"|"fieldisnull"|"fieldname"|"fieldnum"|"fieldprtlen"|"fieldsize"|"fieldtype"|"freeresult"|"getlastoid"|"loclose"|"locreate"|"loexport"|"loimport"|"loopen"|"loread"|"loreadall"|"lounlink"|"lowrite"|"numfields"|"numrows"|"result"|"setclientencoding")) | "ping" | "pos" | "posix_errno" | "prepare" | "query" | "read_exif_data" | "real_connect" | "real_escape_string" | "real_query" | "recode" | "reset" | "result_metadata" | "rollback" | "rpl_parse_enabled" | "rpl_probe" | "rpl_query_type" | "select_db" | "send_long_data" | "session_commit" | "set_file_buffer" | "set_local_infile_default" | "set_local_infile_handler" | "set_opt" | "show_source" | "sizeof" | "slave_query" | "snmpwalkoid" | "socket_get_status" | "socket_getopt" | "socket_set_blocking" | "socket_set_timeout" | "socket_setopt" | "sqlite_fetch_string" | "sqlite_has_more" | "ssl_set" | "stat" | "stmt" | "stmt_init" | "store_result" | "strchr" | "stream_register_wrapper" | "thread_safe" | "use_result" | "user_error" | ("velocis_"("autocommit"|"close"|"commit"|"connect"|"exec"|"fetch"|"fieldname"|"fieldnum"|"freeresult"|"off_autocommit"|"result"|"rollback")) | "virtual" { addToken(Token.FUNCTION); } {PHP_BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } {PHP_Null} { addToken(Token.RESERVED_WORD); } {PHP_Variable} { addToken(Token.VARIABLE); } {LineTerminator} { addPhpEndToken(INTERNAL_IN_PHP); return firstToken; } {JS_Identifier} { addToken(Token.IDENTIFIER); } {Whitespace} { addToken(Token.WHITESPACE); } /* String/Character literals. */ [\"] { start = zzMarkedPos-1; yybegin(PHP_STRING); } [\'] { start = zzMarkedPos-1; yybegin(PHP_CHAR); } /* Comment literals. */ "/**/" { addToken(Token.COMMENT_MULTILINE); } {JS_MLCBegin} { start = zzMarkedPos-2; yybegin(PHP_MLC); } {PHP_LineCommentBegin}.* { addToken(Token.COMMENT_EOL); addPhpEndToken(INTERNAL_IN_PHP); return firstToken; } /* Separators. */ {JS_Separator} { addToken(Token.SEPARATOR); } {JS_Separator2} { addToken(Token.IDENTIFIER); } /* Operators. */ {JS_Operator} { addToken(Token.OPERATOR); } /* Numbers */ {JS_IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {JS_HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } {JS_FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } {JS_ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } {JS_ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } /* Ended with a line not in a string or comment. */ <> { addPhpEndToken(INTERNAL_IN_PHP); return firstToken; } /* Catch any other (unhandled) characters and assume they are okay. */ . { addToken(Token.IDENTIFIER); } } { // PHP MLC's. This state is essentially Java's MLC state. [^hwf\n\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } [hwf] {} \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addPhpEndToken(INTERNAL_IN_PHP_MLC); return firstToken; } {JS_MLCEnd} { yybegin(PHP); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } \* {} <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addPhpEndToken(INTERNAL_IN_PHP_MLC); return firstToken; } } { [^\n\\\$\"]+ {} \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addPhpEndToken(INTERNAL_IN_PHP_STRING); return firstToken; } \\.? { /* Skip escaped chars. */ } {PHP_Variable} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } "$" {} \" { yybegin(PHP); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addPhpEndToken(INTERNAL_IN_PHP_STRING); return firstToken; } } { [^\n\\\']+ {} \\.? { /* Skip escaped single quotes only, but this should still work. */ } \n { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addPhpEndToken(INTERNAL_IN_PHP_CHAR); return firstToken; } \' { yybegin(PHP); addToken(start,zzStartRead, Token.LITERAL_CHAR); } <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addPhpEndToken(INTERNAL_IN_PHP_CHAR); return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PHPTokenMaker.java000066400000000000000000052114351257417003700312160ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 5/7/14 11:03 PM */ /* * 01/28/2009 * * PHPTokenMaker.java - Generates tokens for PHP syntax highlighting. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for PHP files. * * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated PHPTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.9 */ public class PHPTokenMaker extends AbstractMarkupTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int PHP = 18; public static final int INATTR_SINGLE_SCRIPT = 9; public static final int JS_CHAR = 14; public static final int CSS_STRING = 25; public static final int JS_MLC = 16; public static final int CSS_CHAR_LITERAL = 26; public static final int INTAG_SCRIPT = 7; public static final int CSS_PROPERTY = 23; public static final int CSS_C_STYLE_COMMENT = 27; public static final int PHP_MLC = 19; public static final int CSS = 22; public static final int CSS_VALUE = 24; public static final int COMMENT = 1; public static final int INATTR_DOUBLE_SCRIPT = 8; public static final int PHP_STRING = 20; public static final int JAVASCRIPT = 13; public static final int INTAG = 3; public static final int INTAG_CHECK_TAG_NAME = 4; public static final int INATTR_SINGLE_STYLE = 12; public static final int DTD = 2; public static final int PHP_CHAR = 21; public static final int JS_EOL_COMMENT = 17; public static final int INATTR_DOUBLE_STYLE = 11; public static final int INATTR_SINGLE = 6; public static final int YYINITIAL = 0; public static final int INATTR_DOUBLE = 5; public static final int JS_STRING = 15; public static final int INTAG_STYLE = 10; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\4\1\2\1\0\1\1\1\33\22\0\1\4\1\51\1\7"+ "\1\34\1\36\1\50\1\5\1\113\1\110\1\107\1\37\1\42\1\45"+ "\1\31\1\43\1\10\1\25\1\136\1\131\1\135\1\133\1\124\1\132"+ "\1\27\1\137\1\24\1\53\1\6\1\3\1\46\1\17\1\52\1\106"+ "\1\73\1\26\1\12\1\41\1\22\1\72\1\117\1\123\1\14\1\125"+ "\1\120\1\21\1\116\1\75\1\115\1\15\1\121\1\13\1\11\1\16"+ "\1\71\1\122\1\23\1\40\1\20\1\23\1\112\1\35\1\112\1\47"+ "\1\30\1\0\1\64\1\105\1\77\1\100\1\62\1\63\1\57\1\70"+ "\1\56\1\134\1\103\1\65\1\102\1\74\1\76\1\67\1\130\1\61"+ "\1\66\1\60\1\32\1\104\1\114\1\111\1\101\1\126\1\127\1\55"+ "\1\44\1\54\uff81\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\5\0\2\1\1\0\2\1\1\0\2\1\13\0\1\2"+ "\3\0\2\2\1\3\1\4\1\5\1\6\1\1\1\7"+ "\5\1\1\10\1\11\3\12\1\13\1\14\1\15\1\16"+ "\1\17\1\20\1\21\1\22\2\20\2\22\3\20\2\22"+ "\2\20\1\22\6\20\1\22\1\1\1\23\1\24\1\1"+ "\1\25\1\14\1\26\1\27\1\30\1\31\1\32\1\33"+ "\1\34\1\35\1\36\2\16\1\2\1\37\1\16\2\2"+ "\1\16\2\40\1\16\1\2\1\35\2\16\1\2\1\41"+ "\1\35\20\2\1\42\1\2\1\1\1\43\1\23\1\44"+ "\1\45\1\1\1\46\1\23\1\47\1\50\1\1\1\51"+ "\6\1\1\52\4\1\1\53\1\16\1\54\1\16\3\2"+ "\1\55\1\2\1\16\27\2\1\35\1\2\1\56\4\2"+ "\1\1\1\57\2\1\1\60\1\61\1\62\2\1\1\63"+ "\1\64\1\65\1\66\1\67\1\66\1\70\1\66\1\71"+ "\1\66\1\72\1\66\1\73\1\74\1\75\1\76\2\75"+ "\1\77\1\75\1\100\1\101\1\102\1\103\1\102\1\104"+ "\2\2\1\40\1\2\2\102\1\105\1\106\1\107\1\110"+ "\1\111\1\112\1\113\1\1\1\4\2\114\1\115\1\116"+ "\1\6\5\0\1\117\32\20\2\22\2\20\1\22\44\20"+ "\1\120\1\121\2\0\1\117\1\0\1\122\1\0\1\123"+ "\1\16\1\35\1\2\1\16\1\124\1\40\1\124\2\125"+ "\1\124\1\126\1\124\1\2\1\77\1\2\1\77\45\2"+ "\1\77\6\2\1\127\1\130\1\131\1\132\1\133\1\0"+ "\1\134\11\0\1\135\11\2\1\136\1\137\100\2\1\77"+ "\37\2\1\140\31\2\1\77\27\2\1\140\2\2\1\77"+ "\33\2\1\141\25\2\1\142\1\62\1\143\1\64\1\0"+ "\1\144\1\136\15\0\1\145\1\40\5\0\1\40\1\0"+ "\1\146\1\147\2\114\2\0\1\150\4\0\1\12\14\20"+ "\1\22\63\20\3\0\1\151\1\0\1\35\1\2\1\125"+ "\1\0\2\126\3\2\1\71\25\2\1\152\33\2\16\0"+ "\13\2\1\77\53\2\1\140\32\2\1\140\44\2\1\140"+ "\5\2\1\140\30\2\1\77\22\2\2\140\5\2\1\140"+ "\20\2\1\140\51\2\1\140\64\2\1\140\6\2\1\140"+ "\4\2\1\140\25\2\1\140\21\2\1\140\3\2\1\140"+ "\4\2\1\77\16\2\1\35\30\2\25\0\2\114\1\153"+ "\3\0\1\154\1\12\22\20\1\22\12\20\1\22\5\20"+ "\3\0\1\155\1\35\7\2\1\156\4\2\1\157\5\2"+ "\1\71\17\2\2\0\1\1\4\0\1\160\3\0\1\161"+ "\15\2\1\140\16\2\1\140\72\2\1\140\15\2\1\140"+ "\15\2\1\140\21\2\1\140\1\2\1\77\12\2\1\162"+ "\3\2\1\140\6\2\1\140\4\2\1\140\15\2\1\140"+ "\15\2\1\140\4\2\1\140\11\2\1\140\11\2\1\140"+ "\2\2\1\140\105\2\1\140\52\2\1\140\1\2\1\140"+ "\112\2\2\140\42\2\1\140\44\2\1\35\30\2\17\0"+ "\1\77\4\0\2\114\1\116\2\0\1\117\15\20\1\22"+ "\6\20\1\120\1\0\1\117\1\35\5\2\1\77\3\2"+ "\1\77\12\2\1\127\1\133\6\0\63\2\1\140\153\2"+ "\1\140\23\2\2\140\16\2\1\140\4\2\1\140\5\2"+ "\1\77\131\2\1\140\12\2\1\140\60\2\1\77\217\2"+ "\1\77\1\140\1\77\5\2\1\140\1\77\22\2\1\140"+ "\37\2\1\140\36\2\1\140\10\2\1\140\1\2\1\35"+ "\5\2\1\140\5\2\1\140\21\2\16\0\1\114\1\163"+ "\12\20\1\0\1\35\13\2\2\0\14\2\1\140\3\2"+ "\1\140\31\2\1\140\43\2\1\140\134\2\4\140\53\2"+ "\2\140\2\2\1\140\41\2\1\140\72\2\1\140\35\2"+ "\1\77\52\2\1\77\52\2\2\140\37\2\1\140\102\2"+ "\1\140\53\2\1\140\1\2\1\140\7\2\1\140\106\2"+ "\1\35\42\2\12\0\1\164\3\20\1\0\6\2\2\0"+ "\25\2\1\140\11\2\1\77\7\2\1\140\143\2\1\140"+ "\1\2\1\140\11\2\1\140\2\2\1\140\6\2\1\140"+ "\1\2\1\140\33\2\1\140\27\2\3\140\133\2\1\140"+ "\172\2\1\140\240\2\1\140\116\2\1\140\25\2\1\35"+ "\37\2\6\0\1\20\1\0\2\2\2\0\161\2\1\140"+ "\37\2\1\140\32\2\1\140\24\2\1\77\47\2\1\140"+ "\46\2\1\140\161\2\1\140\16\2\1\140\1\2\1\140"+ "\31\2\1\140\51\2\1\140\311\2\1\165\4\0\1\20"+ "\1\166\1\2\1\167\1\170\31\2\1\140\22\2\1\140"+ "\1\2\1\140\13\2\1\140\12\2\1\140\1\2\1\140"+ "\37\2\1\140\15\2\1\140\53\2\1\140\155\2\1\140"+ "\13\2\1\140\116\2\1\140\47\2\2\140\14\2\1\140"+ "\217\2\1\140\42\2\1\140\23\2\3\0\214\2\1\140"+ "\2\2\1\140\66\2\1\140\51\2\1\140\36\2\1\140"+ "\74\2\1\140\15\2\1\140\244\2\1\140\34\2\3\0"+ "\1\171\26\2\1\140\14\2\1\140\10\2\1\140\101\2"+ "\1\140\3\2\1\140\71\2\1\140\114\2\1\140\32\2"+ "\1\140\204\2\1\140\127\2\1\140\22\2\1\140\2\2"+ "\1\140\160\2\1\140\15\2\1\140\10\2\1\140\10\2"+ "\1\140\5\2\2\140\2\2\1\140\112\2\1\140\210\2"+ "\1\140\2\2\1\140\104\2\1\140\23\2\1\140\24\2"+ "\1\140\30\2\1\140\40\2\1\140\72\2\1\140\30\2"+ "\2\140\105\2\1\140\65\2\1\140\3\2\1\140\1\2"+ "\1\140\14\2\1\140\17\2\1\140\54\2\1\140\22\2"+ "\1\140\7\2\1\140\5\2\1\140\167\2\1\140\70\2"+ "\1\140\4\2\1\140\113\2\1\140\1\2\1\140\1\2"+ "\1\140\13\2\1\140\125\2\1\140\37\2\1\140\22\2"+ "\1\140\45\2\1\140\27\2\1\140\154\2\1\140\171\2"+ "\1\140\32\2"; private static int [] zzUnpackAction() { int [] result = new int[7962]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\140\0\300\0\u0120\0\u0180\0\u01e0\0\u0240\0\u02a0"+ "\0\u0300\0\u0360\0\u03c0\0\u0420\0\u0480\0\u04e0\0\u0540\0\u05a0"+ "\0\u0600\0\u0660\0\u06c0\0\u0720\0\u0780\0\u07e0\0\u0840\0\u08a0"+ "\0\u0900\0\u0960\0\u09c0\0\u0a20\0\u0a80\0\u0ae0\0\u0b40\0\u0ba0"+ "\0\u0c00\0\u0c60\0\u0cc0\0\u0b40\0\u0d20\0\u0d80\0\u0de0\0\u0e40"+ "\0\u0ea0\0\u0b40\0\u0b40\0\u0f00\0\u0f60\0\u0fc0\0\u0b40\0\u1020"+ "\0\u0b40\0\u0b40\0\u0b40\0\u1080\0\u0b40\0\u10e0\0\u1140\0\u11a0"+ "\0\u1200\0\u1260\0\u12c0\0\u1320\0\u1380\0\u13e0\0\u1440\0\u14a0"+ "\0\u1500\0\u1560\0\u15c0\0\u1620\0\u1680\0\u16e0\0\u1740\0\u17a0"+ "\0\u1080\0\u1800\0\u1860\0\u0b40\0\u18c0\0\u0b40\0\u1920\0\u0b40"+ "\0\u0b40\0\u0b40\0\u0b40\0\u0b40\0\u0b40\0\u0b40\0\u1980\0\u0b40"+ "\0\u19e0\0\u1a40\0\u0b40\0\u0b40\0\u1aa0\0\u1b00\0\u1b60\0\u1bc0"+ "\0\u1c20\0\u1c80\0\u1ce0\0\u1d40\0\u0b40\0\u1da0\0\u1e00\0\u1e60"+ "\0\u0b40\0\u1ec0\0\u1f20\0\u1f80\0\u1fe0\0\u2040\0\u20a0\0\u2100"+ "\0\u2160\0\u21c0\0\u2220\0\u2280\0\u22e0\0\u2340\0\u23a0\0\u2400"+ "\0\u2460\0\u24c0\0\u0b40\0\u2520\0\u2580\0\u0b40\0\u25e0\0\u2640"+ "\0\u0b40\0\u26a0\0\u0b40\0\u2700\0\u0b40\0\u2640\0\u2760\0\u0b40"+ "\0\u27c0\0\u2820\0\u2880\0\u28e0\0\u2940\0\u29a0\0\u0b40\0\u2a00"+ "\0\u2a60\0\u2ac0\0\u2b20\0\u0b40\0\u2b80\0\u0b40\0\u2be0\0\u2c40"+ "\0\u2ca0\0\u2d00\0\u2d60\0\u2dc0\0\u2e20\0\u1ec0\0\u2e80\0\u2ee0"+ "\0\u2f40\0\u2fa0\0\u3000\0\u3060\0\u30c0\0\u3120\0\u3180\0\u31e0"+ "\0\u3240\0\u32a0\0\u3300\0\u3360\0\u33c0\0\u3420\0\u3480\0\u34e0"+ "\0\u3540\0\u35a0\0\u3600\0\u3660\0\u36c0\0\u3720\0\u0b40\0\u3780"+ "\0\u37e0\0\u3840\0\u38a0\0\u3900\0\u0b40\0\u3960\0\u39c0\0\u0b40"+ "\0\u0b40\0\u3a20\0\u3a80\0\u3ae0\0\u0b40\0\u3b40\0\u0b40\0\u0b40"+ "\0\u0b40\0\u3ba0\0\u0b40\0\u3c00\0\u3c60\0\u3cc0\0\u3d20\0\u3d80"+ "\0\u0b40\0\u0b40\0\u0b40\0\u0b40\0\u3ba0\0\u3c00\0\u3de0\0\u3e40"+ "\0\u0b40\0\u0b40\0\u0b40\0\u0b40\0\u3ba0\0\u0b40\0\u3ea0\0\u3f00"+ "\0\u3f60\0\u3fc0\0\u4020\0\u4080\0\u0b40\0\u0b40\0\u0b40\0\u0b40"+ "\0\u0b40\0\u0b40\0\u0b40\0\u40e0\0\u4140\0\u41a0\0\u4200\0\u4260"+ "\0\u42c0\0\u0b40\0\u4320\0\u4380\0\u43e0\0\u4440\0\u44a0\0\u4500"+ "\0\u4560\0\u45c0\0\u4620\0\u4680\0\u46e0\0\u4740\0\u47a0\0\u4800"+ "\0\u4860\0\u48c0\0\u4920\0\u4980\0\u49e0\0\u4a40\0\u4aa0\0\u4b00"+ "\0\u4b60\0\u4bc0\0\u4c20\0\u4c80\0\u4ce0\0\u4d40\0\u4da0\0\u4e00"+ "\0\u4e60\0\u4ec0\0\u4f20\0\u4f80\0\u4fe0\0\u5040\0\u50a0\0\u5100"+ "\0\u5160\0\u51c0\0\u5220\0\u5280\0\u52e0\0\u5340\0\u53a0\0\u5400"+ "\0\u5460\0\u54c0\0\u5520\0\u5580\0\u55e0\0\u5640\0\u56a0\0\u5700"+ "\0\u5760\0\u57c0\0\u5820\0\u5880\0\u58e0\0\u5940\0\u59a0\0\u5a00"+ "\0\u5a60\0\u5ac0\0\u5b20\0\u5b80\0\u5be0\0\u5c40\0\u5ca0\0\u5d00"+ "\0\u5d60\0\u5dc0\0\u5e20\0\u5e80\0\u0b40\0\u1da0\0\u5ee0\0\u5f40"+ "\0\u5fa0\0\u0b40\0\u6000\0\u6060\0\u5fa0\0\u60c0\0\u6120\0\u6180"+ "\0\u61e0\0\u61e0\0\u6240\0\u61e0\0\u62a0\0\u6300\0\u6360\0\u63c0"+ "\0\u6420\0\u1b00\0\u6480\0\u64e0\0\u6540\0\u65a0\0\u6600\0\u6660"+ "\0\u66c0\0\u6720\0\u6780\0\u67e0\0\u6840\0\u68a0\0\u6900\0\u6960"+ "\0\u69c0\0\u6a20\0\u6a80\0\u6ae0\0\u6b40\0\u6ba0\0\u6c00\0\u6c60"+ "\0\u6cc0\0\u6d20\0\u6d80\0\u6de0\0\u6e40\0\u6ea0\0\u6f00\0\u6f60"+ "\0\u6fc0\0\u7020\0\u7080\0\u70e0\0\u7140\0\u71a0\0\u7200\0\u7260"+ "\0\u72c0\0\u7320\0\u7380\0\u73e0\0\u7440\0\u74a0\0\u7500\0\u7560"+ "\0\u75c0\0\u0b40\0\u7620\0\u7680\0\u76e0\0\u7740\0\u0b40\0\u77a0"+ "\0\u7800\0\u7860\0\u78c0\0\u7920\0\u7980\0\u79e0\0\u7a40\0\u7aa0"+ "\0\u6060\0\u7b00\0\u7b60\0\u7bc0\0\u7c20\0\u7c80\0\u7ce0\0\u7d40"+ "\0\u7da0\0\u7e00\0\u7e60\0\u0b40\0\u7ec0\0\u7f20\0\u7f80\0\u7fe0"+ "\0\u8040\0\u80a0\0\u8100\0\u8160\0\u81c0\0\u8220\0\u8280\0\u82e0"+ "\0\u8340\0\u83a0\0\u8400\0\u8460\0\u84c0\0\u8520\0\u8580\0\u85e0"+ "\0\u8640\0\u86a0\0\u8700\0\u8760\0\u87c0\0\u8820\0\u8880\0\u88e0"+ "\0\u8940\0\u89a0\0\u8a00\0\u8a60\0\u8ac0\0\u8b20\0\u8b80\0\u8be0"+ "\0\u8c40\0\u8ca0\0\u8d00\0\u8d60\0\u8dc0\0\u8e20\0\u8e80\0\u8ee0"+ "\0\u8f40\0\u8fa0\0\u9000\0\u9060\0\u90c0\0\u9120\0\u9180\0\u91e0"+ "\0\u9240\0\u92a0\0\u9300\0\u9360\0\u93c0\0\u9420\0\u9480\0\u94e0"+ "\0\u9540\0\u95a0\0\u9600\0\u9660\0\u96c0\0\u9720\0\u9780\0\u97e0"+ "\0\u9840\0\u98a0\0\u9900\0\u9960\0\u99c0\0\u9a20\0\u9a80\0\u9ae0"+ "\0\u9b40\0\u9ba0\0\u9c00\0\u9c60\0\u9cc0\0\u9d20\0\u9d80\0\u9de0"+ "\0\u9e40\0\u9ea0\0\u9f00\0\u9f60\0\u9fc0\0\ua020\0\ua080\0\ua0e0"+ "\0\ua140\0\ua1a0\0\ua200\0\ua260\0\ua2c0\0\ua320\0\ua380\0\ua3e0"+ "\0\ua440\0\ua4a0\0\ua500\0\ua560\0\ua5c0\0\ua620\0\ua680\0\ua6e0"+ "\0\ua740\0\ua7a0\0\ua800\0\ua860\0\ua8c0\0\ua920\0\ua980\0\ua9e0"+ "\0\uaa40\0\uaaa0\0\uab00\0\uab60\0\uabc0\0\uac20\0\uac80\0\uace0"+ "\0\uad40\0\uada0\0\uae00\0\uae60\0\uaec0\0\uaf20\0\uaf80\0\uafe0"+ "\0\ub040\0\ub0a0\0\ub100\0\ub160\0\ub1c0\0\ub220\0\ub280\0\ub2e0"+ "\0\ub340\0\ub3a0\0\ub400\0\ub460\0\ub4c0\0\ub520\0\u1b00\0\ub580"+ "\0\ub5e0\0\ub640\0\ub6a0\0\ub700\0\ub760\0\ub7c0\0\ub820\0\ub880"+ "\0\ub8e0\0\ub940\0\ub9a0\0\uba00\0\uba60\0\ubac0\0\ubb20\0\ubb80"+ "\0\ubbe0\0\ubc40\0\ubca0\0\ubd00\0\ubd60\0\ubdc0\0\ube20\0\ube80"+ "\0\ubee0\0\ubf40\0\ubfa0\0\uc000\0\uc060\0\uc0c0\0\uc120\0\uc180"+ "\0\uc1e0\0\uc240\0\uc2a0\0\uc300\0\uc360\0\uc3c0\0\uc420\0\uc480"+ "\0\uc4e0\0\uc540\0\uc5a0\0\uc600\0\uc660\0\uc6c0\0\uc720\0\uc780"+ "\0\uc7e0\0\uc840\0\uc8a0\0\u0b40\0\u0b40\0\uc900\0\u0b40\0\uc960"+ "\0\u0b40\0\uc9c0\0\uca20\0\uca80\0\ucae0\0\ucb40\0\ucba0\0\ucc00"+ "\0\ucc60\0\uccc0\0\ucd20\0\ucd80\0\ucde0\0\uce40\0\ucea0\0\ucf00"+ "\0\u0b40\0\ucf60\0\ucfc0\0\ud020\0\ud080\0\ud0e0\0\u4020\0\ud140"+ "\0\u0b40\0\u4140\0\ud1a0\0\ud200\0\ud260\0\ud2c0\0\u0b40\0\ud320"+ "\0\ud380\0\ud3e0\0\ud440\0\ud4a0\0\ud500\0\ud560\0\ud5c0\0\ud620"+ "\0\ud680\0\ud6e0\0\ud740\0\ud7a0\0\ud800\0\ud860\0\ud8c0\0\ud920"+ "\0\ud980\0\ud9e0\0\uda40\0\udaa0\0\udb00\0\udb60\0\udbc0\0\udc20"+ "\0\udc80\0\udce0\0\udd40\0\udda0\0\ude00\0\ude60\0\udec0\0\udf20"+ "\0\udf80\0\udfe0\0\u4f80\0\ue040\0\ue0a0\0\ue100\0\ue160\0\ue1c0"+ "\0\ue220\0\ue280\0\ue2e0\0\ue340\0\ue3a0\0\ue400\0\ue460\0\ue4c0"+ "\0\ue520\0\ue580\0\ue5e0\0\ue640\0\ue6a0\0\ue700\0\ue760\0\u1440"+ "\0\ue7c0\0\ue820\0\ue880\0\ue8e0\0\ue940\0\ue9a0\0\uea00\0\uea60"+ "\0\ueac0\0\ueb20\0\ueb80\0\uebe0\0\uec40\0\ueca0\0\ued00\0\ued60"+ "\0\uedc0\0\uee20\0\uee80\0\ueee0\0\uef40\0\u61e0\0\uefa0\0\uf000"+ "\0\uf060\0\uf0c0\0\uf120\0\uf180\0\uf1e0\0\uf240\0\uf2a0\0\uf300"+ "\0\uf360\0\uf3c0\0\uf420\0\uf480\0\uf4e0\0\uf540\0\uf5a0\0\uf600"+ "\0\uf660\0\uf6c0\0\uf720\0\uf780\0\uf7e0\0\uf840\0\uf8a0\0\uf900"+ "\0\u1b00\0\uf960\0\uf9c0\0\ufa20\0\ufa80\0\ufae0\0\ufb40\0\ufba0"+ "\0\ufc00\0\ufc60\0\ufcc0\0\ufd20\0\ufd80\0\ufde0\0\ufe40\0\ufea0"+ "\0\uff00\0\uff60\0\uffc0\1\40\1\200\1\340\1\u0140\1\u01a0"+ "\1\u0200\1\u0260\1\u02c0\1\u0320\1\u0380\1\u03e0\1\u0440\1\u04a0"+ "\1\u0500\1\u0560\1\u05c0\1\u0620\1\u0680\1\u06e0\1\u0740\1\u07a0"+ "\1\u0800\1\u0860\1\u08c0\1\u0920\1\u0980\1\u09e0\1\u0a40\1\u0aa0"+ "\1\u0b00\1\u0b60\1\u0bc0\1\u0c20\1\u0c80\1\u0ce0\1\u0d40\1\u0da0"+ "\1\u0e00\1\u0e60\1\u0ec0\1\u0f20\1\u0f80\1\u0fe0\1\u1040\1\u10a0"+ "\1\u1100\1\u1160\1\u11c0\1\u1220\1\u1280\1\u12e0\1\u1340\1\u13a0"+ "\1\u1400\1\u1460\1\u14c0\1\u1520\1\u1580\1\u15e0\1\u1640\1\u16a0"+ "\1\u1700\1\u1760\1\u17c0\1\u1820\1\u1880\1\u18e0\1\u1940\1\u19a0"+ "\1\u1a00\1\u1a60\1\u1ac0\1\u1b20\1\u1b80\1\u1be0\1\u1c40\1\u1ca0"+ "\1\u1d00\1\u1d60\1\u1dc0\1\u1e20\1\u1e80\1\u1ee0\1\u1f40\1\u1fa0"+ "\1\u2000\1\u2060\1\u20c0\1\u2120\1\u2180\1\u21e0\1\u2240\1\u22a0"+ "\1\u2300\1\u2360\1\u23c0\1\u2420\1\u2480\1\u24e0\1\u2540\1\u25a0"+ "\1\u2600\1\u2660\1\u26c0\1\u2720\1\u2780\1\u27e0\1\u2840\1\u28a0"+ "\1\u2900\1\u2960\1\u29c0\1\u2a20\1\u2a80\1\u2ae0\1\u2b40\1\u2ba0"+ "\1\u2c00\1\u2c60\1\u2cc0\1\u2d20\1\u2d80\1\u2de0\1\u2e40\1\u2ea0"+ "\1\u2f00\1\u2f60\1\u2fc0\1\u3020\1\u3080\1\u30e0\1\u3140\1\u31a0"+ "\1\u3200\1\u3260\1\u32c0\1\u3320\1\u2780\1\u3380\1\u33e0\1\u3440"+ "\1\u34a0\1\u3500\1\u3560\1\u35c0\1\u3620\1\u3680\1\u36e0\1\u3740"+ "\1\u37a0\1\u3800\1\u3860\1\u38c0\1\u3920\1\u3980\1\u39e0\1\u3a40"+ "\1\u3aa0\1\u3b00\1\u3b60\1\u3bc0\1\u3c20\1\u3c80\1\u3ce0\1\u3d40"+ "\1\u3da0\1\u3e00\1\u3e60\1\u3ec0\1\u3f20\1\u3f80\1\u3fe0\1\u4040"+ "\1\u40a0\1\u4100\1\u4160\1\u41c0\1\u4220\1\u4280\1\u42e0\1\u4340"+ "\1\u43a0\1\u4400\1\u4460\1\u44c0\1\u4520\1\u4580\1\u45e0\1\u4640"+ "\1\u46a0\1\u4700\1\u4760\1\u47c0\0\uf900\1\u4820\1\u4880\1\u48e0"+ "\1\u4940\1\u49a0\1\u4a00\1\u4a60\1\u4ac0\1\u4b20\1\u4b80\1\u4be0"+ "\1\u4c40\1\u4ca0\1\u4d00\1\u4d60\1\u4dc0\1\u4e20\1\u4e80\1\u4ee0"+ "\1\u4f40\1\u4fa0\1\u5000\1\u5060\1\u50c0\1\u5120\1\u5180\1\u51e0"+ "\1\u5240\1\u52a0\1\u5300\1\u5360\1\u53c0\1\u5420\1\u5480\1\u54e0"+ "\1\u5540\1\u55a0\1\u5600\1\u5660\1\u56c0\1\u5720\1\u5780\1\u57e0"+ "\1\u5840\1\u58a0\1\u5900\1\u5960\1\u59c0\1\u5a20\1\u5a80\1\u5ae0"+ "\1\u5b40\1\u5ba0\1\u5c00\1\u5c60\1\u5cc0\1\u5d20\1\u5d80\1\u5de0"+ "\1\u5e40\1\u5ea0\1\u5f00\1\u5f60\1\u5fc0\1\u6020\1\u6080\1\u60e0"+ "\1\u6140\1\u61a0\1\u6200\1\u6260\1\u62c0\1\u6320\1\u6380\1\u63e0"+ "\1\u6440\1\u64a0\1\u6500\1\u6560\1\u65c0\1\u6620\1\u6680\1\u66e0"+ "\1\u6740\1\u67a0\1\u6800\1\u6860\1\u68c0\1\u6920\1\u6980\1\u69e0"+ "\1\u6a40\1\u6aa0\1\u6b00\1\u6b60\1\u6bc0\1\u6c20\1\u6c80\1\u6ce0"+ "\1\u6d40\1\u6da0\1\u6e00\1\u6e60\1\u6ec0\1\u6f20\1\u6f80\1\u6fe0"+ "\1\u7040\1\u70a0\1\u7100\1\u7160\1\u71c0\1\u7220\1\u7280\1\u72e0"+ "\1\u7340\1\u73a0\1\u7400\1\u7460\1\u74c0\1\u7520\1\u7580\1\u75e0"+ "\1\u7640\1\u76a0\1\u7700\1\u7760\1\u77c0\1\u7820\1\u26c0\1\u7880"+ "\1\u78e0\1\u7940\1\u79a0\1\u7a00\1\u7a60\1\u7ac0\1\u7b20\1\u7b80"+ "\1\u7be0\1\u7c40\1\u7ca0\1\u7d00\1\u7d60\1\u7dc0\1\u7e20\1\u7e80"+ "\1\u7ee0\1\u7f40\1\u7fa0\1\u8000\1\u8060\1\u80c0\1\u8120\1\u8180"+ "\1\u81e0\1\u8240\1\u82a0\1\u8300\1\u8360\1\u83c0\1\u8420\1\u8480"+ "\1\u84e0\1\u8540\1\u85a0\1\u8600\1\u8660\1\u86c0\1\u8720\1\u8780"+ "\1\u87e0\1\u8840\1\u88a0\1\u8900\1\u8960\1\u89c0\1\u8a20\1\u8a80"+ "\1\u8ae0\1\u8b40\1\u8ba0\1\u8c00\1\u8c60\1\u8cc0\1\u8d20\1\u8d80"+ "\1\u8de0\1\u8e40\1\u8ea0\1\u8f00\1\u8f60\1\u8fc0\1\u9020\1\u9080"+ "\1\u90e0\1\u9140\1\u91a0\1\u9200\1\u9260\1\u92c0\1\u9320\1\u9380"+ "\1\u93e0\1\u9440\1\u94a0\1\u9500\1\u9560\1\u95c0\1\u9620\1\u9680"+ "\1\u96e0\1\u9740\1\u97a0\1\u9800\1\u9860\1\u98c0\1\u9920\1\u9980"+ "\1\u99e0\1\u9a40\1\u9aa0\1\u9b00\1\u9b60\1\u9bc0\1\u9c20\1\u9c80"+ "\1\u9ce0\1\u9d40\1\u9da0\1\u9e00\1\u9e60\1\u9ec0\1\u9f20\1\u9f80"+ "\1\u9fe0\1\ua040\1\ua0a0\1\ua100\1\ua160\1\ua1c0\0\u0b40\1\ua220"+ "\1\ua280\1\ua2e0\1\ua340\1\ua3a0\1\ua400\1\ua460\1\ua4c0\1\ua520"+ "\1\ua580\1\ua5e0\1\ua640\1\ua6a0\1\ua700\1\ua760\1\ua7c0\1\ua820"+ "\1\ua880\1\ua8e0\1\ua940\1\ua9a0\1\uaa00\1\uaa60\1\uaac0\1\uab20"+ "\1\uab80\1\uabe0\1\uac40\1\uaca0\1\uad00\1\uad60\1\uadc0\1\uae20"+ "\1\uae80\0\udec0\0\u50a0\1\uaee0\1\uaf40\1\uafa0\1\ub000\1\ub060"+ "\1\ub0c0\1\ub120\0\u0b40\1\ub180\1\ub1e0\1\ub240\1\ub2a0\1\ub300"+ "\1\ub360\1\ub3c0\1\ub420\0\u1b00\1\ub480\1\ub4e0\1\ub540\1\ub5a0"+ "\0\u1b00\1\ub600\1\ub660\1\ub6c0\1\ub720\1\ub780\0\u1b00\1\ub7e0"+ "\1\ub840\1\ub8a0\1\ub900\1\ub960\1\ub9c0\1\uba20\1\uba80\1\ubae0"+ "\1\ubb40\1\ubba0\1\ubc00\1\ubc60\1\ubcc0\1\ubd20\1\ubd80\0\u7680"+ "\0\u0b40\1\ubde0\1\ube40\1\ubea0\1\ubf00\1\ubf60\1\ubfc0\1\uc020"+ "\1\uc080\1\uc0e0\1\uc140\1\uc1a0\1\uc200\1\uc260\1\uc2c0\1\uc320"+ "\1\uc380\1\uc3e0\1\uc440\1\uc4a0\1\uc500\1\uc560\1\uc5c0\1\uc620"+ "\1\uc680\1\uc6e0\1\uc740\1\uc7a0\1\uc800\1\uc860\1\uc8c0\1\uc920"+ "\1\uc980\1\uc9e0\1\uca40\1\ucaa0\1\ucb00\1\ucb60\1\ucbc0\1\ucc20"+ "\1\ucc80\1\ucce0\1\ucd40\1\ucda0\1\uce00\1\uce60\1\ucec0\1\ucf20"+ "\1\ucf80\1\ucfe0\1\ud040\1\ud0a0\1\ud100\1\ud160\1\ud1c0\1\ud220"+ "\1\ud280\1\ud2e0\1\ud340\1\ud3a0\1\ud400\1\ucbc0\1\ud460\1\ud4c0"+ "\1\ud520\1\ud580\1\ud5e0\1\ud640\1\ud6a0\1\ud700\1\ud760\1\ud7c0"+ "\1\ud820\1\ud880\1\ud8e0\1\ud940\1\ud9a0\1\uda00\1\uda60\1\udac0"+ "\1\udb20\1\udb80\1\udbe0\1\udc40\1\udca0\1\udd00\1\udd60\1\uddc0"+ "\1\ude20\1\ude80\1\udee0\1\udf40\1\udfa0\1\ue000\1\ue060\1\ue0c0"+ "\1\ue120\0\u8d60\1\ue180\1\ue1e0\1\ue240\1\ue2a0\1\ue300\1\ue360"+ "\1\ue3c0\1\ue420\1\ue480\1\ue4e0\1\ue540\1\ue5a0\1\ue600\1\ue660"+ "\1\ue6c0\1\ue720\1\ue780\1\ue7e0\1\ue840\1\ue8a0\1\ue900\1\ue960"+ "\1\ue9c0\1\uea20\1\uea80\1\ueae0\1\ueb40\1\ueba0\1\uec00\1\uec60"+ "\1\uecc0\1\ued20\1\ued80\1\uede0\1\uee40\1\ueea0\1\uef00\1\uef60"+ "\1\uefc0\1\uf020\1\uf080\1\uf0e0\1\uf140\1\uf1a0\1\uf200\1\uf260"+ "\1\uf2c0\1\uf320\1\uf380\1\uf3e0\1\uf440\1\uf4a0\1\uf500\1\uf560"+ "\1\uf5c0\1\uf620\1\uf680\1\uf6e0\0\u1b00\1\uf740\1\uf7a0\1\uf800"+ "\1\uf860\1\uf8c0\1\uf920\1\uf980\1\uf9e0\1\ufa40\1\ufaa0\1\ufb00"+ "\1\ufb60\1\ufbc0\1\ufc20\1\ufc80\1\ufce0\1\ufd40\1\ufda0\1\ufe00"+ "\1\ufe60\1\ufec0\1\uff20\1\uff80\1\uffe0\2\100\2\240\2\u0100"+ "\2\u0160\2\u01c0\2\u0220\2\u0280\2\u02e0\2\u0340\2\u03a0\2\u0400"+ "\2\u0460\2\u04c0\2\u0520\2\u0580\2\u05e0\2\u0640\2\u06a0\2\u0700"+ "\1\u1e20\2\u0760\2\u07c0\2\u0820\2\u0880\2\u08e0\2\u0940\2\u09a0"+ "\2\u0a00\2\u0a60\2\u0ac0\2\u0b20\2\u0b80\2\u0be0\2\u0c40\2\u0ca0"+ "\2\u0d00\2\u0d60\2\u0dc0\2\u0e20\2\u0e80\2\u0ee0\2\u0f40\2\u0fa0"+ "\2\u1000\1\ub7e0\2\u1060\2\u10c0\2\u1120\2\u1180\2\u11e0\2\u1240"+ "\2\u12a0\2\u1300\2\u1360\2\u13c0\2\u1420\2\u1480\2\u14e0\2\u1540"+ "\2\u15a0\2\u1600\2\u1660\2\u16c0\2\u1720\2\u1780\2\u17e0\2\u1840"+ "\2\u18a0\2\u1900\2\u1960\2\u19c0\2\u1a20\2\u1a80\2\u1ae0\2\u1b40"+ "\2\u1ba0\2\u1c00\2\u1c60\2\u1cc0\2\u1d20\2\u1d80\2\u1de0\2\u1e40"+ "\2\u1ea0\2\u1f00\2\u1f60\2\u1fc0\2\u2020\2\u2080\2\u20e0\2\u2140"+ "\2\u21a0\2\u2200\2\u2260\2\u22c0\2\u2320\2\u2380\2\u23e0\2\u2440"+ "\2\u24a0\2\u2500\2\u2560\2\u25c0\2\u2620\2\u2680\2\u26e0\2\u2740"+ "\2\u27a0\2\u2800\2\u2860\2\u28c0\2\u2920\2\u2980\2\u29e0\2\u2a40"+ "\2\u2aa0\2\u2b00\2\u2b60\2\u2bc0\2\u2c20\2\u2c80\2\u2ce0\2\u2d40"+ "\2\u2da0\2\u2e00\2\u2e60\2\u2ec0\2\u2f20\2\u2f80\2\u2fe0\2\u3040"+ "\2\u30a0\2\u3100\2\u3160\2\u31c0\2\u3220\2\u3280\2\u32e0\2\u3340"+ "\2\u33a0\2\u3400\2\u3460\2\u34c0\2\u3520\1\u7400\2\u3580\2\u35e0"+ "\2\u3640\2\u36a0\2\u3700\2\u3760\2\u37c0\2\u3820\2\u3880\2\u38e0"+ "\2\u3940\2\u39a0\2\u3a00\2\u3a60\2\u3ac0\2\u3b20\2\u3b80\2\u3be0"+ "\2\u3c40\2\u3ca0\2\u3d00\2\u3d60\2\u3dc0\2\u3e20\2\u3e80\2\u3ee0"+ "\2\u3f40\2\u3fa0\2\u4000\2\u4060\2\u40c0\2\u4120\2\u4180\2\u41e0"+ "\2\u4240\2\u42a0\2\u4300\2\u4360\2\u43c0\2\u4420\2\u4480\2\u44e0"+ "\2\u4540\2\u45a0\2\u4600\2\u4660\2\u46c0\2\u4720\2\u4780\2\u47e0"+ "\2\u4840\2\u48a0\2\u4900\2\u4960\2\u49c0\2\u4a20\2\u4a80\2\u4ae0"+ "\2\u4b40\2\u4ba0\2\u4c00\2\u4c60\2\u4cc0\2\u4d20\2\u4d80\2\u4de0"+ "\2\u4e40\2\u4ea0\2\u4f00\2\u4f60\2\u4fc0\2\u5020\2\u5080\2\u50e0"+ "\2\u5140\2\u51a0\2\u5200\2\u5260\2\u52c0\2\u5320\2\u5380\2\u53e0"+ "\2\u5440\2\u54a0\2\u5500\2\u5560\2\u55c0\2\u5620\2\u5680\2\u56e0"+ "\2\u5740\2\u57a0\2\u5800\2\u5860\2\u58c0\2\u5920\2\u5980\2\u59e0"+ "\2\u5a40\2\u5aa0\2\u5b00\2\u5b60\2\u5bc0\2\u5c20\2\u5c80\2\u5ce0"+ "\2\u5d40\2\u5da0\2\u5e00\2\u5e60\2\u5ec0\2\u5f20\2\u5f80\2\u5fe0"+ "\2\u6040\2\u60a0\2\u6100\2\u6160\2\u61c0\2\u6220\2\u6280\2\u62e0"+ "\2\u6340\2\u63a0\2\u6400\2\u6460\2\u64c0\2\u6520\2\u6580\2\u65e0"+ "\2\u6640\2\u66a0\2\u6700\2\u6760\2\u67c0\2\u6820\2\u6880\2\u68e0"+ "\2\u6940\2\u69a0\2\u6a00\2\u6a60\2\u6ac0\2\u6b20\2\u6b80\2\u6be0"+ "\2\u6c40\2\u6ca0\2\u6d00\2\u6d60\2\u6dc0\2\u6e20\2\u6e80\2\u6ee0"+ "\2\u6f40\2\u6fa0\2\u7000\2\u7060\2\u70c0\2\u7120\2\u7180\2\u71e0"+ "\2\u7240\2\u72a0\2\u7300\2\u7360\2\u73c0\2\u7420\2\u7480\2\u74e0"+ "\2\u7540\2\u75a0\2\u7600\2\u7660\2\u76c0\2\u7720\2\u7780\2\u77e0"+ "\2\u7840\2\u78a0\2\u7900\2\u7960\2\u79c0\2\u7a20\2\u7a80\2\u7ae0"+ "\2\u7b40\2\u7ba0\2\u7c00\2\u7c60\2\u7cc0\2\u7d20\2\u7d80\2\u7de0"+ "\2\u7e40\2\u7ea0\2\u7f00\2\u7f60\2\u7fc0\2\u8020\2\u8080\2\u80e0"+ "\2\u8140\2\u81a0\2\u8200\0\u0b40\2\u8260\2\u82c0\2\u8320\2\u8380"+ "\2\u83e0\2\u8440\0\u0b40\2\u84a0\1\ua340\0\u0f00\2\u8500\2\u8560"+ "\2\u85c0\2\u8620\2\u8680\2\u86e0\2\u8740\2\u87a0\2\u8800\2\u8860"+ "\2\u88c0\2\u8920\2\u8980\2\u89e0\2\u89e0\2\u8a40\2\u8aa0\2\u8b00"+ "\2\u8b60\2\u8bc0\0\u0b40\2\u8c20\0\u0b40\2\u8c80\2\u8ce0\2\u8d40"+ "\2\u8da0\2\u8e00\2\u8e60\0\uf360\2\u8ec0\2\u8f20\2\u8f80\2\u8fe0"+ "\2\u9040\2\u90a0\2\u9100\2\u9160\2\u91c0\2\u9220\2\u9280\2\u92e0"+ "\2\u9340\2\u93a0\0\u0b40\0\u0b40\2\u9400\2\u9460\1\ubf60\2\u94c0"+ "\2\u9520\1\uc0e0\2\u9580\2\u95e0\2\u9640\2\u96a0\2\u9700\2\u9760"+ "\2\u97c0\2\u9820\2\u9880\2\u98e0\2\u9940\2\u99a0\2\u9a00\2\u9a60"+ "\2\u9ac0\2\u9b20\2\u9b80\2\u9be0\2\u9c40\2\u9ca0\2\u9d00\2\u9d60"+ "\2\u9dc0\0\ua2c0\2\u9e20\2\u9e80\2\u9ee0\2\u9f40\2\u9fa0\2\ua000"+ "\2\ua060\2\ua0c0\2\ua120\2\ua180\2\ua1e0\2\ua240\2\ua2a0\2\ua300"+ "\2\ua360\2\ua3c0\2\ua420\2\ua480\2\ua4e0\2\ua540\2\ua5a0\2\ua600"+ "\2\ua660\2\ua6c0\2\ua720\2\ua780\2\ua7e0\2\ua840\2\ua8a0\2\ua900"+ "\2\ua960\2\ua9c0\2\uaa20\2\uaa80\2\uaae0\2\uab40\2\uaba0\2\uac00"+ "\2\uac60\2\uacc0\2\uad20\2\uad80\2\uade0\2\uae40\2\uaea0\2\uaf00"+ "\2\uaf60\2\uafc0\2\ub020\2\ub080\2\ub0e0\2\ub140\2\ub1a0\2\ub200"+ "\2\ub260\2\ub2c0\2\ub320\2\ub380\2\ub3e0\2\ub440\2\ub4a0\2\ub500"+ "\2\ub560\2\ub5c0\2\ub620\2\ub680\2\ub6e0\2\ub740\2\ub7a0\2\ub800"+ "\2\ub860\2\ub8c0\2\ub920\2\ub980\2\ub9e0\2\uba40\2\ubaa0\2\ubb00"+ "\2\ubb60\2\ubbc0\2\ubc20\2\ubc80\2\ubce0\2\ubd40\2\ubda0\2\ube00"+ "\2\ube60\2\ubec0\2\ubf20\2\ubf80\2\ubfe0\2\uc040\2\uc0a0\2\uc100"+ "\2\uc160\2\uc1c0\2\uc220\2\uc280\2\uc2e0\2\uc340\2\uc3a0\2\uc400"+ "\2\uc460\2\uc4c0\2\uc520\2\uc580\2\uc5e0\2\uc640\2\uc6a0\2\uc700"+ "\2\uc760\2\uc7c0\2\uc820\2\uc880\2\uc8e0\2\uc940\2\uc9a0\2\uca00"+ "\2\uca60\2\ucac0\2\ucb20\2\ucb80\2\ucbe0\2\ucc40\2\ucca0\2\ucd00"+ "\2\ucd60\2\ucdc0\2\uce20\2\uce80\2\ucee0\2\ucf40\2\ucfa0\2\ud000"+ "\2\ud060\2\ud0c0\2\ud120\2\ud180\2\ud1e0\2\ud240\2\ud2a0\2\ud300"+ "\2\ud360\2\ud3c0\2\ud420\2\ud480\2\ud4e0\2\ud540\2\ud5a0\2\ud600"+ "\2\ud660\2\ud6c0\2\ud720\2\ud780\2\ud7e0\2\uc520\2\ud840\2\ud8a0"+ "\2\ud900\2\ud960\2\ud9c0\2\uda20\2\uda80\2\udae0\2\udb40\2\udba0"+ "\2\udc00\2\udc60\2\udcc0\2\udd20\2\udd80\2\udde0\2\ude40\2\udea0"+ "\2\ud840\2\udf00\2\udf60\2\udfc0\2\ue020\2\ue080\2\ue0e0\2\ue140"+ "\2\ue1a0\2\ue200\2\ue260\2\ue2c0\2\ue320\2\ue380\2\ue3e0\2\ue440"+ "\2\ue4a0\2\ue500\2\ue560\2\ue5c0\2\ue620\2\ue680\2\ue6e0\2\ue740"+ "\2\ue7a0\2\ue800\2\ue860\2\ue8c0\2\ue920\2\ue980\2\ue9e0\2\uea40"+ "\2\ueaa0\2\ueb00\2\ueb60\2\uebc0\2\uec20\2\uec80\2\uece0\2\ued40"+ "\2\ueda0\2\uee00\2\uee60\2\ueec0\2\uef20\2\uef80\2\uefe0\2\uf040"+ "\2\uf0a0\2\uf100\2\uf160\2\uf1c0\2\uf220\2\uf280\2\uf2e0\2\uf340"+ "\1\ufce0\2\uf3a0\2\uf400\2\uf460\2\uf4c0\2\uf520\2\uf580\2\uf5e0"+ "\2\uf640\2\uf6a0\2\uf700\2\uf760\2\uf7c0\2\uf820\2\uf880\2\uf8e0"+ "\2\uf940\2\uf9a0\2\ufa00\2\ufa60\2\ufac0\2\ufb20\2\ufb80\2\ufbe0"+ "\2\ufc40\2\ufca0\2\ufd00\2\ufd60\2\ufdc0\2\ufe20\2\ufe80\2\ufee0"+ "\2\uff40\2\uffa0\3\0\3\140\3\300\3\u0120\3\u0180\3\u01e0"+ "\3\u0240\3\u02a0\3\u0300\3\u0360\3\u03c0\3\u0420\3\u0480\3\u04e0"+ "\3\u0540\3\u05a0\3\u0600\3\u0660\3\u06c0\3\u0720\3\u0780\3\u07e0"+ "\3\u0840\3\u08a0\3\u0900\3\u0960\3\u09c0\3\u0a20\3\u0a80\3\u0ae0"+ "\3\u0b40\3\u0ba0\3\u0c00\3\u0c60\3\u0cc0\3\u0d20\3\u0d80\3\u0de0"+ "\3\u0e40\3\u0ea0\3\u0f00\3\u0f60\3\u0fc0\3\u1020\3\u1080\3\u10e0"+ "\3\u1140\3\u11a0\3\u1200\3\u1260\3\u12c0\3\u1320\3\u1380\3\u13e0"+ "\3\u1440\3\u14a0\3\u1500\3\u1560\3\u15c0\3\u1620\3\u1680\3\u16e0"+ "\3\u1740\3\u17a0\3\u1800\3\u1860\3\u18c0\3\u1920\3\u1980\3\u19e0"+ "\3\u1a40\3\u1aa0\3\u1b00\3\u1b60\3\u1bc0\3\u1c20\3\u1c80\3\u1ce0"+ "\3\u1d40\3\u1da0\3\u1e00\3\u1e60\3\u1ec0\3\u1f20\3\u1f80\3\u1fe0"+ "\3\u2040\3\u20a0\3\u2100\3\u2160\3\u21c0\3\u2220\3\u2280\3\u22e0"+ "\3\u2340\3\u23a0\3\u2400\3\u2460\3\u24c0\3\u2520\3\u2580\3\u25e0"+ "\3\u2640\3\u26a0\3\u2700\3\u2760\3\u27c0\3\u2820\3\u2880\3\u28e0"+ "\3\u2940\3\u29a0\3\u2a00\3\u2a60\3\u2ac0\3\u2b20\3\u2b80\3\u2be0"+ "\3\u2c40\3\u2ca0\3\u2d00\3\u2d60\3\u2dc0\3\u2e20\3\u2e80\3\u2ee0"+ "\3\u2f40\3\u2fa0\3\u3000\3\u3060\3\u30c0\3\u3120\3\u3180\3\u31e0"+ "\3\u3240\3\u32a0\3\u3300\3\u3360\3\u33c0\3\u3420\3\u3480\3\u34e0"+ "\3\u3540\3\u35a0\3\u3600\3\u3660\3\u36c0\3\u3720\3\u3780\3\u37e0"+ "\3\u3840\3\u38a0\3\u3900\3\u3960\3\u39c0\3\u3a20\3\u3a80\3\u3ae0"+ "\3\u3b40\3\u3ba0\3\u3c00\3\u3c60\3\u3cc0\3\u3d20\3\u3d80\3\u3de0"+ "\3\u3e40\3\u3ea0\3\u3f00\3\u3f60\3\u3fc0\3\u4020\3\u4080\3\u40e0"+ "\3\u4140\3\u41a0\3\u4200\3\u4260\3\u42c0\3\u4320\3\u4380\3\u43e0"+ "\3\u4440\3\u44a0\3\u4500\3\u4560\3\u45c0\3\u4620\3\u4680\3\u46e0"+ "\3\u4740\3\u47a0\3\u4800\3\u4860\3\u48c0\3\u4920\3\u4980\3\u49e0"+ "\3\u4a40\3\u4aa0\3\u4b00\3\u4b60\3\u4bc0\3\u4c20\3\u4c80\3\u4ce0"+ "\3\u4d40\3\u4da0\3\u4e00\3\u4e60\3\u4ec0\3\u4f20\3\u4f80\3\u4fe0"+ "\3\u5040\3\u50a0\3\u5100\3\u5160\3\u51c0\3\u5220\3\u5280\3\u52e0"+ "\3\u5340\3\u53a0\3\u5400\3\u5460\3\u54c0\3\u5520\3\u5580\3\u55e0"+ "\3\u5640\3\u56a0\3\u5700\3\u5760\3\u57c0\3\u5820\3\u5880\3\u58e0"+ "\3\u5940\3\u59a0\3\u5a00\3\u5a60\3\u5ac0\3\u5b20\3\u5b80\3\u5be0"+ "\3\u5c40\3\u5ca0\3\u5d00\3\u5d60\3\u5dc0\3\u5e20\3\u5e80\3\u5ee0"+ "\3\u5f40\3\u5fa0\3\u6000\3\u6060\3\u60c0\3\u6120\3\u6180\3\u61e0"+ "\3\u6240\3\u62a0\3\u6300\3\u6360\3\u63c0\3\u6420\3\u6480\3\u64e0"+ "\3\u6540\3\u65a0\3\u6600\3\u6660\3\u66c0\3\u6720\3\u6780\3\u67e0"+ "\3\u6840\3\u68a0\3\u6900\3\u6960\3\u69c0\3\u6a20\3\u6a80\3\u6ae0"+ "\3\u6b40\3\u6ba0\3\u6c00\3\u6c60\3\u6cc0\3\u6d20\3\u6d80\3\u6de0"+ "\3\u6e40\3\u6ea0\3\u6f00\3\u6f60\3\u6fc0\3\u7020\3\u7080\3\u70e0"+ "\3\u7140\1\u1f40\3\u71a0\3\u7200\3\u7260\3\u72c0\3\u7320\3\u7380"+ "\3\u73e0\3\u7440\3\u74a0\3\u7500\3\u7560\3\u75c0\3\u7620\3\u7680"+ "\3\u76e0\3\u7740\3\u77a0\3\u7800\3\u7860\3\u78c0\3\u7920\3\u7980"+ "\3\u79e0\3\u7a40\3\u7aa0\3\u7b00\3\u7b60\3\u7bc0\3\u7c20\3\u7c80"+ "\3\u7ce0\3\u7d40\3\u7da0\3\u7e00\3\u7e60\3\u7ec0\3\u7f20\3\u7f80"+ "\3\u7fe0\3\u8040\3\u80a0\3\u8100\3\u8160\3\u81c0\3\u8220\3\u8280"+ "\3\u82e0\3\u8340\3\u83a0\3\u8400\3\u8460\3\u84c0\3\u8520\3\u8580"+ "\3\u85e0\0\u4200\3\u8640\3\u86a0\3\u8700\3\u8760\3\u87c0\3\u8820"+ "\3\u8880\3\u88e0\3\u8940\3\u89a0\3\u8a00\3\u8a60\3\u8ac0\3\u8b20"+ "\3\u8b80\3\u8be0\3\u8c40\3\u8ca0\3\u8d00\3\u8d60\3\u8dc0\3\u8e20"+ "\3\u8e80\3\u8ee0\3\u8f40\3\u8fa0\3\u9000\3\u9060\3\u90c0\3\u9120"+ "\3\u9180\3\u91e0\3\u9240\3\u92a0\3\u9300\3\u9360\3\u93c0\3\u9420"+ "\3\u9480\3\u94e0\3\u9540\3\u95a0\3\u9600\3\u9660\3\u96c0\3\u9720"+ "\3\u9780\3\u97e0\3\u9840\3\u98a0\3\u9900\3\u9960\3\u99c0\3\u9a20"+ "\3\u9a80\3\u9ae0\3\u9b40\3\u9ba0\3\u9c00\3\u9c60\3\u9cc0\3\u9d20"+ "\3\u9d80\3\u9de0\3\u9e40\3\u9ea0\3\u9f00\3\u9f60\3\u9fc0\3\ua020"+ "\3\ua080\3\ua0e0\3\ua140\3\ua1a0\3\ua200\3\ua260\3\ua2c0\3\ua320"+ "\3\ua380\3\ua3e0\3\ua440\3\ua4a0\3\ua500\3\ua560\3\ua5c0\3\ua620"+ "\3\ua680\3\ua6e0\3\ua740\3\ua7a0\3\ua800\3\ua860\3\ua8c0\3\ua920"+ "\3\ua980\3\ua9e0\3\uaa40\3\uaaa0\3\uab00\3\uab60\3\uabc0\3\uac20"+ "\3\uac80\3\uace0\3\uad40\3\uada0\3\uae00\3\uae60\3\uaec0\3\uaf20"+ "\3\uaf80\3\uafe0\3\ub040\3\ub0a0\3\ub100\3\ub160\3\ub1c0\3\ub220"+ "\3\ub280\3\ub2e0\3\ub340\3\ub3a0\3\ub400\3\ub460\3\ub4c0\3\ub520"+ "\3\ub580\3\ub5e0\3\ub640\3\ub6a0\3\ub700\3\ub760\3\ub7c0\3\ub820"+ "\3\ub880\3\ub8e0\3\ub940\3\ub9a0\3\uba00\3\uba60\3\ubac0\3\ubb20"+ "\3\ubb80\3\ubbe0\3\ubc40\3\ubca0\3\ubd00\3\ubd60\3\ubdc0\3\ube20"+ "\3\ube80\3\ubee0\3\ubf40\3\ubfa0\3\uc000\3\uc060\3\uc0c0\3\uc120"+ "\3\uc180\3\uc1e0\3\uc240\3\uc2a0\3\uc300\3\uc360\3\uc3c0\3\uc420"+ "\3\uc480\3\uc4e0\3\uc540\3\uc5a0\3\uc600\3\uc660\3\uc6c0\3\uc720"+ "\3\uc780\3\uc7e0\3\uc840\3\uc8a0\3\uc900\3\uc960\3\uc9c0\3\uca20"+ "\3\uca80\3\ucae0\3\ucb40\3\ucba0\3\ucc00\3\ucc60\3\uccc0\3\ucd20"+ "\3\ucd80\3\ucde0\3\uce40\3\ucea0\3\ucf00\3\ucf60\3\ucfc0\3\ud020"+ "\3\ud080\0\u8a00\3\ud0e0\3\ud140\3\ud1a0\3\ud200\3\ud260\3\ud2c0"+ "\3\ud320\3\ud380\3\ud3e0\3\ud440\3\ud4a0\3\ud500\3\ud560\3\ud5c0"+ "\3\ud620\3\ud680\3\ud6e0\3\ud740\3\ud7a0\3\ud800\3\ud860\3\ud8c0"+ "\3\ud920\3\ud980\3\ud9e0\3\uda40\3\udaa0\3\udb00\3\udb60\3\udbc0"+ "\3\udc20\3\udc80\3\udce0\3\udd40\3\udda0\3\ude00\3\ude60\3\udec0"+ "\3\udf20\3\udf80\3\udfe0\3\ue040\3\ue0a0\3\ue100\3\ue160\3\ue1c0"+ "\3\ue220\3\ue280\3\ue2e0\3\ue340\3\ue3a0\3\ue400\3\ue460\3\ue4c0"+ "\3\ue520\3\ue580\3\ue5e0\3\ue640\3\ue6a0\3\ue700\3\ue760\3\ue7c0"+ "\3\ue820\3\ue880\3\ue8e0\3\ue940\3\ue9a0\3\uea00\3\uea60\3\ueac0"+ "\3\ueb20\3\ueb80\3\uebe0\3\uec40\3\ueca0\3\ued00\3\ued60\3\uedc0"+ "\3\uee20\3\uee80\3\ueee0\3\uef40\3\uefa0\3\uf000\3\uf060\3\uf0c0"+ "\3\uf120\3\uf180\3\uf1e0\3\uf240\3\uf2a0\3\uf300\3\uf360\3\uf3c0"+ "\3\uf420\3\uf480\3\uf4e0\3\uf540\3\uf5a0\3\uf600\3\uf660\3\uf6c0"+ "\3\uf720\3\uf780\3\uf7e0\3\uf840\3\uf8a0\3\uf900\3\uf960\3\uf9c0"+ "\3\ufa20\3\ufa80\3\ufae0\3\ufb40\3\ufba0\3\ufc00\3\ufc60\3\ufcc0"+ "\3\ufd20\3\ufd80\3\ufde0\3\ufe40\3\ufea0\3\uff00\3\uff60\3\uffc0"+ "\4\40\4\200\4\340\4\u0140\4\u01a0\4\u0200\4\u0260\4\u02c0"+ "\4\u0320\4\u0380\4\u03e0\4\u0440\4\u04a0\4\u0500\4\u0560\4\u05c0"+ "\4\u0620\4\u0680\4\u06e0\4\u0740\4\u07a0\4\u0800\4\u0860\4\u08c0"+ "\4\u0920\4\u0980\4\u09e0\4\u0a40\4\u0aa0\4\u0b00\4\u0b60\4\u0bc0"+ "\4\u0c20\4\u0c80\4\u0ce0\4\u0d40\4\u0da0\4\u0e00\4\u0e60\4\u0ec0"+ "\4\u0f20\4\u0f80\4\u0fe0\4\u1040\4\u0560\4\u10a0\4\u1100\4\u1160"+ "\4\u11c0\4\u1220\4\u1280\4\u12e0\4\u1340\4\u13a0\4\u1400\4\u1460"+ "\4\u14c0\4\u1520\4\u1580\4\u15e0\4\u1640\4\u16a0\4\u1700\4\u1760"+ "\4\u17c0\4\u1820\4\u1880\4\u18e0\4\u1940\4\u19a0\4\u1a00\4\u1a60"+ "\4\u1ac0\4\u1b20\4\u1b80\4\u1be0\4\u1c40\4\u1ca0\4\u1d00\4\u1d60"+ "\4\u1dc0\4\u1e20\4\u1e80\4\u1ee0\4\u1f40\4\u1fa0\4\u2000\4\u2060"+ "\4\u20c0\4\u2120\4\u2180\4\u21e0\4\u2240\4\u22a0\4\u2300\4\u2360"+ "\4\u23c0\4\u2420\4\u2480\4\u24e0\4\u2540\4\u25a0\4\u2600\4\u2660"+ "\4\u26c0\4\u2720\4\u2780\4\u27e0\4\u2840\4\u28a0\4\u2900\4\u2960"+ "\4\u29c0\4\u2a20\4\u2a80\4\u2ae0\4\u2b40\4\u2ba0\4\u2c00\4\u2c60"+ "\4\u2cc0\4\u2d20\4\u2d80\4\u2de0\4\u2e40\4\u2ea0\4\u2f00\4\u2f60"+ "\4\u2fc0\4\u3020\4\u3080\2\ubaa0\4\u30e0\4\u3140\4\u31a0\4\u3200"+ "\4\u3260\4\u32c0\4\u3320\4\u3380\4\u33e0\4\u3440\4\u34a0\4\u3500"+ "\4\u3560\4\u35c0\4\u3620\4\u3680\4\u36e0\4\u3740\4\u37a0\4\u3800"+ "\4\u3860\4\u38c0\4\u3920\4\u3980\4\u39e0\4\u3a40\4\u3aa0\4\u3b00"+ "\4\u3b60\4\u3bc0\4\u3c20\4\u3c80\4\u3ce0\4\u3d40\4\u3da0\4\u3e00"+ "\4\u3e60\4\u3ec0\4\u3f20\4\u3f80\4\u3fe0\4\u4040\4\u40a0\4\u4100"+ "\4\u4160\4\u41c0\4\u4220\4\u4280\4\u42e0\4\u4340\4\u43a0\4\u4400"+ "\4\u4460\4\u44c0\4\u4520\4\u4580\4\u45e0\4\u4640\4\u46a0\4\u4700"+ "\4\u4760\4\u47c0\4\u4820\4\u4880\4\u48e0\4\u4940\4\u49a0\4\u4a00"+ "\4\u4a60\4\u4ac0\4\u4b20\4\u4b80\4\u4be0\4\u4c40\4\u4ca0\4\u4d00"+ "\4\u4d60\4\u4dc0\4\u4e20\4\u4e80\4\u4ee0\4\u4f40\4\u4fa0\4\u5000"+ "\4\u5060\4\u50c0\4\u5120\4\u5180\4\u51e0\4\u5240\4\u52a0\4\u5300"+ "\4\u5360\4\u53c0\4\u5420\4\u5480\4\u54e0\4\u5540\4\u55a0\4\u5600"+ "\4\u5660\4\u56c0\4\u5720\4\u5780\4\u57e0\4\u5840\4\u58a0\4\u5900"+ "\4\u5960\4\u59c0\4\u5a20\4\u5a80\4\u5ae0\4\u5b40\4\u5ba0\4\u5c00"+ "\4\u5c60\4\u5cc0\4\u5d20\4\u5d80\4\u5de0\4\u5e40\4\u5ea0\4\u5f00"+ "\4\u5f60\4\u5fc0\4\u6020\4\u6080\4\u60e0\4\u6140\4\u61a0\4\u6200"+ "\4\u6260\4\u62c0\4\u6320\4\u6380\4\u63e0\4\u6440\4\u64a0\4\u6500"+ "\4\u6560\4\u65c0\4\u6620\4\u6680\4\u66e0\4\u6740\4\u67a0\4\u6800"+ "\4\u6860\4\u68c0\4\u6920\4\u6980\4\u69e0\4\u6a40\4\u6aa0\4\u6b00"+ "\4\u6b60\4\u6bc0\4\u6c20\4\u6c80\4\u6ce0\4\u6d40\4\u6da0\4\u6e00"+ "\4\u6e60\4\u6ec0\4\u6f20\4\u6f80\4\u6fe0\1\u88a0\4\u7040\4\u70a0"+ "\4\u7100\4\u7160\4\u71c0\4\u7220\4\u7280\4\u72e0\4\u7340\4\u73a0"+ "\4\u7400\4\u7460\4\u74c0\4\u7520\4\u7580\4\u75e0\4\u7640\4\u76a0"+ "\4\u7700\4\u7760\4\u77c0\4\u7820\4\u7880\4\u78e0\4\u7940\4\u79a0"+ "\4\u7a00\4\u7a60\4\u7ac0\4\u7b20\4\u7b80\4\u7be0\4\u7c40\4\u7ca0"+ "\4\u7d00\4\u7d60\4\u7dc0\4\u7e20\4\u7e80\4\u7ee0\4\u7f40\4\u7fa0"+ "\4\u8000\4\u8060\4\u80c0\4\u8120\4\u8180\4\u81e0\4\u8240\4\u82a0"+ "\4\u8300\4\u8360\4\u83c0\4\u8420\4\u8480\4\u84e0\4\u8540\4\u85a0"+ "\4\u8600\4\u8660\4\u86c0\4\u8720\4\u8780\4\u87e0\4\u8840\4\u88a0"+ "\4\u8900\4\u8960\4\u89c0\4\u8a20\4\u8a80\4\u8ae0\4\u8b40\4\u8ba0"+ "\4\u8c00\4\u8c60\4\u8cc0\4\u8d20\4\u8d80\4\u8de0\4\u8e40\4\u8ea0"+ "\4\u8f00\4\u8f60\4\u8fc0\4\u9020\4\u9080\4\u90e0\4\u9140\4\u91a0"+ "\4\u9200\4\u9260\4\u92c0\4\u9320\4\u9380\4\u93e0\4\u9440\4\u94a0"+ "\0\u4200\4\u9500\4\u9560\4\u95c0\4\u9620\4\u9680\4\u96e0\4\u9740"+ "\4\u97a0\4\u9800\4\u9860\4\u98c0\4\u9920\4\u9980\4\u99e0\4\u9a40"+ "\4\u9aa0\4\u9b00\4\u9b60\4\u9bc0\4\u9c20\4\u9c80\4\u9ce0\4\u9d40"+ "\4\u9da0\4\u9e00\4\u9e60\4\u9ec0\4\u9f20\4\u9f80\4\u9fe0\4\ua040"+ "\4\ua0a0\4\ua100\4\ua160\4\ua1c0\4\ua220\4\ua280\4\ua2e0\4\ua340"+ "\4\ua3a0\4\ua400\4\ua460\4\ua4c0\4\ua520\4\ua580\4\ua5e0\4\ua640"+ "\4\ua6a0\4\ua700\4\ua760\4\ua7c0\2\u4ae0\4\ua820\4\ua880\4\ua8e0"+ "\4\ua940\4\ua9a0\4\uaa00\4\uaa60\4\uaac0\4\uab20\4\uab80\4\uabe0"+ "\4\uac40\4\uaca0\4\uad00\4\uad60\4\uadc0\4\uae20\4\uae80\4\uaee0"+ "\4\uaf40\4\uafa0\4\ub000\4\ub060\4\ub0c0\4\ub120\4\ub180\4\ub1e0"+ "\4\ub240\4\ub2a0\4\ub300\4\ub360\4\ub3c0\4\ub420\4\ub480\4\ub4e0"+ "\4\ub540\4\ub5a0\4\ub600\4\ub660\4\ub6c0\4\ub720\4\ub780\4\ub7e0"+ "\4\ub840\4\ub8a0\4\ub900\4\ub960\4\ub9c0\4\uba20\4\uba80\4\ubae0"+ "\4\ubb40\4\ubba0\4\ubc00\4\ubc60\4\ubcc0\4\ubd20\4\ubd80\4\ubde0"+ "\4\ube40\4\ubea0\4\ubf00\4\ubf60\4\ubfc0\4\uc020\4\uc080\4\uc0e0"+ "\4\uc140\4\uc1a0\4\uc200\4\uc260\4\uc2c0\4\uc320\4\uc380\4\uc3e0"+ "\4\uc440\4\uc4a0\4\uc500\4\uc560\4\uc5c0\4\uc620\4\uc680\4\uc6e0"+ "\4\uc740\4\uc7a0\4\uc800\4\uc860\4\uc8c0\4\uc920\4\uc980\4\uc9e0"+ "\4\uca40\4\ucaa0\4\ucb00\4\ucb60\4\ucbc0\4\ucc20\4\ucc80\4\ucce0"+ "\4\ucd40\4\ucda0\4\uce00\4\uce60\3\u74a0\4\ucec0\4\ucf20\4\ucf80"+ "\4\ucfe0\4\ud040\4\ud0a0\4\ud100\4\ud160\4\ud1c0\4\ud220\1\u1280"+ "\4\ud280\4\ud2e0\4\ud340\4\ud3a0\4\ud400\4\ud460\1\uea20\4\ud4c0"+ "\4\ud520\4\ud580\4\ud5e0\4\ud640\4\ud6a0\4\ud700\4\ud760\4\ud7c0"+ "\4\ud820\4\ud880\4\ud8e0\4\ud940\4\ud9a0\4\uda00\4\uda60\4\udac0"+ "\4\udb20\4\udb80\4\udbe0\4\udc40\4\udca0\4\udd00\4\udd60\4\uddc0"+ "\4\ude20\4\ude80\4\udee0\4\udf40\4\udfa0\4\ue000\4\ue060\4\ue0c0"+ "\4\ue120\4\ue180\4\ue1e0\4\ue240\4\ue2a0\4\ue300\4\ue360\4\ue3c0"+ "\4\ue420\4\ue480\4\ue4e0\4\ue540\4\ue5a0\4\ue600\4\ue660\4\ue6c0"+ "\4\ue720\4\ue780\4\ue7e0\4\ue840\4\ue8a0\4\ue900\4\ue960\4\ue9c0"+ "\4\ue900\4\uea20\4\uea80\4\ueae0\4\ueb40\4\ueba0\4\uec00\4\uec60"+ "\4\uecc0\4\ued20\4\ued80\4\uede0\4\uee40\4\ueea0\4\uef00\4\uef60"+ "\4\uefc0\4\uf020\4\uf080\4\uf0e0\4\uf140\4\uf1a0\4\uf200\4\uf260"+ "\4\uf2c0\4\uf320\4\uf380\4\uf3e0\4\uf440\4\uf4a0\4\uf500\4\uf560"+ "\4\uf5c0\4\uf620\4\uf680\4\uf6e0\4\uf740\4\uf7a0\4\uf800\4\uf860"+ "\4\uf8c0\4\uf920\4\uf980\4\uf9e0\4\ufa40\4\ufaa0\4\ufb00\4\ufb60"+ "\4\ufbc0\4\ufc20\4\ufc80\4\ufce0\4\ufd40\4\ufda0\4\ufe00\4\ufe60"+ "\4\ufec0\4\uff20\4\uff80\4\uffe0\5\100\5\240\5\u0100\5\u0160"+ "\5\u01c0\5\u0220\5\u0280\5\u02e0\5\u0340\5\u03a0\5\u0400\5\u0460"+ "\5\u04c0\5\u0520\5\u0580\5\u05e0\5\u0640\5\u06a0\5\u0700\5\u0760"+ "\5\u07c0\5\u0820\5\u0880\5\u08e0\5\u0940\5\u09a0\5\u0a00\5\u0a60"+ "\5\u0ac0\4\uce00\5\u0b20\5\u0b80\5\u0be0\5\u0c40\5\u0ca0\5\u0d00"+ "\5\u0d60\5\u0dc0\5\u0e20\5\u0e80\5\u0ee0\5\u0f40\5\u0fa0\5\u1000"+ "\5\u1060\5\u10c0\5\u1120\5\u1180\5\u11e0\5\u1240\5\u12a0\5\u1300"+ "\5\u1360\5\u13c0\5\u1420\5\u1480\5\u14e0\5\u1540\5\u15a0\5\u1600"+ "\5\u1660\5\u16c0\5\u1720\5\u1780\5\u17e0\5\u1840\5\u18a0\5\u1900"+ "\5\u1960\5\u19c0\5\u1a20\5\u1a80\5\u1ae0\5\u1b40\5\u1ba0\5\u1c00"+ "\5\u1c60\5\u1cc0\5\u1d20\5\u1d80\5\u1de0\5\u1e40\5\u1ea0\5\u1f00"+ "\5\u1f60\5\u1fc0\5\u2020\5\u2080\5\u20e0\5\u2140\5\u21a0\5\u2200"+ "\5\u2260\5\u22c0\5\u2320\5\u2380\5\u23e0\5\u2440\5\u24a0\5\u2500"+ "\5\u2560\5\u25c0\5\u2620\5\u2680\5\u26e0\5\u2740\5\u27a0\5\u2800"+ "\5\u2860\5\u28c0\5\u2920\5\u2980\5\u29e0\5\u2a40\5\u2aa0\5\u2b00"+ "\5\u2b60\5\u2bc0\5\u2c20\5\u2c80\5\u2ce0\5\u2d40\5\u2da0\5\u2e00"+ "\5\u2e60\5\u2ec0\5\u2f20\5\u2f80\5\u2fe0\5\u3040\5\u30a0\5\u3100"+ "\5\u3160\5\u31c0\5\u3220\5\u3280\5\u32e0\5\u3340\5\u33a0\5\u3400"+ "\5\u3460\5\u34c0\5\u3520\5\u3580\5\u35e0\5\u3640\5\u36a0\5\u3700"+ "\5\u3760\5\u37c0\5\u3820\5\u3880\5\u38e0\1\u9800\5\u3940\5\u39a0"+ "\5\u3a00\5\u3a60\5\u3ac0\5\u3b20\5\u3b80\5\u3be0\5\u3c40\5\u3ca0"+ "\5\u3d00\5\u3d60\5\u3dc0\5\u3e20\5\u3e80\5\u3ee0\5\u3f40\5\u3fa0"+ "\5\u4000\5\u4060\5\u40c0\5\u4120\5\u4180\5\u41e0\5\u4240\5\u42a0"+ "\5\u4300\5\u4360\5\u43c0\5\u4420\5\u4480\5\u44e0\5\u4540\5\u45a0"+ "\5\u4600\5\u4660\5\u46c0\5\u4720\5\u4780\5\u47e0\5\u4840\5\u48a0"+ "\5\u4900\5\u4960\5\u49c0\5\u4a20\5\u4a80\5\u4ae0\5\u4b40\5\u4ba0"+ "\5\u4c00\5\u4c60\5\u4cc0\5\u4d20\5\u4d80\5\u4de0\5\u4e40\5\u4ea0"+ "\5\u4f00\5\u4f60\5\u4fc0\5\u5020\5\u5080\5\u50e0\5\u5140\5\u51a0"+ "\5\u5200\5\u5260\5\u52c0\5\u5320\5\u5380\5\u53e0\5\u5440\5\u54a0"+ "\5\u5500\5\u5560\5\u55c0\5\u5620\5\u5680\5\u56e0\5\u5740\5\u57a0"+ "\5\u5800\5\u5860\5\u58c0\5\u5920\1\uf860\5\u5980\5\u59e0\5\u5a40"+ "\5\u5aa0\5\u5b00\5\u5b60\5\u5bc0\5\u5c20\5\u5c80\5\u5ce0\5\u5d40"+ "\5\u5da0\5\u5e00\5\u5e60\5\u5ec0\5\u5f20\5\u5f80\5\u5fe0\5\u6040"+ "\5\u60a0\5\u6100\5\u6160\5\u61c0\5\u6220\5\u6280\5\u62e0\5\u6340"+ "\5\u63a0\5\u6400\5\u6460\5\u64c0\5\u6520\5\u6580\5\u65e0\5\u6640"+ "\5\u66a0\5\u6700\5\u6760\5\u67c0\5\u6820\5\u6880\5\u68e0\5\u6940"+ "\5\u69a0\5\u6a00\5\u6a60\5\u6ac0\5\u6b20\5\u6b80\5\u6be0\5\u6c40"+ "\5\u6ca0\5\u6d00\5\u6d60\5\u6dc0\5\u6e20\5\u6e80\5\u6ee0\5\u6f40"+ "\5\u6fa0\5\u7000\5\u7060\5\u70c0\5\u7120\5\u7180\5\u71e0\5\u7240"+ "\5\u72a0\5\u7300\5\u7360\5\u73c0\5\u7420\5\u7480\5\u74e0\5\u7540"+ "\5\u75a0\5\u7600\5\u7660\5\u76c0\5\u7720\5\u7780\5\u77e0\5\u7840"+ "\5\u78a0\5\u7900\5\u7960\5\u79c0\5\u7a20\5\u7a80\5\u7ae0\5\u7b40"+ "\5\u7ba0\5\u7c00\5\u7c60\5\u7cc0\5\u7d20\5\u7d80\5\u7de0\5\u7e40"+ "\5\u7ea0\5\u7f00\5\u7f60\5\u7fc0\5\u8020\5\u8080\5\u80e0\5\u8140"+ "\5\u81a0\5\u8200\5\u8260\5\u82c0\5\u8320\5\u8380\5\u83e0\5\u8440"+ "\5\u84a0\5\u8500\5\u8560\5\u85c0\5\u8620\5\u8680\5\u86e0\5\u8740"+ "\5\u87a0\5\u8800\5\u8860\5\u88c0\5\u8920\5\u8980\5\u89e0\5\u8a40"+ "\5\u8aa0\5\u8b00\5\u8b60\5\u8bc0\5\u8c20\5\u8c80\5\u8ce0\5\u8d40"+ "\5\u8da0\5\u8e00\5\u8e60\5\u8ec0\5\u8f20\5\u8f80\5\u8fe0\5\u9040"+ "\5\u90a0\5\u9100\5\u9160\5\u91c0\5\u9220\5\u9280\5\u92e0\5\u9340"+ "\5\u93a0\5\u9400\5\u9460\5\u94c0\5\u9520\5\u9580\5\u95e0\5\u9640"+ "\5\u96a0\5\u9700\5\u9760\5\u97c0\5\u9820\5\u9880\5\u98e0\5\u9940"+ "\5\u99a0\5\u9a00\5\u9a60\5\u9ac0\5\u9b20\5\u9b80\5\u9be0\5\u9c40"+ "\5\u9ca0\5\u9d00\5\u9d60\5\u9dc0\5\u9e20\5\u9e80\5\u9ee0\5\u9f40"+ "\5\u9fa0\5\ua000\5\ua060\5\ua0c0\5\ua120\5\ua180\5\ua1e0\5\ua240"+ "\5\ua2a0\5\ua300\5\ua360\5\ua3c0\5\ua420\5\ua480\5\ua4e0\5\ua540"+ "\5\ua5a0\5\ua600\5\ua660\5\ua6c0\5\ua720\5\ua780\5\ua7e0\5\ua840"+ "\5\ua8a0\5\ua900\5\ua960\5\ua9c0\5\uaa20\5\uaa80\5\uaae0\5\uab40"+ "\5\uaba0\5\uac00\5\uac60\5\uacc0\5\uad20\5\uad80\5\uade0\5\uae40"+ "\5\uaea0\5\uaf00\5\uaf60\3\u9420\5\uafc0\5\ub020\5\ub080\5\ub0e0"+ "\5\ub140\5\ub1a0\5\ub200\5\ub260\5\ub2c0\5\ub320\5\ub380\5\ub3e0"+ "\5\ub440\5\ub4a0\5\ub500\5\ub560\5\ub5c0\5\ub620\5\ub680\5\ub6e0"+ "\5\ub740\5\ub7a0\5\ub800\5\ub860\5\ub8c0\5\ub920\5\ub980\5\ub9e0"+ "\5\uba40\5\ubaa0\5\ubb00\5\ubb60\5\ubbc0\5\ubc20\5\ubc80\5\ubce0"+ "\5\ubd40\5\ubda0\5\ube00\5\ube60\5\ubec0\5\ubf20\5\ubf80\5\ubfe0"+ "\5\uc040\5\uc0a0\5\uc100\5\uc160\5\uc1c0\5\uc220\5\uc280\5\uc2e0"+ "\5\uc340\5\uc3a0\5\uc400\5\uc460\5\uc4c0\5\uc520\5\uc580\5\uc5e0"+ "\5\uc640\5\uc6a0\5\uc700\5\uc760\5\uc7c0\5\uc820\5\uc880\5\uc8e0"+ "\5\uc940\5\uc9a0\5\uca00\5\uca60\5\ucac0\5\ucb20\5\ucb80\5\ucbe0"+ "\5\ucc40\5\ucca0\5\ucd00\5\ucd60\5\ucdc0\5\uce20\5\uce80\5\ucee0"+ "\5\ucf40\5\ucfa0\5\ud000\5\ud060\5\ud0c0\5\ud120\5\ud180\5\ud1e0"+ "\5\ud240\5\ud2a0\5\ud300\5\ud360\5\ud3c0\5\ud420\5\ud480\5\ud4e0"+ "\5\ud540\5\ud5a0\5\ud600\5\ud660\5\ud6c0\5\ud720\5\ud780\5\ud7e0"+ "\5\ud840\5\ud8a0\5\ud900\5\ud960\5\ud9c0\5\uda20\5\uda80\5\udae0"+ "\5\udb40\5\udba0\5\udc00\5\udc60\5\udcc0\5\udd20\5\udd80\5\udde0"+ "\5\ude40\5\udea0\5\udf00\5\udf60\5\udfc0\5\ue020\5\ue080\5\ue0e0"+ "\5\ue140\5\ue1a0\5\ue200\5\ue260\5\ue2c0\5\ue320\5\ue380\5\ue3e0"+ "\5\ue440\5\ue4a0\5\ue500\5\ue560\5\ue5c0\5\ue620\5\ue680\5\ue6e0"+ "\5\ue740\5\ue7a0\5\ue800\5\ue860\5\ue8c0\5\ue920\5\ue980\5\ue9e0"+ "\5\uea40\5\ueaa0\5\ueb00\5\ueb60\5\uebc0\5\uec20\5\uec80\5\uece0"+ "\5\ued40\5\ueda0\5\uee00\5\uee60\5\ueec0\5\uef20\5\uef80\5\uefe0"+ "\5\uf040\5\uf0a0\5\uf100\5\uf160\5\uf1c0\5\uf220\5\uf280\5\uf2e0"+ "\1\u88a0\5\uf340\5\uf3a0\5\uf400\5\uf460\5\uf4c0\5\uf520\5\uf580"+ "\5\uf5e0\5\uf640\5\uf6a0\5\uf700\5\uf760\5\uf7c0\5\uf820\5\uf880"+ "\5\uf8e0\5\uf940\5\uf9a0\5\ufa00\5\ufa60\5\ufac0\5\ufb20\5\ufb80"+ "\5\ufbe0\5\ufc40\5\ufca0\5\ufd00\5\ufd60\5\ufdc0\5\ufe20\5\ufe80"+ "\5\ufee0\5\uff40\5\uffa0\6\0\6\140\6\300\6\u0120\6\u0180"+ "\1\u29c0\6\u01e0\6\u0240\6\u02a0\6\u0300\6\u0360\6\u03c0\6\u0420"+ "\6\u0480\6\u04e0\6\u0540\6\u05a0\6\u0600\6\u0660\6\u06c0\6\u0720"+ "\6\u0780\6\u07e0\6\u0840\6\u08a0\6\u0900\6\u0960\6\u09c0\6\u0a20"+ "\6\u0a80\6\u0ae0\6\u0b40\6\u0ba0\6\u0c00\6\u0c60\6\u0cc0\6\u0d20"+ "\6\u0d80\6\u0de0\6\u0e40\6\u0ea0\6\u0f00\6\u0f60\6\u0fc0\6\140"+ "\6\u1020\6\u1080\6\u10e0\6\u1140\6\u11a0\6\u1200\6\u1260\6\u12c0"+ "\6\u1320\6\u1380\6\u13e0\6\u1440\6\u14a0\6\u1500\6\u1560\6\u15c0"+ "\6\u1620\6\u1680\6\u16e0\6\u1740\6\u17a0\6\u1800\6\u1860\6\u18c0"+ "\6\u1920\6\u1980\6\u19e0\6\u1a40\6\u1aa0\6\u1b00\6\u1b60\6\u1bc0"+ "\6\u1c20\6\u1c80\6\u1ce0\6\u1d40\6\u1da0\6\u1e00\6\u1e60\6\u1ec0"+ "\6\u1f20\6\u1f80\6\u1fe0\6\u2040\6\u20a0\6\u2100\6\u2160\6\u21c0"+ "\6\u2220\6\u2280\6\u22e0\6\u2340\6\u23a0\6\u2400\6\u2460\6\u24c0"+ "\6\u2520\6\u2580\6\u25e0\6\u2640\6\u26a0\6\u2700\6\u2760\6\u27c0"+ "\6\u2820\6\u2880\6\u28e0\6\u2940\6\u29a0\6\u2a00\6\u2a60\6\u2ac0"+ "\6\u2b20\6\u2b80\6\u2be0\6\u2c40\6\u2ca0\4\u66e0\6\u2d00\6\u2d60"+ "\6\u2dc0\6\u2e20\6\u2e80\6\u2ee0\6\u2f40\6\u2fa0\6\u3000\6\u3060"+ "\6\u30c0\6\u3120\6\u3180\6\u31e0\6\u3240\6\u32a0\6\u3300\6\u3360"+ "\6\u33c0\6\u3420\6\u3480\6\u34e0\6\u3540\6\u35a0\6\u3600\6\u3660"+ "\6\u36c0\6\u3720\6\u3780\6\u37e0\6\u3840\6\u38a0\6\u3900\6\u3960"+ "\6\u39c0\6\u3a20\6\u3a80\6\u3ae0\6\u3b40\3\u0720\6\u3ba0\6\u3c00"+ "\6\u3c60\6\u3cc0\6\u3d20\6\u3d80\6\u3de0\6\u3e40\6\u3ea0\6\u3f00"+ "\6\u3f60\6\u3fc0\6\u4020\6\u4080\6\u40e0\6\u4140\6\u41a0\6\u4200"+ "\6\u4260\6\u42c0\6\u4320\6\u4380\6\u43e0\6\u4440\6\u44a0\6\u4500"+ "\6\u4560\6\u45c0\6\u4620\6\u4680\6\u46e0\6\u4740\6\u47a0\6\u4800"+ "\6\u4860\6\u48c0\6\u4920\6\u4980\6\u49e0\6\u4a40\6\u4aa0\6\u4b00"+ "\6\u4b60\6\u4bc0\6\u4c20\6\u4c80\6\u4ce0\6\u4d40\6\u4da0\6\u4e00"+ "\6\u4e60\6\u4ec0\6\u4f20\6\u4f80\6\u4fe0\6\u5040\6\u50a0\6\u5100"+ "\6\u5160\6\u51c0\6\u5220\6\u5280\6\u52e0\6\u5340\6\u53a0\6\u5400"+ "\6\u5460\6\u54c0\6\u5520\6\u5580\6\u55e0\6\u5640\6\u56a0\6\u5700"+ "\6\u5760\6\u57c0\6\u5820\6\u5880\6\u58e0\6\u5940\6\u59a0\6\u5a00"+ "\6\u5a60\6\u5ac0\6\u5b20\6\u5b80\6\u5be0\6\u5c40\6\u5ca0\6\u5d00"+ "\6\u5d60\6\u5dc0\6\u5e20\6\u5e80\6\u5ee0\6\u5f40\6\u5fa0\6\u6000"+ "\6\u6060\6\u60c0\6\u6120\6\u6180\6\u61e0\6\u6240\6\u62a0\6\u6300"+ "\6\u6360\6\u63c0\6\u6420\6\u6480\6\u64e0\3\ucfc0\6\u6540\6\u65a0"+ "\6\u6600\6\u6660\6\u66c0\6\u6720\6\u6780\6\u67e0\6\u6840\6\u68a0"+ "\6\u6900\6\u6960\6\u69c0\6\u6a20\6\u6a80\6\u6ae0\6\u6b40\6\u6ba0"+ "\6\u6c00\6\u6c60\6\u6cc0\6\u6d20\6\u6d80\6\u6de0\6\u6e40\6\u6ea0"+ "\6\u6f00\6\u6f60\6\u6fc0\6\u7020\6\u7080\6\u70e0\6\u7140\6\u71a0"+ "\6\u7200\6\u7260\6\u72c0\6\u7320\6\u7380\6\u73e0\6\u7440\6\u74a0"+ "\6\u7500\6\u7560\6\u75c0\6\u7620\6\u7680\6\u76e0\6\u7740\6\u77a0"+ "\6\u7800\6\u7860\6\u78c0\6\u7920\6\u7980\6\u79e0\6\u7a40\6\u7aa0"+ "\6\u7b00\6\u7b60\6\u7bc0\6\u7c20\6\u7c80\6\u7ce0\6\u7d40\6\u7da0"+ "\6\u7e00\6\u7e60\6\u7ec0\6\u7f20\6\u7f80\6\u7fe0\6\u8040\6\u80a0"+ "\6\u8100\6\u8160\6\u81c0\6\u8220\6\u8280\6\u82e0\6\u8340\6\u83a0"+ "\6\u8400\6\u8460\6\u84c0\6\u8520\6\u8580\6\u85e0\6\u8640\6\u86a0"+ "\6\u8700\6\u8760\6\u87c0\6\u8820\6\u8880\6\u88e0\6\u8940\6\u89a0"+ "\6\u8a00\6\u8a60\6\u8ac0\6\u8b20\6\u8b80\6\u8be0\6\u8c40\6\u8ca0"+ "\6\u8d00\6\u8d60\6\u8dc0\6\u8e20\6\u8e80\6\u8ee0\6\u8f40\6\u8fa0"+ "\6\u9000\6\u9060\6\u90c0\6\u9120\6\u9180\6\u91e0\6\u9240\6\u92a0"+ "\6\u9300\6\u9360\6\u93c0\6\u9420\6\u9480\6\u94e0\6\u9540\6\u95a0"+ "\6\u9600\6\u9660\6\u96c0\6\u9720\6\u9780\6\u97e0\6\u9840\6\u98a0"+ "\6\u9900\6\u9960\6\u99c0\6\u9a20\6\u9a80\6\u9ae0\6\u9b40\6\u9ba0"+ "\6\u9c00\6\u9c60\6\u9cc0\6\u9d20\6\u9d80\6\u9de0\6\u9e40\6\u9ea0"+ "\6\u9f00\6\u9f60\6\u9fc0\6\ua020\6\ua080\6\ua0e0\6\ua140\6\ua1a0"+ "\6\ua200\6\ua260\6\ua2c0\6\ua320\6\ua380\6\ua3e0\6\ua440\6\ua4a0"+ "\0\u0b40\6\ua500\6\ua560\6\ua5c0\6\ua620\6\ua680\0\u0b40\6\ua6e0"+ "\0\u0b40\0\u0b40\6\ua740\6\ua7a0\6\ua800\6\ua860\6\ua8c0\6\ua920"+ "\6\ua980\6\ua9e0\6\uaa40\6\uaaa0\6\uab00\6\uab60\6\uabc0\6\uac20"+ "\6\uac80\6\uace0\6\uad40\6\uada0\6\uae00\6\uae60\6\uaec0\6\uaf20"+ "\6\uaf80\6\uafe0\6\ub040\6\ub0a0\6\ub100\6\ub160\6\ub1c0\6\ub220"+ "\6\ub280\6\ub2e0\6\ub340\6\ub3a0\6\ub400\6\ub460\6\ub4c0\6\ub520"+ "\6\ub580\6\ub5e0\6\ub640\6\ub6a0\6\ub700\6\ub760\3\ub6a0\6\ub7c0"+ "\6\ub820\6\ub880\6\ub8e0\6\ub940\6\ub9a0\6\uba00\6\uba60\6\ubac0"+ "\6\ubb20\6\ubb80\6\ubbe0\6\ubc40\6\ubca0\6\ubd00\6\ubd60\6\ubdc0"+ "\6\ube20\6\ube80\6\ubee0\6\ubf40\6\ubfa0\6\uc000\6\uc060\6\uc0c0"+ "\6\uc120\2\u9820\6\uc180\4\u0560\6\uc1e0\6\uc240\6\uc2a0\6\uc300"+ "\6\uc360\6\uc3c0\6\uc420\6\uc480\6\uc4e0\6\uc540\6\uc5a0\6\uc600"+ "\6\uc660\6\uc6c0\6\uc720\6\uc780\6\uc7e0\6\uc840\6\uc8a0\6\uc900"+ "\6\uc960\6\uc9c0\6\uca20\6\uca80\6\ucae0\6\ucb40\6\ucba0\6\ucc00"+ "\6\ucc60\6\uccc0\6\ucd20\6\ucd80\6\ucde0\6\uce40\6\ucea0\6\ucf00"+ "\6\ucf60\6\ucfc0\6\ud020\6\ud080\6\ud0e0\6\ud140\6\ud1a0\1\ud220"+ "\6\ud200\6\ud260\6\ud2c0\6\ud320\6\ud380\6\ud3e0\6\ud440\6\ud4a0"+ "\6\ud500\6\ud560\6\ud5c0\6\ud620\6\ud680\6\ud6e0\4\ua160\6\ud740"+ "\6\ud7a0\6\ud800\6\ud860\6\ud8c0\6\ud920\6\ud980\6\ud9e0\6\uda40"+ "\6\udaa0\6\udb00\6\udb60\6\udbc0\6\udc20\6\udc80\6\udce0\6\udd40"+ "\6\udda0\6\ude00\6\ude60\6\udec0\6\udf20\6\udf80\6\udfe0\6\ue040"+ "\6\ue0a0\6\ue100\6\ue160\6\ue1c0\6\ue220\6\ue280\6\ue2e0\6\ue340"+ "\6\ue3a0\6\ue400\6\ue460\6\ue4c0\6\ue520\6\ue580\6\ue5e0\6\ue640"+ "\6\ue6a0\6\ue700\6\ue760\6\ue7c0\6\ue820\6\ue880\6\ue8e0\6\ue940"+ "\6\ue9a0\6\uea00\6\uea60\6\ueac0\6\ueb20\6\ueb80\6\uebe0\6\uec40"+ "\6\ueca0\6\ued00\6\ued60\6\uedc0\6\uee20\6\uee80\6\ueee0\6\uef40"+ "\6\uefa0\6\uf000\6\uf060\6\uf0c0\6\uf120\6\uf180\6\uf1e0\6\uf240"+ "\6\uf2a0\6\uf300\6\uf360\6\uf3c0\6\uf420\6\uf480\6\uf4e0\6\uf540"+ "\6\uf5a0\6\uf600\6\uf660\6\uf6c0\6\uf720\6\uf780\6\uf7e0\6\uf840"+ "\6\uf8a0\6\uf900\6\uf960\6\uf9c0\6\ufa20\6\ufa80\6\ufae0\6\ufb40"+ "\6\ufba0\6\ufc00\6\ufc60\6\ufcc0\6\ufd20\6\ufd80\6\ufde0\6\ufe40"+ "\6\ufea0\6\uff00\6\uff60\6\uffc0\7\40\7\200\7\340\7\u0140"+ "\7\u01a0\7\u0200\7\u0260\7\u02c0\7\u0320\7\u0380\7\u03e0\7\u0440"+ "\7\u04a0\7\u0500\7\u0560\7\u05c0\7\u0620\7\u0680\7\u06e0\7\u0740"+ "\7\u07a0\7\u0800\7\u0860\7\u08c0\7\u0920\7\u0980\7\u09e0\7\u0a40"+ "\7\u0aa0\7\u0b00\7\u0b60\7\u0bc0\7\u0c20\7\u0c80\7\u0ce0\7\u0d40"+ "\7\u0da0\7\u0e00\7\u0e60\7\u0ec0\7\u0f20\5\ub080\7\u0f80\7\u0fe0"+ "\7\u1040\7\u10a0\7\u1100\7\u1160\7\u11c0\7\u1220\7\u1280\7\u12e0"+ "\7\u1340\7\u13a0\7\u1400\7\u1460\7\u14c0\7\u1520\7\u1580\7\u15e0"+ "\7\u1640\7\u16a0\7\u1700\7\u1760\1\u8720\7\u17c0\7\u1820\7\u1880"+ "\7\u18e0\7\u1940\7\u19a0\7\u1a00\7\u1a60\7\u1ac0\7\u1b20\7\u1b80"+ "\7\u1be0\7\u1c40\7\u1ca0\7\u1d00\7\u1d60\7\u1dc0\7\u1e20\7\u1e80"+ "\7\u1ee0\7\u1f40\7\u1fa0\7\u2000\7\u2060\7\u20c0\7\u2120\7\u2180"+ "\7\u21e0\7\u2240\7\u22a0\7\u2300\7\u2360\7\u23c0\7\u2420\7\u2480"+ "\7\u24e0\7\u2540\7\u25a0\7\u2600\7\u2660\7\u26c0\7\u2720\7\u2780"+ "\7\u27e0\7\u2840\7\u28a0\7\u2900\7\u2960\7\u29c0\7\u2a20\7\u2a80"+ "\7\u2ae0\7\u2b40\7\u2ba0\7\u2c00\7\u2c60\7\u2cc0\7\u2d20\7\u2d80"+ "\3\ud020\7\u2de0\7\u2e40\7\u2ea0\7\u2f00\7\u2f60\7\u2fc0\7\u3020"+ "\7\u3080\7\u30e0\7\u3140\7\u31a0\7\u3200\7\u3260\7\u32c0\7\u3320"+ "\7\u3380\7\u33e0\7\u3440\7\u34a0\7\u3500\7\u3560\7\u35c0\7\u3620"+ "\7\u3680\7\u36e0\7\u3740\7\u37a0\7\u3800\7\u3860\7\u38c0\7\u3920"+ "\7\u3980\7\u39e0\7\u3a40\7\u3aa0\1\ue4e0\7\u3b00\7\u3b60\7\u3bc0"+ "\7\u3c20\7\u3c80\7\u3ce0\7\u3d40\7\u3da0\7\u3e00\7\u3e60\7\u3ec0"+ "\7\u3f20\7\u3f80\7\u3fe0\7\u4040\7\u40a0\7\u4100\7\u4160\7\u41c0"+ "\7\u4220\7\u4280\7\u42e0\7\u4340\7\u43a0\7\u4400\7\u4460\7\u44c0"+ "\7\u4520\7\u4580\7\u45e0\7\u4640\7\u46a0\7\u4700\7\u4760\7\u47c0"+ "\7\u4820\7\u4880\7\u48e0\7\u4940\7\u49a0\7\u4a00\7\u4a60\7\u4ac0"+ "\7\u4b20\7\u4b80\7\u4be0\7\u4c40\7\u4ca0\7\u4d00\7\u4d60\7\u4dc0"+ "\7\u4e20\7\u4e80\7\u4ee0\7\u4f40\7\u4fa0\7\u5000\7\u5060\7\u50c0"+ "\7\u5120\7\u5180\7\u51e0\7\u5240\7\u52a0\7\u5300\7\u5360\7\u53c0"+ "\7\u5420\7\u5480\7\u54e0\7\u5540\7\u55a0\7\u5600\7\u5660\7\u56c0"+ "\7\u5720\7\u5780\7\u57e0\7\u5840\7\u58a0\7\u5900\7\u5960\7\u59c0"+ "\7\u5a20\7\u5a80\7\u5ae0\7\u5b40\7\u5ba0\7\u5c00\7\u5c60\7\u5cc0"+ "\7\u5d20\7\u5d80\7\u5de0\7\u5e40\7\u5ea0\7\u5f00\7\u5f60\7\u5fc0"+ "\7\u6020\7\u6080\7\u60e0\7\u6140\7\u61a0\7\u6200\7\u6260\7\u62c0"+ "\7\u6320\7\u6380\7\u63e0\7\u6440\7\u64a0\7\u6500\7\u6560\7\u65c0"+ "\7\u6620\7\u6680\7\u66e0\7\u6740\7\u67a0\7\u6800\7\u6860\7\u68c0"+ "\7\u6920\7\u6980\7\u69e0\7\u6a40\7\u6aa0\7\u6b00\7\u6b60\7\u6bc0"+ "\7\u6c20\7\u6c80\7\u6ce0\7\u6d40\7\u6da0\7\u6e00\7\u6e60\7\u6ec0"+ "\7\u6f20\7\u6f80\7\u6fe0\7\u7040\7\u70a0\7\u7100\7\u7160\7\u71c0"+ "\7\u7220\7\u7280\7\u72e0\7\u7340\7\u73a0\7\u7400\7\u7460\7\u74c0"+ "\7\u7520\7\u7580\6\u0a20\7\u75e0\7\u7640\7\u76a0\7\u7700\7\u7760"+ "\7\u77c0\7\u7820\7\u7880\7\u78e0\7\u7940\7\u79a0\7\u7a00\7\u7a60"+ "\7\u7ac0\7\u7b20\7\u7b80\7\u7be0\7\u7c40\7\u7ca0\7\u7d00\7\u7d60"+ "\7\u7dc0\7\u7e20\7\u7e80\7\u7ee0\7\u7f40\7\u7fa0\7\u8000\7\u8060"+ "\7\u80c0\7\u8120\7\u8180\7\u81e0\7\u8240\7\u82a0\7\u8300\7\u8360"+ "\7\u83c0\7\u8420\7\u8480\7\u84e0\7\u8540\7\u85a0\7\u8600\7\u8660"+ "\7\u86c0\7\u8720\7\u8780\7\u87e0\7\u8840\7\u88a0\7\u8900\7\u8960"+ "\7\u89c0\7\u8a20\7\u8a80\7\u8ae0\7\u8b40\7\u8ba0\7\u8c00\7\u8c60"+ "\7\u8cc0\7\u8d20\7\u8d80\7\u8de0\7\u8e40\7\u8ea0\7\u8f00\7\u8f60"+ "\7\u8fc0\7\u9020\7\u9080\7\u90e0\7\u9140\7\u91a0\7\u9200\7\u9260"+ "\7\u92c0\7\u9320\7\u9380\7\u93e0\7\u9440\7\u94a0\7\u9500\7\u9560"+ "\7\u95c0\7\u9620\7\u9680\7\u96e0\7\u9740\7\u97a0\7\u9800\7\u9860"+ "\7\u98c0\7\u9920\7\u9980\7\u99e0\7\u9a40\7\u9aa0\7\u9b00\7\u9b60"+ "\7\u9bc0\7\u9c20\7\u9c80\7\u9ce0\7\u9d40\7\u9da0\7\u9e00\7\u9e60"+ "\7\u9ec0\7\u9f20\7\u9f80\7\u9fe0\7\ua040\7\ua0a0\7\ua100\7\ua160"+ "\7\ua1c0\7\ua220\7\ua280\7\ua2e0\7\ua340\7\ua3a0\7\ua400\7\ua460"+ "\7\ua4c0\7\ua520\7\ua580\7\ua5e0\7\ua640\7\ua6a0\7\ua700\7\ua760"+ "\7\ua7c0\7\ua820\7\ua880\7\ua8e0\7\ua940\7\ua9a0\7\uaa00\7\uaa60"+ "\7\uaac0\7\uab20\7\uab80\7\uabe0\7\uac40\7\uaca0\7\uad00\7\uad60"+ "\7\uadc0\7\uae20\7\uae80\7\uaee0\7\uaf40\7\uafa0\7\ub000\7\ub060"+ "\7\ub0c0\7\ub120\7\ub180\7\ub1e0\7\ub240\7\ub2a0\7\ub300\7\ub360"+ "\7\ub3c0\7\ub420\7\ub480\7\ub4e0\7\ub540\7\ub5a0\7\ub600\7\ub660"+ "\7\ub6c0\7\ub720\7\ub780\7\ub7e0\7\ub840\7\ub8a0\7\ub900\7\ub960"+ "\7\ub9c0\7\uba20\7\uba80\7\ubae0\7\ubb40\7\ubba0\7\ubc00\7\ubc60"+ "\7\ubcc0\7\ubd20\7\ubd80\7\ubde0\7\ube40\7\ubea0\7\ubf00\7\ubf60"+ "\7\ubfc0\7\uc020\7\uc080\7\uc0e0\7\uc140\7\uc1a0\7\uc200\7\uc260"+ "\7\uc2c0\7\uc320\7\uc380\7\uc3e0\7\uc440\7\uc4a0\7\uc500\7\uc560"+ "\7\uc5c0\7\uc620\7\uc680\7\uc6e0\7\uc740\7\uc7a0\7\uc800\7\uc860"+ "\7\uc8c0\7\uc920\7\uc980\7\uc9e0\7\uca40\7\ucaa0\7\ucb00\7\ucb60"+ "\7\ucbc0\7\ucc20\7\ucc80\7\ucce0\7\ucd40\7\ucda0\7\uce00\7\uce60"+ "\7\ucec0\7\ucf20\7\ucf80\7\ucfe0\7\ud040\7\ud0a0\7\ud100\7\ud160"+ "\7\ud1c0\7\ud220\7\ud280\7\ud2e0\7\ud340\7\ud3a0\7\ud400\7\ud460"+ "\7\ud4c0\7\ud520\4\uc740\7\ud580\7\ud5e0\7\ud640\7\ud6a0\7\ud700"+ "\7\ud760\7\ud7c0\7\ud820\7\ud880\7\ud8e0\7\ud940\7\ud9a0\7\uda00"+ "\3\u52e0\7\uda60\7\udac0\7\udb20\7\udb80\7\udbe0\7\udc40\7\udca0"+ "\7\udd00\7\udd60\7\uddc0\7\ude20\7\ude80\7\udee0\7\udf40\7\udfa0"+ "\7\ue000\7\ue060\7\ue0c0\7\ue120\7\ue180\7\ue1e0\7\ue240\7\ue2a0"+ "\7\ue300\7\ue360\7\ue3c0\7\ue420\7\ue480\7\ue4e0\7\ue540\7\ue5a0"+ "\7\ue600\7\ue660\7\ue6c0\7\ue720\7\ue780\7\ue7e0\7\ue840\7\ue8a0"+ "\7\ue900\7\ue960\7\ue9c0\7\uea20\7\uea80\7\ueae0\7\ueb40\7\ueba0"+ "\7\uec00\7\uec60\7\uecc0\7\ued20\7\ued80\7\uede0\7\uee40\7\ueea0"+ "\7\uef00\7\uef60\7\uefc0\3\u31e0\7\uf020\7\uf080\7\uf0e0\7\uf140"+ "\7\uf1a0\7\uf200\7\uf260\7\uf2c0\7\uf320\7\uf380\7\uf3e0\7\uf440"+ "\7\uf4a0\7\uf500\7\uf560\7\uf5c0\7\uf620\7\uf680\7\uf6e0\7\uf740"+ "\7\uf7a0\7\uf800\7\uf860\7\uf8c0\7\uf920\7\uf980\7\uf9e0\7\ufa40"+ "\7\ufaa0\7\ufb00\7\ufb60\7\ufbc0\7\ufc20\7\ufc80\7\ufce0\7\ufd40"+ "\7\ufda0\7\ufe00\7\ufe60\7\ufec0\7\uff20\7\uff80\7\uffe0\10\100"+ "\10\240\10\u0100\10\u0160\10\u01c0\10\u0220\10\u0280\10\u02e0\10\u0340"+ "\10\u03a0\10\u0400\10\u0460\10\u04c0\10\u0520\10\u0580\10\u05e0\10\u0640"+ "\10\u06a0\10\u0700\10\u0760\10\u07c0\10\u0820\10\u0880\10\u08e0\10\u0940"+ "\10\u09a0\10\u0a00\10\u0a60\10\u0ac0\10\u0b20\10\u0b80\4\u4700\10\u0be0"+ "\10\u0c40\10\u0ca0\10\u0d00\10\u0d60\10\u0dc0\10\u0e20\10\u0e80\10\u0ee0"+ "\10\u0f40\10\u0fa0\10\u1000\10\u1060\10\u10c0\10\u1120\10\u1180\10\u11e0"+ "\10\u1240\10\u12a0\10\u1300\10\u1360\10\u13c0\10\u1420\10\u1480\10\u14e0"+ "\10\u1540\3\ue100\10\u15a0\10\u1600\10\u1660\10\u16c0\10\u1720\10\u1780"+ "\10\u17e0\10\u1840\10\u18a0\10\u1900\10\u1960\10\u19c0\10\u1a20\10\u1a80"+ "\10\u1ae0\10\u1b40\10\u1ba0\10\u1c00\10\u1c60\10\u1cc0\10\u1d20\10\u1d80"+ "\10\u1de0\10\u1e40\10\u1ea0\10\u1f00\10\u1f60\10\u1fc0\10\u2020\10\u2080"+ "\10\u20e0\10\u2140\10\u21a0\10\u2200\10\u2260\10\u22c0\10\u2320\10\u2380"+ "\10\u23e0\10\u2440\10\u24a0\10\u2500\10\u2560\10\u25c0\10\u2620\10\u2680"+ "\10\u26e0\10\u2740\10\u27a0\10\u2800\10\u2860\10\u28c0\10\u2920\10\u2980"+ "\10\u29e0\10\u2a40\10\u2aa0\10\u2b00\10\u2b60\10\u2bc0\10\u2c20\10\u2c80"+ "\10\u2ce0\10\u2d40\10\u2da0\10\u2e00\10\u2e60\10\u2ec0\10\u2f20\10\u2f80"+ "\10\u2fe0\10\u3040\10\u30a0\10\u3100\10\u3160\10\u31c0\10\u3220\10\u3280"+ "\10\u32e0\10\u3340\10\u33a0\10\u3400\10\u3460\10\u34c0\10\u3520\10\u3580"+ "\10\u35e0\10\u3640\10\u36a0\10\u3700\10\u3760\10\u37c0\10\u3820\10\u3880"+ "\10\u38e0\10\u3940\10\u39a0\10\u3a00\10\u3a60\10\u3ac0\10\u3b20\10\u3b80"+ "\10\u3be0\10\u3c40\10\u3ca0\10\u3d00\10\u3d60\10\u3dc0\2\u5860\10\u3e20"+ "\10\u3e80\10\u3ee0\10\u3f40\10\u3fa0\10\u4000\10\u4060\10\u40c0\10\u4120"+ "\10\u4180\10\u41e0\10\u4240\10\u42a0\10\u4300\10\u4360\10\u43c0\10\u4420"+ "\10\u4480\10\u44e0\10\u4540\10\u45a0\10\u4600\10\u4660\10\u46c0\10\u4720"+ "\10\u4780\10\u47e0\10\u4840\10\u48a0\10\u4900\10\u4960\10\u49c0\10\u4a20"+ "\10\u4a80\10\u4ae0\10\u4b40\10\u4ba0\10\u4c00\10\u4c60\10\u4cc0\10\u4d20"+ "\10\u4d80\10\u4de0\10\u4e40\10\u4ea0\10\u4f00\10\u4f60\10\u4fc0\10\u5020"+ "\10\u5080\10\u50e0\10\u5140\10\u51a0\10\u5200\10\u5260\10\u52c0\10\u5320"+ "\10\u5380\10\u53e0\10\u5440\0\u0b40\10\u54a0\10\u5500\10\u5560\10\u55c0"+ "\10\u5620\10\u5680\10\u56e0\10\u5740\10\u57a0\10\u5800\10\u5860\10\u58c0"+ "\10\u5920\10\u5980\10\u59e0\10\u5a40\10\u5aa0\10\u5b00\10\u5b60\10\u5bc0"+ "\10\u5c20\10\u5c80\10\u5ce0\10\u5d40\10\u5da0\10\u5e00\10\u5e60\10\u5ec0"+ "\10\u5f20\10\u5f80\10\u5fe0\10\u6040\10\u60a0\10\u6100\10\u6160\6\ube80"+ "\10\u61c0\10\u6220\10\u6280\10\u62e0\10\u6340\10\u63a0\10\u6400\10\u6460"+ "\10\u64c0\10\u6520\10\u6580\10\u65e0\10\u6640\10\u66a0\10\u6700\10\u6760"+ "\10\u67c0\10\u6820\10\u6880\10\u68e0\10\u6940\10\u69a0\10\u6a00\10\u6a60"+ "\10\u6ac0\10\u6b20\10\u6b80\10\u6be0\10\u6c40\10\u6ca0\10\u6d00\10\u6d60"+ "\10\u6dc0\10\u6e20\10\u6e80\10\u6ee0\10\u6f40\10\u6fa0\10\u7000\10\u7060"+ "\10\u70c0\10\u7120\10\u7180\10\u71e0\10\u7240\10\u72a0\10\u7300\10\u7360"+ "\10\u73c0\10\u7420\10\u7480\10\u74e0\10\u7540\10\u75a0\10\u7600\10\u7660"+ "\10\u76c0\10\u7720\10\u7780\10\u77e0\10\u7840\10\u78a0\10\u7900\10\u7960"+ "\10\u79c0\10\u7a20\10\u7a80\10\u7ae0\10\u7b40\10\u7ba0\10\u7c00\10\u7c60"+ "\10\u7cc0\10\u7d20\10\u7d80\10\u7de0\10\u7e40\10\u7ea0\10\u7f00\10\u7f60"+ "\10\u7fc0\10\u8020\10\u8080\10\u80e0\10\u8140\10\u81a0\10\u8200\10\u8260"+ "\10\u82c0\10\u8320\10\u8380\10\u83e0\10\u8440\10\u84a0\10\u8500\10\u8560"+ "\10\u85c0\10\u8620\10\u8680\10\u86e0\10\u8740\10\u87a0\10\u8800\10\u8860"+ "\10\u88c0\10\u8920\10\u8980\10\u89e0\10\u8a40\10\u8aa0\10\u8b00\10\u8b60"+ "\10\u8bc0\10\u8c20\10\u8c80\10\u8ce0\10\u8d40\10\u8da0\6\u49e0\10\u8e00"+ "\10\u8e60\10\u8ec0\10\u8f20\10\u8f80\10\u8fe0\10\u9040\10\u90a0\10\u9100"+ "\10\u9160\10\u91c0\10\u9220\10\u9280\10\u92e0\10\u9340\10\u93a0\10\u9400"+ "\10\u9460\10\u94c0\10\u9520\10\u9580\10\u95e0\10\u9640\10\u96a0\10\u9700"+ "\10\u9760\10\u97c0\10\u9820\10\u9880\10\u98e0\10\u9940\10\u99a0\10\u9a00"+ "\10\u9a60\10\u9ac0\10\u9b20\10\u9b80\10\u9be0\10\u9c40\10\u9ca0\10\u9d00"+ "\10\u9d60\10\u9dc0\10\u9e20\10\u9e80\10\u9ee0\10\u9f40\10\u9fa0\10\ua000"+ "\10\ua060\10\ua0c0\10\ua120\10\ua180\10\ua1e0\10\ua240\10\ua2a0\10\ua300"+ "\10\ua360\10\ua3c0\10\ua420\10\ua480\10\ua4e0\10\ua540\10\ua5a0\10\ua600"+ "\10\ua660\10\ua6c0\10\ua720\10\ua780\10\ua7e0\10\ua840\10\ua8a0\10\ua900"+ "\10\ua960\10\ua9c0\10\uaa20\10\uaa80\10\uaae0\10\uab40\10\uaba0\10\uac00"+ "\10\uac60\10\uacc0\10\uad20\10\uad80\10\uade0\10\uae40\10\uaea0\10\uaf00"+ "\10\uaf60\10\uafc0\10\ub020\10\ub080\10\ub0e0\10\ub140\10\ub1a0\10\ub200"+ "\10\ub260\10\ub2c0\10\ub320\10\ub380\10\ub3e0\10\ub440\10\ub4a0\10\ub500"+ "\10\ub560\10\ub5c0\10\ub620\10\ub680\10\ub6e0\10\ub740\10\ub7a0\10\ub800"+ "\10\ub860\10\ub8c0\10\ub920\10\ub980\10\ub9e0\10\uba40\10\ubaa0\10\ubb00"+ "\10\ubb60\10\ubbc0\10\ubc20\10\ubc80\10\ubce0\10\ubd40\10\ubda0\10\ube00"+ "\10\ube60\10\ubec0\10\ubf20\10\ubf80\10\ubfe0\10\uc040\10\uc0a0\10\uc100"+ "\10\uc160\10\uc1c0\10\uc220\10\uc280\10\uc2e0\10\uc340\10\uc3a0\10\uc400"+ "\10\uc460\10\uc4c0\10\uc520\10\uc580\10\uc5e0\10\uc640\10\uc6a0\10\uc700"+ "\10\uc760\10\uc7c0\10\uc820\10\uc880\10\uc8e0\10\uc940\10\uc9a0\10\uca00"+ "\10\uca60\10\ucac0\10\ucb20\10\ucb80\10\ucbe0\10\ucc40\10\ucca0\10\ucd00"+ "\10\ucd60\10\ucdc0\10\uce20\10\uce80\10\ucee0\10\ucf40\10\ucfa0\10\ud000"+ "\10\ud060\10\ud0c0\10\ud120\10\ud180\10\ud1e0\10\ud240\10\ud2a0\10\ud300"+ "\10\ud360\10\ud3c0\10\ud420\10\ud480\10\ud4e0\10\ud540\10\ud5a0\10\ud600"+ "\10\ud660\10\ud6c0\10\ud720\10\ud780\10\ud7e0\10\ud840\10\ud8a0\10\ud900"+ "\10\ud960\10\ud9c0\10\uda20\10\uda80\10\udae0\10\udb40\10\udba0\10\udc00"+ "\10\udc60\10\udcc0\10\udd20\10\udd80\10\udde0\10\ude40\10\udea0\10\udf00"+ "\10\udf60\10\udfc0\10\ue020\10\ue080\10\ue0e0\10\ue140\10\ue1a0\10\ue200"+ "\10\ue260\10\ue2c0\10\ue320\10\ue380\10\ue3e0\10\ue440\10\ue4a0\10\ue500"+ "\10\ue560\10\ue5c0\10\ue620\10\ue680\10\ue6e0\10\ue740\10\ue7a0\10\ue800"+ "\10\ue860\10\ue8c0\10\ue920\10\ue980\10\ue9e0\10\uea40\10\ueaa0\10\ueb00"+ "\10\ueb60\10\uebc0\10\uec20\10\uec80\10\uece0\6\udaa0\10\ued40\10\ueda0"+ "\10\uee00\10\uee60\10\ueec0\10\uef20\10\uef80\10\uefe0\10\uf040\10\uf0a0"+ "\10\uf100\10\uf160\10\uf1c0\10\uf220\10\uf280\10\uf2e0\10\uf340\10\uf3a0"+ "\10\uf400\10\uf460\10\uf4c0\10\uf520\10\uf580\10\uf5e0\10\uf640\10\uf6a0"+ "\10\uf700\10\uf760\10\uf7c0\10\uf820\10\uf880\10\uf8e0\10\uf940\10\uf9a0"+ "\10\ufa00\10\ufa60\10\ufac0\10\ufb20\10\ufb80\10\ufbe0\10\ufc40\10\ufca0"+ "\10\ufd00\10\ufd60\10\ufdc0\2\u0ca0\10\ufe20\10\ufe80\10\ufee0\10\uff40"+ "\10\uffa0\11\0\11\140\11\300\11\u0120\11\u0180\11\u01e0\11\u0240"+ "\11\u02a0\11\u0300\11\u0360\11\u03c0\11\u0420\11\u0480\11\u04e0\11\u0540"+ "\11\u05a0\11\u0600\11\u0660\11\u06c0\11\u0720\11\u0780\11\u07e0\11\u0840"+ "\11\u08a0\11\u0900\11\u0960\11\u09c0\11\u0a20\11\u0a80\11\u0ae0\11\u0b40"+ "\11\u0ba0\11\u0c00\11\u0c60\11\u0cc0\11\u0d20\11\u0d80\11\u0de0\11\u0e40"+ "\11\u0ea0\11\u0f00\11\u0f60\11\u0fc0\11\u1020\11\u1080\11\u10e0\11\u1140"+ "\11\u11a0\11\u1200\11\u1260\11\u12c0\11\u1320\11\u1380\11\u13e0\11\u1440"+ "\11\u14a0\11\u1500\11\u1560\3\u3a80\11\u15c0\11\u1620\11\u1680\11\u16e0"+ "\11\u1740\11\u17a0\11\u1800\11\u1860\11\u18c0\11\u1920\11\u1980\11\u19e0"+ "\11\u1a40\11\u1aa0\11\u1b00\11\u1b60\11\u1bc0\11\u1c20\11\u1c80\11\u1ce0"+ "\11\u1d40\11\u1da0\11\u1e00\11\u1e60\11\u1ec0\11\u1f20\11\u1f80\11\u1fe0"+ "\11\u2040\11\u20a0\11\u2100\11\u2160\11\u21c0\11\u2220\11\u2280\11\u22e0"+ "\11\u2340\11\u23a0\11\u2400\11\u2460\11\u24c0\11\u2520\11\u2580\11\u25e0"+ "\11\u2640\11\u26a0\11\u2700\11\u2760\11\u27c0\11\u2820\11\u2880\11\u28e0"+ "\11\u2940\11\u29a0\11\u2a00\11\u2a60\11\u2ac0\11\u2b20\11\u2b80\11\u2be0"+ "\11\u2c40\11\u2ca0\11\u2d00\11\u2d60\11\u2dc0\11\u2e20\11\u2e80\11\u2ee0"+ "\11\u2f40\11\u2fa0\11\u3000\11\u3060\11\u30c0\11\u3120\11\u3180\11\u31e0"+ "\11\u3240\11\u32a0\11\u3300\11\u3360\11\u33c0\11\u3420\11\u3480\11\u34e0"+ "\11\u3540\11\u35a0\11\u3600\11\u3660\11\u36c0\11\u3720\11\u3780\11\u37e0"+ "\11\u3840\11\u38a0\11\u3900\11\u3960\11\u39c0\11\u3a20\11\u3a80\11\u3ae0"+ "\11\u3b40\11\u3ba0\11\u3c00\11\u3c60\11\u3cc0\11\u3d20\11\u3d80\11\u3de0"+ "\11\u3e40\11\u3ea0\11\u3f00\11\u3f60\11\u3fc0\11\u4020\11\u4080\11\u40e0"+ "\11\u4140\11\u41a0\11\u4200\11\u4260\11\u42c0\11\u4320\11\u4380\11\u43e0"+ "\11\u4440\11\u44a0\11\u4500\11\u4560\11\u45c0\11\u4620\11\u4680\11\u46e0"+ "\11\u4740\11\u47a0\11\u4800\11\u4860\11\u48c0\11\u4920\11\u4980\11\u49e0"+ "\11\u4a40\11\u4aa0\11\u4b00\11\u4b60\10\uac60\11\u4bc0\11\u4c20\11\u4c80"+ "\11\u4ce0\11\u4d40\11\u4da0\11\u4e00\11\u4e60\11\u4ec0\11\u4f20\11\u4f80"+ "\11\u4fe0\11\u5040\11\u50a0\11\u5100\11\u5160\11\u51c0\11\u5220\11\u5280"+ "\11\u52e0\11\u5340\11\u53a0\11\u5400\11\u5460\11\u54c0\11\u5520\11\u5580"+ "\11\u55e0\11\u5640\11\u56a0\11\u5700\11\u5760\11\u57c0\11\u5820\11\u5880"+ "\11\u58e0\11\u5940\11\u59a0\11\u5a00\11\u5a60\11\u5ac0\11\u5b20\11\u5b80"+ "\11\u5be0\11\u5c40\11\u5ca0\11\u5d00\11\u5d60\11\u5dc0\11\u5e20\11\u5e80"+ "\11\u5ee0\11\u5f40\11\u5fa0\11\u6000\11\u6060\11\u60c0\11\u6120\11\u6180"+ "\11\u61e0\11\u6240\11\u62a0\11\u6300\11\u6360\11\u63c0\11\u6420\11\u6480"+ "\11\u64e0\11\u6540\11\u65a0\11\u6600\11\u6660\11\u66c0\11\u6720\11\u6780"+ "\11\u67e0\11\u6840\11\u68a0\11\u6900\11\u6960\11\u69c0\11\u6a20\11\u6a80"+ "\11\u6ae0\11\u6b40\11\u6ba0\11\u6c00\11\u6c60\11\u6cc0\11\u6d20\11\u6d80"+ "\11\u6de0\11\u6e40\11\u6ea0\11\u6f00\11\u6f60\11\u6fc0\11\u7020\11\u7080"+ "\11\u70e0\11\u7140\11\u71a0\11\u7200\11\u7260\11\u72c0\11\u7320\11\u7380"+ "\11\u73e0\11\u7440\11\u74a0\11\u7500\11\u7560\11\u75c0\11\u7620\11\u7680"+ "\11\u76e0\11\u7740\11\u77a0\11\u7800\11\u7860\3\ue160\11\u78c0\11\u7920"+ "\11\u7980\11\u79e0\11\u7a40\11\u7aa0\11\u7b00\11\u7b60\11\u7bc0\11\u7c20"+ "\11\u7c80\11\u7ce0\11\u7d40\11\u7da0\11\u7e00\11\u7e60\11\u7ec0\11\u7f20"+ "\11\u7f80\11\u7fe0\11\u8040\11\u80a0\11\u8100\11\u8160\11\u81c0\11\u8220"+ "\11\u8280\11\u82e0\11\u8340\11\u83a0\11\u8400\11\u8460\11\u84c0\11\u8520"+ "\11\u8580\11\u85e0\11\u8640\11\u86a0\11\u8700\11\u8760\11\u87c0\11\u8820"+ "\11\u8880\11\u88e0\11\u8940\11\u89a0\11\u8a00\11\u8a60\11\u8ac0\11\u8b20"+ "\11\u8b80\11\u8be0\11\u8c40\11\u8ca0\11\u8d00\11\u8d60\11\u8dc0\11\u8e20"+ "\11\u8e80\11\u8ee0\11\u8f40\11\u8fa0\11\u9000\11\u9060\11\u90c0\11\u9120"+ "\11\u9180\11\u91e0\11\u9240\11\u92a0\11\u9300\11\u9360\11\u93c0\11\u9420"+ "\11\u9480\11\u94e0\11\u9540\11\u95a0\11\u9600\11\u9660\11\u96c0\11\u9720"+ "\11\u9780\11\u97e0\11\u9840\11\u98a0\11\u9900\11\u9960\11\u99c0\11\u9a20"+ "\11\u9a80\11\u9ae0\11\u9b40\11\u9ba0\11\u9c00\11\u9c60\11\u9cc0\11\u9d20"+ "\11\u9d80\11\u9de0\0\uf660\11\u9e40\11\u9ea0\11\u9f00\11\u9f60\11\u9fc0"+ "\11\ua020\11\ua080\11\ua0e0\11\ua140\11\ua1a0\11\ua200\11\ua260\11\ua2c0"+ "\11\ua320\11\ua380\11\ua3e0\11\ua440\11\ua4a0\11\ua500\11\ua560\11\ua5c0"+ "\11\ua620\11\ua680\11\ua6e0\11\ua740\11\ua7a0\11\ua800\11\ua860\11\ua8c0"+ "\11\ua920\11\ua980\11\ua9e0\11\uaa40\11\uaaa0\11\uab00\11\uab60\11\uabc0"+ "\11\uac20\11\uac80\11\uace0\11\uad40\11\uada0\11\uae00\11\uae60\11\uaec0"+ "\11\uaf20\11\uaf80\11\uafe0\11\ub040\11\ub0a0\11\ub100\11\ub160\11\ub1c0"+ "\11\ub220\11\ub280\11\ub2e0\11\ub340\11\ub3a0\11\ub400\11\ub460\11\ub4c0"+ "\11\ub520\11\ub580\11\ub5e0\11\ub640\11\ub6a0\11\ub700\11\ub760\11\ub7c0"+ "\11\ub820\11\ub880\11\ub8e0\11\ub940\11\ub9a0\11\uba00\11\uba60\11\ubac0"+ "\11\ubb20\11\ubb80\11\ubbe0\11\ubc40\11\ubca0\11\ubd00\11\ubd60\11\ubdc0"+ "\11\ube20\11\ube80\11\ubee0\11\ubf40\11\ubfa0\11\uc000\11\uc060\11\uc0c0"+ "\11\uc120\11\uc180\11\uc1e0\11\uc240\11\uc2a0\11\uc300\11\uc360\11\uc3c0"+ "\11\uc420\11\uc480\11\uc4e0\11\uc540\11\uc5a0\11\uc600\5\u0b20\11\uc660"+ "\11\uc6c0\11\uc720\11\uc780\11\uc7e0\11\uc840\11\uc8a0\11\uc900\11\uc960"+ "\11\uc9c0\11\uca20\11\uca80\11\ucae0\11\ucb40\11\ucba0\11\ucc00\11\ucc60"+ "\11\uccc0\11\ucd20\11\ucd80\11\ucde0\11\uce40\11\ucea0\11\ucf00\11\ucf60"+ "\11\ucfc0\11\ud020\11\ud080\11\ud0e0\11\ud140\11\ud1a0\11\ud200\11\ud260"+ "\11\ud2c0\11\ud320\11\ud380\11\ud3e0\11\ud440\11\ud4a0\11\ud500\11\ud560"+ "\11\ud5c0\11\ud620\11\ud680\11\ud6e0\11\ud740\11\ud7a0\11\ud800\11\ud860"+ "\11\ud8c0\11\ud920\11\ud980\11\ud9e0\11\uda40\11\udaa0\11\udb00\11\udb60"+ "\11\udbc0\11\udc20\11\udc80\11\udce0\11\udd40\5\ud840\11\udda0\11\ude00"+ "\11\ude60\11\udec0\11\udf20\11\udf80\11\udfe0\11\ue040\11\ue0a0\11\ue100"+ "\11\ue160\11\ue1c0\11\ue220\11\ue280\11\ue2e0\11\ue340\11\ue3a0\11\ue400"+ "\11\ue460\11\ue4c0\11\ue520\11\ue580\11\ue5e0\11\ue640\11\ue6a0\11\ue700"+ "\11\ue760\11\ue7c0\11\ue820\11\ue880\11\ue8e0\11\ue940\11\ue9a0\11\uea00"+ "\11\uea60\11\ueac0\11\ueb20\11\ueb80\11\uebe0\11\uec40\11\ueca0\11\ued00"+ "\11\ued60\11\uedc0\11\uee20\11\uee80\11\ueee0\11\uef40\11\uefa0\11\uf000"+ "\11\uf060\11\uf0c0\11\uf120\11\uf180\11\uf1e0\11\uf240\11\uf2a0\11\uf300"+ "\11\uf360\11\uf3c0\11\uf420\11\uf480\11\uf4e0\11\uf540\11\uf5a0\11\uf600"+ "\11\uf660\11\uf6c0\11\uf720\11\uf780\11\uf7e0\11\uf840\11\uf8a0\11\uf900"+ "\11\uf960\11\uf9c0\11\ufa20\11\ufa80\11\ufae0\11\ufb40\11\ufba0\11\ufc00"+ "\11\ufc60\11\ufcc0\10\u05e0\11\ufd20\11\ufd80\11\ufde0\11\ufe40\11\ufea0"+ "\11\uff00\11\uff60\11\uffc0\12\40\12\200\12\340\12\u0140\12\u01a0"+ "\12\u0200\12\u0260\12\u02c0\12\u0320\12\u0380\12\u03e0\12\u0440\12\u04a0"+ "\12\u0500\12\u0560\12\u05c0\12\u0620\12\u0680\12\u06e0\12\u0740\12\u07a0"+ "\12\u0800\12\u0860\12\u08c0\12\u0920\12\u0980\12\u09e0\12\u0a40\12\u0aa0"+ "\12\u0b00\12\u0b60\12\u0bc0\12\u0c20\12\u0c80\12\u0ce0\12\u0d40\12\u0da0"+ "\12\u0e00\12\u0e60\12\u0ec0\12\u0f20\12\u0f80\12\u0fe0\12\u1040\12\u10a0"+ "\12\u1100\12\u1160\12\u11c0\12\u1220\12\u1280\12\u12e0\12\u1340\12\u13a0"+ "\12\u1400\12\u1460\12\u14c0\12\u1520\12\u1580\12\u15e0\12\u1640\12\u16a0"+ "\3\u03c0\12\u1700\12\u1760\12\u17c0\12\u1820\12\u1880\12\u18e0\12\u1940"+ "\12\u19a0\12\u1a00\12\u1a60\12\u1ac0\12\u1b20\12\u1b80\12\u1be0\11\ud140"+ "\12\u1c40\12\u1ca0\12\u1d00\12\u1d60\12\u1dc0\12\u1e20\12\u1e80\12\u1ee0"+ "\12\u1f40\12\u1fa0\12\u2000\12\u2060\12\u20c0\12\u2120\12\u2180\12\u21e0"+ "\12\u2240\12\u22a0\12\u2300\12\u2360\12\u23c0\12\u2420\12\u2480\12\u24e0"+ "\12\u2540\12\u25a0\12\u2600\12\u2660\12\u26c0\12\u2720\12\u2780\12\u27e0"+ "\12\u2840\12\u28a0\12\u2900\12\u2960\12\u29c0\12\u2a20\12\u2a80\12\u2ae0"+ "\12\u2b40\12\u2ba0\12\u2c00\12\u2c60\10\u55c0\12\u2cc0\12\u2d20\12\u2d80"+ "\12\u2de0\12\u2e40\12\u2ea0\12\u2f00\12\u2f60\12\u2fc0\12\u3020\12\u3080"+ "\12\u30e0\12\u3140\12\u31a0\12\u3200\12\u3260\12\u32c0\12\u3320\12\u3380"+ "\12\u33e0\12\u3440\12\u34a0\12\u3500\12\u3560\12\u35c0\12\u3620\12\u3680"+ "\12\u36e0\12\u3740\12\u37a0\12\u3800\12\u3860\12\u38c0\12\u3920\12\u3980"+ "\12\u39e0\12\u3a40\12\u3aa0\12\u3b00\12\u3b60\12\u3bc0\12\u3c20\12\u3c80"+ "\12\u3ce0\12\u3d40\12\u3da0\12\u3e00\12\u3e60\12\u3ec0\12\u3f20\12\u3f80"+ "\12\u3fe0\12\u4040\12\u40a0\12\u4100\12\u4160\12\u41c0\12\u4220\12\u4280"+ "\12\u42e0\12\u4340\12\u43a0\12\u4400\12\u4460\12\u44c0\12\u4520\12\u4580"+ "\12\u45e0\12\u4640\12\u46a0\12\u4700\12\u4760\12\u47c0\6\ub4c0\12\u4820"+ "\12\u4880\12\u48e0\12\u4940\12\u49a0\12\u4a00\12\u4a60\12\u4ac0\12\u4b20"+ "\12\u4b80\12\u4be0\12\u4c40\12\u4ca0\12\u4d00\12\u4d60\12\u4dc0\12\u4e20"+ "\12\u4e80\12\u4ee0\12\u4f40\12\u4fa0\12\u5000\12\u5060\12\u50c0\12\u5120"+ "\12\u5180\11\ua980\12\u51e0\12\u5240\12\u52a0\12\u5300\12\u5360\12\u53c0"+ "\12\u5420\12\u5480\12\u54e0\12\u5540\12\u55a0\12\u5600\12\u5660\12\u56c0"+ "\12\u5720\12\u5780\12\u57e0\12\u5840\12\u58a0\12\u5900\12\u5960\12\u59c0"+ "\12\u5a20\12\u5a80\12\u5ae0\12\u5b40\12\u5ba0\12\u5c00\12\u5c60\12\u5cc0"+ "\12\u5d20\12\u5d80\12\u5de0\12\u5e40\12\u5ea0\12\u5f00\12\u5f60\12\u5fc0"+ "\12\u6020\12\u6080\12\u60e0\12\u6140\12\u61a0\12\u6200\12\u6260\12\u62c0"+ "\12\u6320\12\u6380\12\u63e0\12\u6440\12\u64a0\12\u6500\12\u6560\10\ubb60"+ "\12\u65c0\12\u6620\12\u6680\12\u66e0\12\u6740\12\u67a0\12\u6800\12\u6860"+ "\12\u68c0\12\u6920\12\u6980\12\u69e0\12\u6a40\12\u6aa0\12\u6b00\12\u6b60"+ "\12\u6bc0\12\u6c20\12\u6c80\12\u6ce0\12\u6d40\12\u6da0\12\u6e00\12\u6e60"+ "\12\u6ec0\12\u6f20\12\u6f80\12\u6fe0\12\u7040\12\u70a0\12\u7100\12\u7160"+ "\12\u71c0\12\u7220\12\u7280\12\u72e0\12\u7340\12\u73a0\12\u7400\12\u7460"+ "\12\u74c0\12\u7520\12\u7580\12\u75e0\12\u7640\12\u76a0\12\u7700\12\u7760"+ "\12\u77c0\12\u7820\12\u7880\12\u78e0\12\u7940\12\u79a0\12\u7a00\12\u7a60"+ "\12\u7ac0\12\u7b20\12\u7b80\12\u7be0\12\u7c40\12\u7ca0\12\u7d00\12\u7d60"+ "\12\u7dc0\12\u7e20\12\u7e80\12\u7ee0\12\u7f40\12\u7fa0\12\u8000\12\u8060"+ "\12\u80c0\12\u8120\12\u8180\12\u81e0\12\u8240\12\u82a0\12\u8300\12\u8360"+ "\12\u83c0\12\u8420\12\u8480\12\u84e0\12\u8540\12\u85a0\12\u8600\12\u8660"+ "\12\u86c0\12\u8720\12\u8780\12\u87e0\12\u8840\12\u88a0\12\u8900\12\u8960"+ "\12\u89c0\12\u8a20\12\u8a80\12\u8ae0\12\u8b40\12\u8ba0\12\u8c00\12\u8c60"+ "\12\u8cc0\12\u8d20\12\u8d80\12\u8de0\12\u8e40\12\u8ea0\12\u8f00\12\u8f60"+ "\12\u8fc0\12\u9020\12\u9080\12\u90e0\12\u9140\12\u91a0\12\u9200\12\u9260"+ "\12\u92c0\12\u9320\12\u9380\12\u93e0\12\u9440\12\u94a0\12\u9500\12\u9560"+ "\3\u9780\12\u95c0\12\u9620\12\u9680\12\u96e0\6\u09c0\12\u9740\12\u97a0"+ "\12\u9800\12\u9860\12\u98c0\12\u9920\12\u9980\12\u99e0\12\u9a40\12\u9aa0"+ "\12\u9b00\12\u9b60\12\u9bc0\12\u9c20\12\u9c80\12\u9ce0\12\u9d40\12\u9da0"+ "\12\u9e00\12\u9e60\12\u9ec0\12\u9f20\12\u9f80\12\u9fe0\12\ua040\12\ua0a0"+ "\12\ua100\12\ua160\12\ua1c0\12\ua220\12\ua280\12\ua2e0\12\ua340\12\ua3a0"+ "\12\ua400\12\ua460\12\ua4c0\12\ua520\12\ua580\12\ua5e0\12\ua640\12\ua6a0"+ "\12\ua700\12\ua760\12\ua7c0\12\ua820\12\ua880\12\ua8e0\12\ua940\12\ua9a0"+ "\12\uaa00\12\uaa60\12\uaac0\12\uab20\12\uab80\12\uabe0\12\uac40\12\uaca0"+ "\12\uad00\12\uad60\12\uadc0\12\uae20\12\uae80\12\uaee0\12\uaf40\12\uafa0"+ "\12\ub000\12\ub060\12\ub0c0\12\ub120\12\ub180\12\ub1e0\12\ub240\12\ub2a0"+ "\12\ub300\11\ucc60\12\ub360\12\ub3c0\12\ub420\12\ub480\12\ub4e0\12\ub540"+ "\12\ub5a0\12\ub600\12\ub660\12\ub6c0\12\ub720\12\ub780\12\ub7e0\12\ub840"+ "\12\ub8a0\12\ub900\12\ub960\12\ub9c0\12\uba20\12\uba80\12\ubae0\12\ubb40"+ "\12\ubba0\12\ubc00\12\ubc60\12\ubcc0\12\ubd20\12\ubd80\12\ubde0\12\ube40"+ "\12\ubea0\12\ubf00\12\ubf60\12\ubfc0\12\uc020\12\uc080\12\uc0e0\12\uc140"+ "\12\uc1a0\12\uc200\12\uc260\12\uc2c0\12\uc320\12\uc380\12\uc3e0\12\uc440"+ "\12\uc4a0\12\uc500\12\uc560\12\uc5c0\12\uc620\12\uc680\12\uc6e0\12\uc740"+ "\12\uc7a0\12\uc800\12\uc860\12\uc8c0\12\uc920\12\uc980\12\uc9e0\12\uca40"+ "\12\ucaa0\12\ucb00\12\ucb60\12\ucbc0\12\ucc20\12\ucc80\12\ucce0\12\ucd40"+ "\12\ucda0\12\uce00\12\uce60\12\ucec0\12\ucf20\12\ucf80\12\ucfe0\12\ud040"+ "\12\ud0a0\12\ud100\12\ud160\12\ud1c0\12\ud220\12\ud280\12\ud2e0\12\ud340"+ "\12\ud3a0\12\ud400\12\ud460\12\ud4c0\12\ud520\12\ud580\12\ud5e0\12\ud640"+ "\12\ud6a0\12\ud700\12\ud760\12\ud7c0\12\ud820\12\ud880\12\ud8e0\12\ud940"+ "\12\ud9a0\12\uda00\12\uda60\12\udac0\12\udb20\12\udb80\12\udbe0\12\udc40"+ "\12\udca0\12\udd00\12\udd60\12\uddc0\12\ude20\12\ude80\12\udee0\10\u9460"+ "\12\udf40\12\udfa0\12\ue000\12\ue060\12\ue0c0\12\ue120\12\ue180\12\ue1e0"+ "\12\ue240\12\ue2a0\6\u3a20\12\ue300\12\ue360\12\ue3c0\12\ue420\12\ue480"+ "\12\ue4e0\12\ue540\12\ue5a0\12\ue600\12\ue660\12\ue6c0\12\ue720\12\ue780"+ "\12\ue7e0\12\ue840\12\ue8a0\12\ue900\12\ue960\12\ue9c0\12\uea20\12\uea80"+ "\12\ueae0\12\ueb40\12\u2f00\12\ueba0\12\uec00\12\uec60\12\uecc0\12\ued20"+ "\12\ued80\12\uede0\12\uee40\12\ueea0\12\uef00\12\uef60\12\uefc0\12\uf020"+ "\12\uf080\12\uf0e0\12\uf140\12\uf1a0\12\uf200\12\uf260\12\uf2c0\12\uf320"+ "\12\uf380\12\uf3e0\12\uf440\12\uf4a0\12\uf500\12\uf560\12\uf5c0\12\uf620"+ "\12\uf680\12\uf6e0\12\uf740\12\uf7a0\12\uf800\12\uf860\12\uf8c0\12\uf920"+ "\12\uf980\12\uf9e0\12\ufa40\12\ufaa0\12\ufb00\12\ufb60\12\ufbc0\12\ufc20"+ "\12\ufc80\12\ufce0\12\ufd40\12\ufda0\12\ufe00\12\ufe60\12\ufec0\12\uff20"+ "\12\uff80\12\uffe0\13\100\13\240\13\u0100\13\u0160\13\u01c0\13\u0220"+ "\13\u0280\13\u02e0\13\u0340\13\u03a0\13\u0400\13\u0460\13\u04c0\13\u0520"+ "\13\u0580\13\u05e0\13\u0640\13\u06a0\13\u0700\13\u0760\13\u07c0\13\u0820"+ "\13\u0880\13\u08e0\13\u0940\13\u09a0\13\u0a00\13\u0a60\13\u0ac0\13\u0b20"+ "\13\u0b80\13\u0be0\13\u0c40\13\u0ca0\13\u0d00\13\u0d60\13\u0dc0\13\u0e20"+ "\13\u0e80\13\u0ee0\13\u0f40\13\u0fa0\13\u1000\13\u1060\13\u10c0\13\u1120"+ "\13\u1180\13\u11e0\13\u1240\13\u12a0\13\u1300\13\u1360\13\u13c0\13\u1420"+ "\13\u1480\13\u14e0\13\u1540\13\u15a0\13\u1600\13\u1660\13\u16c0\13\u1720"+ "\13\u1780\13\u17e0\13\u1840\13\u18a0\13\u1900\13\u1960\13\u19c0\13\u1a20"+ "\13\u1a80\13\u1ae0\13\u1b40\13\u1ba0\13\u1c00\4\ue960\13\u1c60\13\u1cc0"+ "\13\u1d20\13\u1d80\13\u1de0\13\u1e40\13\u1ea0\13\u1f00\13\u1f60\13\u1fc0"+ "\13\u2020\13\u2080\13\u20e0\13\u2140\13\u21a0\13\u2200\13\u2260\13\u22c0"+ "\13\u2320\13\u2380\13\u23e0\13\u2440\13\u24a0\13\u2500\13\u2560\13\u25c0"+ "\13\u2620\13\u2680\13\u26e0\13\u2740\13\u27a0\13\u2800\13\u2860\13\u28c0"+ "\13\u2920\13\u2980\13\u29e0\13\u2a40\13\u2aa0\13\u2b00\13\u2b60\13\u2bc0"+ "\13\u2c20\13\u2c80\13\u2ce0\13\u2d40\13\u2da0\13\u2e00\13\u2e60\13\u2ec0"+ "\13\u2f20\13\u2f80\13\u2fe0\13\u3040\13\u30a0\13\u3100\13\u3160\13\u31c0"+ "\13\u3220\13\u3280\13\u32e0\13\u3340\13\u33a0\13\u3400\13\u3460\13\u34c0"+ "\13\u3520\13\u3580\13\u35e0\13\u3640\13\u36a0\13\u3700\13\u3760\13\u37c0"+ "\13\u3820\13\u3880\13\u38e0\13\u3940\13\u39a0\13\u3a00\13\u3a60\13\u3ac0"+ "\13\u3b20\13\u3b80\13\u3be0\13\u3c40\13\u3ca0\13\u3d00\13\u3d60\13\u3dc0"+ "\13\u3e20\13\u3e80\13\u3ee0\13\u3f40\13\u3fa0\13\u4000\13\u4060\13\u40c0"+ "\13\u4120\13\u4180\13\u41e0\13\u4240\13\u42a0\13\u4300\13\u4360\13\u43c0"+ "\13\u4420\13\u4480\13\u44e0\13\u4540\13\u45a0\13\u4600\13\u4660\13\u46c0"+ "\13\u4720\13\u4780\13\u47e0\13\u4840\13\u48a0\13\u4900\13\u4960\13\u49c0"+ "\13\u4a20\13\u4a80\13\u4ae0\13\u4b40\13\u4ba0\13\u4c00\13\u4c60\13\u4cc0"+ "\13\u4d20\13\u4d80\13\u4de0\13\u4e40\13\u4ea0\13\u4f00\13\u4f60\13\u4fc0"+ "\13\u5020\13\u5080\13\u50e0\13\u5140\13\u51a0\13\u5200\13\u5260\13\u52c0"+ "\13\u5320\13\u5380\13\u53e0\13\u5440\13\u54a0\13\u5500\13\u5560\13\u55c0"+ "\13\u5620\13\u5680\13\u56e0\13\u5740\13\u57a0\13\u5800\13\u5860\13\u58c0"+ "\13\u5920\13\u5980\13\u59e0\13\u5a40\13\u5aa0\13\u5b00\13\u5b60\13\u5bc0"+ "\13\u5c20\13\u5c80\13\u5ce0\13\u5d40\13\u5da0\13\u5e00\13\u5e60\13\u5ec0"+ "\13\u5f20\13\u5f80\13\u5fe0\13\u6040\13\u60a0\13\u6100\13\u6160\13\u61c0"+ "\13\u6220\11\u3fc0"; private static int [] zzUnpackRowMap() { int [] result = new int[7962]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\35\1\36\1\37\1\40\1\41\1\42\132\35\2\43"+ "\1\44\26\43\1\45\31\43\1\46\4\43\1\47\23\43"+ "\1\50\23\43\2\51\1\52\14\51\1\53\120\51\1\54"+ "\1\55\1\0\1\56\1\41\2\54\1\57\1\60\6\54"+ "\1\61\26\54\1\62\44\54\1\63\24\54\2\64\1\0"+ "\1\64\1\65\2\64\2\65\1\66\1\67\1\70\1\71"+ "\1\72\1\73\1\65\1\64\1\74\1\75\3\64\1\76"+ "\3\64\1\77\6\64\1\100\4\64\1\65\7\64\1\71"+ "\1\64\1\73\1\70\1\75\1\101\1\102\1\74\1\66"+ "\1\72\1\103\1\77\1\101\1\102\2\104\1\105\1\67"+ "\1\100\1\64\1\106\1\107\1\110\1\76\5\64\1\65"+ "\1\64\1\105\1\106\1\64\1\107\1\111\1\110\1\103"+ "\4\64\1\111\7\64\3\112\1\113\3\112\1\114\130\112"+ "\3\115\1\113\107\115\1\114\24\115\1\54\1\55\1\0"+ "\1\56\1\41\2\54\1\116\1\117\6\54\1\120\26\54"+ "\1\62\44\54\1\121\24\54\3\112\1\113\3\112\1\122"+ "\130\112\3\115\1\113\107\115\1\122\24\115\1\54\1\55"+ "\1\0\1\56\1\41\2\54\1\123\1\117\6\54\1\124"+ "\26\54\1\62\44\54\1\125\24\54\3\112\1\113\3\112"+ "\1\126\130\112\3\115\1\113\107\115\1\126\24\115\1\127"+ "\1\41\1\130\1\131\1\41\1\132\1\133\1\134\1\135"+ "\3\136\1\137\2\136\1\140\4\136\1\141\1\142\1\136"+ "\1\141\1\136\1\143\1\144\1\145\2\127\1\136\1\146"+ "\2\136\1\147\1\150\1\151\1\133\4\146\3\62\1\152"+ "\1\153\1\154\1\155\1\156\1\157\1\160\1\161\1\162"+ "\1\163\1\164\4\136\1\165\1\166\1\136\1\167\1\170"+ "\3\136\1\171\1\172\1\127\2\151\1\136\1\151\1\173"+ "\1\174\7\136\1\141\2\136\1\151\1\136\3\141\1\136"+ "\3\141\2\175\1\176\1\177\31\175\1\200\55\175\1\201"+ "\24\175\2\202\1\203\1\204\3\202\1\205\25\202\1\206"+ "\102\202\2\207\1\210\1\211\33\207\1\212\23\207\1\213"+ "\4\207\1\214\23\207\1\215\23\207\2\216\1\217\1\220"+ "\57\216\1\221\4\216\1\222\23\216\1\223\23\216\1\127"+ "\1\41\1\224\1\225\1\41\1\132\1\133\1\226\1\227"+ "\5\136\1\230\1\140\4\136\1\141\1\142\1\136\1\141"+ "\1\231\1\143\1\232\1\133\1\233\1\127\1\234\1\146"+ "\2\136\1\147\1\150\1\151\1\133\4\146\1\235\2\62"+ "\1\236\1\237\1\240\1\241\1\242\1\243\1\244\1\245"+ "\1\246\1\247\1\250\1\251\1\136\1\252\1\136\1\253"+ "\1\254\1\255\1\256\1\257\1\260\1\261\1\262\1\263"+ "\1\264\1\265\2\151\1\266\1\151\1\267\1\270\7\136"+ "\1\141\1\136\1\271\1\151\1\272\3\141\1\273\3\141"+ "\2\274\1\275\34\274\1\276\23\274\1\213\4\274\1\214"+ "\23\274\1\215\23\274\2\277\1\300\4\277\1\301\25\277"+ "\1\302\1\303\101\277\2\304\1\305\32\304\1\306\55\304"+ "\1\307\24\304\1\310\1\41\1\311\1\312\1\41\1\310"+ "\1\151\1\313\1\314\6\315\1\62\4\315\2\310\1\315"+ "\1\310\3\315\1\310\1\316\1\310\1\62\3\315\1\62"+ "\1\315\1\310\1\133\2\62\3\310\1\317\2\62\30\315"+ "\1\320\2\151\1\315\1\151\1\321\10\315\1\310\2\315"+ "\1\322\1\315\3\310\1\315\3\310\1\323\1\41\1\324"+ "\1\325\1\41\3\323\1\326\6\327\1\323\4\327\2\323"+ "\1\327\1\323\3\327\4\323\1\330\2\327\2\323\1\331"+ "\6\323\1\332\2\323\30\327\3\323\1\327\2\323\10\327"+ "\1\323\2\327\1\323\1\327\3\323\1\327\3\323\1\333"+ "\1\41\1\334\1\335\1\41\1\333\1\336\1\313\1\337"+ "\6\340\1\333\4\340\2\341\1\340\1\341\1\340\1\342"+ "\1\340\1\333\1\343\1\340\2\333\2\340\1\333\1\133"+ "\1\331\1\133\3\333\1\344\4\333\30\340\1\333\1\345"+ "\1\346\1\340\1\333\1\321\10\340\1\341\2\340\1\333"+ "\1\340\3\341\1\340\3\341\2\202\1\347\1\177\3\202"+ "\1\350\25\202\1\302\102\202\2\175\1\351\1\177\31\175"+ "\1\302\55\175\1\352\24\175\2\207\1\353\1\177\33\207"+ "\1\354\23\207\1\213\4\207\1\214\23\207\1\215\23\207"+ "\2\35\4\0\133\35\1\36\2\0\1\41\1\0\132\35"+ "\150\0\1\355\1\356\5\357\1\0\10\357\2\0\1\357"+ "\5\0\2\357\7\0\1\360\1\361\3\0\10\357\1\356"+ "\17\357\3\0\1\357\2\0\13\357\1\0\10\357\1\0"+ "\1\41\2\0\1\41\133\0\4\42\1\0\1\42\1\362"+ "\131\42\2\43\1\0\26\43\1\0\31\43\1\0\4\43"+ "\1\0\23\43\1\0\23\43\31\0\1\363\164\0\1\364"+ "\1\0\1\365\137\0\1\366\173\0\1\367\23\0\2\51"+ "\1\0\14\51\1\0\120\51\2\54\1\0\1\54\1\0"+ "\2\54\2\0\6\54\1\0\26\54\1\0\44\54\1\0"+ "\25\54\1\55\1\0\1\54\1\41\2\54\2\0\6\54"+ "\1\0\26\54\1\0\44\54\1\0\26\54\1\0\1\54"+ "\1\0\2\54\2\0\6\54\1\0\26\54\1\0\3\54"+ "\1\370\40\54\1\0\24\54\17\0\1\61\120\0\2\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\26\64"+ "\1\0\44\64\1\0\26\64\1\0\1\64\1\0\2\64"+ "\2\0\1\64\1\371\2\64\1\372\1\373\1\0\2\64"+ "\1\374\7\64\1\375\13\64\1\0\11\64\1\373\1\64"+ "\1\374\1\64\1\376\2\64\1\372\1\64\1\375\1\64"+ "\1\376\2\64\1\377\1\371\2\64\1\u0100\10\64\1\0"+ "\1\64\1\377\1\u0100\23\64\1\0\1\64\1\0\2\64"+ "\2\0\3\64\1\u0101\2\64\1\0\2\64\1\u0102\23\64"+ "\1\0\7\64\1\u0101\3\64\1\u0102\1\64\1\u0103\6\64"+ "\1\u0103\2\64\1\u0104\14\64\1\0\1\64\1\u0104\24\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\12\64"+ "\1\u0105\13\64\1\0\22\64\1\u0105\21\64\1\0\26\64"+ "\1\0\1\64\1\0\2\64\2\0\1\u0106\5\64\1\0"+ "\1\64\1\u0107\24\64\1\0\14\64\1\u0108\1\64\1\u0107"+ "\1\u0106\3\64\1\u0108\1\64\2\u0109\4\64\1\u010a\10\64"+ "\1\0\2\64\1\u010a\23\64\1\0\1\64\1\0\2\64"+ "\2\0\2\64\1\u010b\3\64\1\0\1\64\1\u010c\24\64"+ "\1\0\12\64\1\u010b\2\64\1\u010d\1\u010c\5\64\1\u010d"+ "\17\64\1\0\26\64\1\0\1\64\1\0\2\64\2\0"+ "\2\64\1\111\1\u010e\1\64\1\111\1\0\2\64\1\u010f"+ "\3\64\1\u0110\12\64\1\111\4\64\1\0\7\64\1\u010e"+ "\1\64\2\111\1\u010f\1\u0111\1\u0112\3\64\1\u0113\1\64"+ "\1\u0111\1\u0112\4\64\1\111\4\64\1\u0110\5\64\1\0"+ "\7\64\1\u0113\16\64\1\0\1\64\1\0\2\64\2\0"+ "\3\64\1\u0114\2\64\1\0\2\64\1\u0115\23\64\1\0"+ "\7\64\1\u0114\3\64\1\u0115\1\64\1\u0116\6\64\1\u0116"+ "\17\64\1\0\26\64\1\0\1\64\1\0\2\64\2\0"+ "\6\64\1\0\26\64\1\0\33\64\1\u0117\1\64\1\u0118"+ "\6\64\1\0\2\64\1\u0117\3\64\1\u0118\17\64\1\0"+ "\1\64\1\0\2\64\2\0\2\64\1\111\1\u010a\2\64"+ "\1\0\1\64\1\u0119\10\64\1\u011a\6\64\1\u011b\4\64"+ "\1\0\7\64\1\u010a\1\u011c\1\64\1\111\2\64\1\u011d"+ "\1\u0119\3\64\1\u011a\1\64\1\u011d\2\64\1\u011e\1\64"+ "\1\u011b\12\64\1\0\1\64\1\u011e\1\64\1\u011c\22\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\1\64"+ "\1\111\24\64\1\0\16\64\1\111\25\64\1\0\26\64"+ "\1\0\1\64\1\0\2\64\2\0\3\64\1\u011f\1\64"+ "\1\111\1\0\1\64\1\111\1\u0120\16\64\1\111\4\64"+ "\1\0\7\64\1\u011f\1\64\1\111\1\64\1\u0120\1\u0121"+ "\1\u0122\1\111\4\64\1\u0121\1\u0122\4\64\1\111\12\64"+ "\1\0\26\64\1\0\1\64\1\0\2\64\2\0\2\64"+ "\1\u0123\1\u0124\2\64\1\0\26\64\1\0\7\64\1\u0124"+ "\2\64\1\u0123\14\64\1\u0125\14\64\1\0\1\64\1\u0125"+ "\24\64\1\0\1\64\1\0\2\64\2\0\1\u0126\1\u0127"+ "\1\u0128\1\64\1\u0129\1\64\1\0\6\64\1\u012a\3\64"+ "\1\u012b\6\64\1\u012c\4\64\1\0\12\64\1\u0128\4\64"+ "\1\u0126\1\u0129\1\64\1\u012b\5\64\1\u0127\1\u012c\4\64"+ "\1\u012a\5\64\1\0\26\64\1\0\1\64\1\0\2\64"+ "\2\0\2\64\1\111\2\64\1\u012d\1\0\2\64\1\u012e"+ "\23\64\1\0\11\64\1\u012d\1\111\1\u012e\30\64\1\0"+ "\10\64\1\111\4\64\3\111\1\64\2\111\3\64\1\0"+ "\1\64\1\0\2\64\2\0\6\64\1\0\2\64\1\u012f"+ "\23\64\1\0\13\64\1\u012f\1\64\1\u0130\6\64\1\u0130"+ "\2\64\1\u0131\14\64\1\0\1\64\1\u0131\24\64\1\0"+ "\1\64\1\0\2\64\2\0\4\64\1\u0132\1\64\1\0"+ "\1\64\1\111\4\64\1\u0133\3\64\1\u0134\13\64\1\0"+ "\16\64\1\111\1\64\1\u0132\1\64\1\u0134\13\64\1\u0133"+ "\5\64\1\0\26\64\1\0\1\64\1\0\2\64\2\0"+ "\6\64\1\0\2\64\1\u0135\7\64\1\u0136\13\64\1\0"+ "\13\64\1\u0135\1\64\1\u0137\4\64\1\u0136\1\64\1\u0137"+ "\17\64\1\0\26\64\1\0\1\64\1\0\2\64\2\0"+ "\6\64\1\0\2\64\1\u0138\3\64\1\u0139\17\64\1\0"+ "\13\64\1\u0138\22\64\1\u0139\5\64\1\0\26\64\1\0"+ "\1\64\1\0\2\64\2\0\3\64\1\u013a\2\64\1\0"+ "\26\64\1\0\7\64\1\u013a\5\64\1\u013b\6\64\1\u013b"+ "\17\64\1\0\24\64\3\112\1\0\3\112\1\0\130\112"+ "\52\0\1\u013c\65\0\3\115\1\0\107\115\1\0\24\115"+ "\17\0\1\u013d\120\0\1\127\10\0\6\127\1\0\11\127"+ "\1\0\1\127\1\0\3\127\1\0\2\127\14\0\31\127"+ "\2\0\1\127\2\0\13\127\1\0\10\127\3\0\1\u013e"+ "\4\0\1\u013f\35\0\1\62\3\0\1\u0140\72\0\1\62"+ "\40\0\1\62\71\0\10\u0141\1\u0142\24\u0141\1\u0143\1\u0141"+ "\1\u0144\6\u0141\1\u0145\71\u0141\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u0147\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\17\0\1\u0148\26\0\1\62\71\0\1\u0149"+ "\10\0\6\u0149\1\0\1\u0149\1\u014a\1\u014b\1\u0149\2\141"+ "\1\u0149\1\141\1\u0149\1\0\1\u0149\1\0\3\u0149\1\0"+ "\1\u0149\1\u014c\1\0\1\u014d\12\0\4\u0149\1\u014b\1\u014c"+ "\1\u0149\1\u014a\4\u0149\1\u014c\5\u0149\1\u014c\6\u0149\2\0"+ "\1\u0149\2\0\10\u0149\1\141\2\u0149\1\0\1\u0149\3\141"+ "\1\u0149\3\141\1\u0149\10\0\6\u0149\1\0\1\u0149\1\u014a"+ "\1\u014b\1\u0149\1\u014e\1\u014f\1\u0149\1\u014f\1\u0149\1\0"+ "\1\u0149\1\0\3\u0149\1\0\1\u0150\1\u014c\1\0\1\u014d"+ "\12\0\4\u0149\1\u014b\1\u014c\1\u0149\1\u014a\4\u0149\1\u014c"+ "\5\u0149\1\u014c\6\u0149\2\0\1\u0150\2\0\10\u0149\1\u014f"+ "\2\u0149\1\0\1\u0149\3\u014f\1\u0149\2\u014f\1\u014e\31\0"+ "\1\62\14\0\1\62\71\0\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u0151\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\46\0\1\62\133\0\1\62"+ "\3\0\1\62\115\0\2\u014d\1\0\1\u014d\74\0\1\u014d"+ "\4\0\3\u014d\1\0\3\u014d\46\0\1\62\6\0\1\62"+ "\62\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136"+ "\1\u0152\2\136\1\u0153\5\136\1\u0154\5\136\1\u0155\3\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0156\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0157\6\136"+ "\1\u0158\10\136\1\u0159\4\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u015a\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u015b\1\u015c\1\u015d\5\136\1\u015e\7\136"+ "\1\u015f\1\136\1\127\2\0\1\u0160\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u0161"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0162"+ "\5\136\1\u0163\1\u0164\10\136\1\u0165\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\27\136\1\u0166\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0167\13\136\1\u0168\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u0169\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u016a\7\136\1\u016b"+ "\10\136\1\u016c\4\136\1\127\2\0\1\136\2\0\1\u016d"+ "\12\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u016e\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u016f\2\136\1\u0170\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u0171\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0172\1\136\1\u0173\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0174\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0175\1\u0176"+ "\2\136\1\u0177\5\136\1\u0178\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0179\13\136\1\u017a\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u0165\11\136\1\u017b"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u017c"+ "\14\136\1\u017d\2\136\1\u017e\4\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u017f\11\136\1\u0180\15\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\2\175\2\0\31\175"+ "\1\0\55\175\1\0\24\175\52\0\1\u0181\65\0\2\u0182"+ "\1\0\27\u0182\1\u0183\56\u0182\1\u0184\26\u0182\2\202\2\0"+ "\3\202\1\0\25\202\1\0\102\202\52\0\1\u0185\65\0"+ "\2\207\2\0\33\207\1\0\23\207\1\0\4\207\1\0"+ "\23\207\1\0\23\207\10\0\1\u0186\137\0\1\u0187\205\0"+ "\1\u0188\1\0\1\u0189\137\0\1\u018a\173\0\1\u018b\23\0"+ "\2\216\2\0\57\216\1\0\4\216\1\0\23\216\1\0"+ "\23\216\10\0\1\u018c\205\0\1\u018d\1\0\1\u018e\137\0"+ "\1\u018f\173\0\1\u0190\26\0\1\u013e\42\0\1\62\101\0"+ "\1\233\26\0\1\u0191\6\0\1\62\71\0\1\127\10\0"+ "\2\136\1\u0192\3\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u0193\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0194\1\u0195\2\136\1\u0196"+ "\1\136\1\u0197\5\136\1\u0198\2\136\1\u0199\2\136\1\u019a"+ "\1\u0196\2\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\2\233\1\0\135\233\1\127\10\0\6\u019b\1\0"+ "\4\u019b\2\136\1\u019b\1\136\1\u019b\1\0\1\u019b\1\0"+ "\1\127\1\u0146\1\136\1\0\2\u019b\14\0\30\u019b\1\127"+ "\2\0\1\u019b\2\0\10\u019b\1\136\2\u019b\1\0\1\u019b"+ "\3\136\1\u019b\3\136\17\0\1\u019c\120\0\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\136\1\u019d\1\u019e\2\136"+ "\1\u0152\2\136\1\u019f\1\u01a0\4\136\1\u01a1\2\136\1\u01a2"+ "\1\u01a3\1\136\1\u01a4\2\136\1\u01a5\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u01a6\1\u01a7\2\136\1\u01a8\10\136"+ "\1\u0156\1\136\1\u01a9\1\136\1\u01aa\3\136\1\127\2\0"+ "\1\136\2\0\12\136\1\u01ab\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u01ac\2\136\1\u01ad\1\u01ae"+ "\1\136\1\u01af\3\136\1\u01b0\5\136\1\u01b1\1\u01b2\1\136"+ "\1\u01b3\1\u01b4\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u01b5\1\136\1\u01b6\1\136\1\u01b7\1\136\1\u01b8"+ "\1\u01b9\6\136\1\u01ba\3\136\1\u01bb\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u01bc\2\136\1\u01bd\1\u01be"+ "\1\u01bf\5\136\1\u01c0\1\136\1\u01c1\1\u01c2\2\136\1\u01c3"+ "\1\136\1\u01c4\1\u01c5\1\127\2\0\1\u01c6\2\0\12\136"+ "\1\u01c7\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u01c8\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u01c9\1\u01ca\1\u01cb\1\u01cc\1\u01cd\1\u01ce\1\u0163"+ "\1\u01cf\1\u01d0\1\u01d1\4\136\1\u01d2\1\136\1\u01d3\1\u01d4"+ "\2\136\1\u01d5\2\136\1\u01d6\1\127\2\0\1\136\2\0"+ "\1\u01d7\12\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u01d8\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\136\1\u01d9\1\u01da\1\u01db\3\136\1\u01dc"+ "\1\u01dd\1\u01de\4\136\1\u01df\2\136\1\u01e0\1\u01e1\4\136"+ "\1\u01e2\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u01e3\1\136"+ "\1\u01b5\1\136\1\u01e4\1\136\1\u01e5\1\136\1\u01e6\7\136"+ "\1\u01e7\1\u01e8\1\u01e9\5\136\1\127\2\0\1\136\2\0"+ "\12\136\1\u01ea\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u01eb\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u01ec\1\136\1\u01ed\1\u01ee\1\u01ef\1\136"+ "\1\u01f0\1\u01f1\1\u01f2\1\u01f3\1\u01f4\3\136\1\u01f5\1\136"+ "\1\u01f6\1\u01f7\1\136\1\u01f8\1\136\1\u01f9\2\136\1\127"+ "\2\0\1\136\2\0\1\u01fa\12\136\1\0\1\u01fb\7\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u01fc\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u01fd\1\u01fe"+ "\1\136\1\u01ff\1\136\1\u0200\1\u0201\3\136\1\u0202\3\136"+ "\1\u0203\1\136\1\u0204\1\u0205\1\u0206\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u0207\1\136\1\u0208\1\136\1\u0209"+ "\1\136\1\u020a\14\136\1\u020b\4\136\1\127\2\0\1\136"+ "\2\0\1\u020c\12\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\15\136\1\u020d\12\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u020e\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\136\1\u020f\2\136\1\u0210\1\136"+ "\1\u0211\1\u0212\1\u0213\7\136\1\u0214\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\13\136\1\u0215\14\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u0216\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0217\1\136\1\u0218\1\136"+ "\1\u0219\1\136\1\u021a\7\136\1\u021b\1\u021c\3\136\1\u021d"+ "\1\u021e\1\127\2\0\1\136\2\0\1\u021f\12\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u0220"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u0221\1\u0222\1\u0223\1\u0224\1\u0225\2\136\1\u0226\5\136"+ "\1\u0227\1\u0228\1\136\1\u0229\4\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u022a\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u022b\1\u020f\1\136\1\u022c\1\u022d\1\136"+ "\1\u022e\1\u022f\1\u0230\5\136\1\u0231\1\136\1\u0232\1\u0233"+ "\5\136\1\u0234\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136"+ "\1\u0235\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0236"+ "\1\136\1\u0237\1\136\1\u0238\1\136\1\u0239\1\136\1\u023a"+ "\1\136\1\u023b\5\136\1\u023c\1\u023d\1\u023e\1\u023f\1\136"+ "\1\u0240\1\136\1\u0241\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u0242\2\136\1\u0196\1\u0243\3\136\1\u01b8\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u0244\3\136\1\u0245\1\u0246"+ "\1\u0247\1\136\1\u0246\1\u0248\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u0249\2\136\1\u017c\1\u024a\1\136\1\u024b"+ "\12\136\1\u024c\6\136\1\127\2\0\1\136\2\0\12\136"+ "\1\u024d\1\0\10\136\1\127\10\0\6\u024e\1\0\4\u024e"+ "\2\127\1\u024e\1\127\1\u024e\1\0\1\u024e\1\0\2\127"+ "\1\u024e\1\0\2\u024e\14\0\30\u024e\1\127\2\0\1\u024e"+ "\2\0\10\u024e\1\127\2\u024e\1\0\1\u024e\3\127\1\u024e"+ "\4\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u024f\5\136"+ "\1\u0250\1\136\1\u0251\1\u0252\6\136\1\u0165\3\136\1\u0253"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0254"+ "\6\136\1\u0180\5\136\1\u0255\1\136\1\u0256\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\5\136\1\u0257\2\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0258\3\136"+ "\1\u0259\2\136\1\u025a\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u025b\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u025c\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u025d\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u025e\1\136\1\u025f\1\136\1\u0260\1\u0261"+ "\6\136\1\u0262\1\136\1\u0263\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\2\274\1\0\34\274\1\0"+ "\23\274\1\0\4\274\1\0\23\274\1\0\23\274\10\0"+ "\1\u0264\127\0\2\277\1\0\4\277\1\0\25\277\2\0"+ "\101\277\2\u0265\1\0\135\u0265\11\0\6\u0266\1\0\4\u0266"+ "\2\0\1\u0266\1\0\1\u0266\1\0\1\u0266\5\0\2\u0266"+ "\14\0\30\u0266\3\0\1\u0266\2\0\10\u0266\1\0\2\u0266"+ "\1\0\1\u0266\3\0\1\u0266\3\0\2\304\1\0\32\304"+ "\1\0\55\304\1\0\24\304\2\u0267\1\0\135\u0267\10\0"+ "\1\u0268\41\0\1\u0140\124\0\1\u0269\111\0\6\315\1\0"+ "\13\315\5\0\2\315\1\0\1\315\12\0\30\315\3\0"+ "\1\315\2\0\13\315\1\0\10\315\11\0\6\u026a\1\0"+ "\4\u026a\2\0\1\u026a\1\0\3\u026a\4\0\3\u026a\1\0"+ "\1\u026a\12\0\30\u026a\3\0\1\u026a\2\0\10\u026a\1\0"+ "\2\u026a\1\0\1\u026a\3\0\1\u026a\56\0\1\u026b\4\0"+ "\1\u026c\1\u026d\1\u026e\1\u026f\1\u0270\1\u0271\2\0\1\u0272"+ "\3\0\1\u0273\1\0\1\u0274\1\u0275\1\u0276\3\0\1\u0277"+ "\44\0\6\u0278\1\0\4\u0278\2\0\1\u0278\1\0\3\u0278"+ "\4\0\3\u0278\1\0\1\u0278\12\0\30\u0278\3\0\1\u0278"+ "\2\0\10\u0278\1\0\2\u0278\1\0\1\u0278\3\0\1\u0278"+ "\14\0\6\327\1\0\13\327\5\0\2\327\14\0\30\327"+ "\3\0\1\327\2\0\13\327\1\0\10\327\11\0\6\327"+ "\1\0\4\327\2\0\1\327\1\0\3\327\5\0\2\327"+ "\14\0\30\327\3\0\1\327\2\0\10\327\1\0\2\327"+ "\1\0\1\327\3\0\1\327\13\0\7\340\1\0\4\340"+ "\2\0\1\340\1\0\3\340\2\0\1\340\1\0\1\u0269"+ "\2\340\14\0\30\340\2\0\1\346\1\340\2\0\10\340"+ "\1\0\2\340\1\0\1\340\3\0\1\340\13\0\7\340"+ "\1\0\4\340\2\0\1\340\1\0\3\340\2\0\1\340"+ "\2\0\2\340\14\0\30\340\2\0\1\346\1\340\2\0"+ "\10\340\1\0\2\340\1\0\1\340\3\0\1\340\27\0"+ "\2\341\1\0\1\341\13\0\1\341\4\0\1\u0279\5\0"+ "\1\u027a\3\0\1\u027b\3\0\1\u0279\1\u027c\7\0\1\u027d"+ "\2\0\1\u027e\21\0\1\341\4\0\3\341\1\0\3\341"+ "\10\0\7\340\1\0\4\340\2\341\1\340\1\341\3\340"+ "\2\0\1\340\2\0\2\340\14\0\30\340\2\0\1\346"+ "\1\340\2\0\10\340\1\341\2\340\1\0\1\340\3\341"+ "\1\340\3\341\12\0\1\u027f\7\0\1\u027f\1\0\4\u027f"+ "\11\0\1\u027f\20\0\3\u027f\5\0\2\u027f\3\0\2\u027f"+ "\4\0\1\u027f\16\0\1\u027f\4\0\3\u027f\1\0\3\u027f"+ "\56\0\1\u0280\71\0\1\u0281\140\0\6\u0282\1\0\10\u0282"+ "\2\0\1\u0282\5\0\2\u0282\14\0\30\u0282\3\0\1\u0282"+ "\2\0\13\u0282\1\0\10\u0282\11\0\1\357\1\u0283\3\357"+ "\1\u0284\1\0\10\357\2\0\1\357\5\0\2\357\14\0"+ "\2\357\1\u0284\16\357\1\u0283\6\357\3\0\1\357\2\0"+ "\13\357\1\0\10\357\11\0\6\357\1\0\10\357\2\0"+ "\1\357\5\0\2\357\14\0\30\357\3\0\1\357\2\0"+ "\13\357\1\0\10\357\31\0\1\u0285\175\0\1\u0286\67\0"+ "\1\u0287\205\0\1\u0288\141\0\1\u0289\130\0\1\u028a\173\0"+ "\1\u028b\23\0\2\54\1\0\1\54\1\0\2\54\2\0"+ "\6\54\1\0\26\54\1\0\20\54\1\u028c\23\54\1\0"+ "\24\54\2\64\1\0\1\64\1\0\2\64\2\0\2\64"+ "\1\u028d\3\64\1\0\26\64\1\0\12\64\1\u028d\31\64"+ "\1\0\26\64\1\0\1\64\1\0\2\64\2\0\6\64"+ "\1\0\26\64\1\0\15\64\1\u028e\6\64\1\u028e\17\64"+ "\1\0\26\64\1\0\1\64\1\0\2\64\2\0\2\64"+ "\1\u028f\3\64\1\0\1\u0105\25\64\1\0\12\64\1\u028f"+ "\17\64\1\u0105\11\64\1\0\26\64\1\0\1\64\1\0"+ "\2\64\2\0\1\64\1\u0290\1\u0291\3\64\1\0\1\64"+ "\1\u0292\24\64\1\0\12\64\1\u0291\3\64\1\u0292\11\64"+ "\1\u0290\13\64\1\0\26\64\1\0\1\64\1\0\2\64"+ "\2\0\4\64\1\111\1\64\1\0\6\64\1\111\17\64"+ "\1\0\20\64\1\111\15\64\1\111\5\64\1\0\26\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\26\64"+ "\1\0\33\64\1\u0293\10\64\1\0\2\64\1\u0293\23\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\12\64"+ "\1\u0294\13\64\1\0\22\64\1\u0294\21\64\1\0\26\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\26\64"+ "\1\0\15\64\1\u0295\6\64\1\u0295\17\64\1\0\26\64"+ "\1\0\1\64\1\0\2\64\2\0\5\64\1\u0296\1\0"+ "\26\64\1\0\11\64\1\u0296\32\64\1\0\26\64\1\0"+ "\1\64\1\0\2\64\2\0\6\64\1\0\26\64\1\0"+ "\25\64\2\u0297\15\64\1\0\26\64\1\0\1\64\1\0"+ "\2\64\2\0\4\64\1\u0290\1\64\1\0\26\64\1\0"+ "\20\64\1\u0290\4\64\2\u0298\15\64\1\0\26\64\1\0"+ "\1\64\1\0\2\64\2\0\6\64\1\0\1\64\1\u0299"+ "\17\64\1\u0296\4\64\1\0\16\64\1\u0299\12\64\1\u0296"+ "\1\64\1\u029a\10\64\1\0\2\64\1\u029a\23\64\1\0"+ "\1\64\1\0\2\64\2\0\6\64\1\0\1\64\1\u0296"+ "\24\64\1\0\16\64\1\u0296\25\64\1\0\26\64\1\0"+ "\1\64\1\0\2\64\2\0\3\64\1\u029b\2\64\1\0"+ "\26\64\1\0\7\64\1\u029b\34\64\1\0\26\64\1\0"+ "\1\64\1\0\2\64\2\0\6\64\1\0\26\64\1\0"+ "\15\64\1\u029c\6\64\1\u029c\17\64\1\0\26\64\1\0"+ "\1\64\1\0\2\64\2\0\2\64\1\u029d\3\64\1\0"+ "\26\64\1\0\12\64\1\u029d\31\64\1\0\26\64\1\0"+ "\1\64\1\0\2\64\2\0\1\111\3\64\1\u029e\1\64"+ "\1\0\26\64\1\0\17\64\1\111\1\u029e\23\64\1\0"+ "\26\64\1\0\1\64\1\0\2\64\2\0\6\64\1\0"+ "\26\64\1\0\10\64\1\111\33\64\1\0\3\64\1\111"+ "\22\64\1\0\1\64\1\0\2\64\2\0\6\64\1\0"+ "\2\64\1\111\23\64\1\0\13\64\1\111\13\64\1\u029f"+ "\14\64\1\0\1\64\1\u029f\24\64\1\0\1\64\1\0"+ "\2\64\2\0\6\64\1\0\26\64\1\0\15\64\1\u02a0"+ "\6\64\1\u02a0\17\64\1\0\26\64\1\0\1\64\1\0"+ "\2\64\2\0\2\64\1\u02a1\3\64\1\0\26\64\1\0"+ "\12\64\1\u02a1\31\64\1\0\26\64\1\0\1\64\1\0"+ "\2\64\2\0\5\64\1\u0105\1\0\26\64\1\0\11\64"+ "\1\u0105\21\64\1\u0296\10\64\1\0\2\64\1\u0296\23\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\20\64"+ "\1\u02a2\5\64\1\0\42\64\1\u02a2\1\64\1\0\26\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\26\64"+ "\1\0\27\64\1\u011e\14\64\1\0\1\64\1\u011e\24\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\26\64"+ "\1\0\27\64\1\u02a3\14\64\1\0\1\64\1\u02a3\24\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\6\64"+ "\1\u0105\17\64\1\0\36\64\1\u0105\5\64\1\0\26\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\2\64"+ "\1\u02a4\23\64\1\0\13\64\1\u02a4\30\64\1\0\26\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\26\64"+ "\1\0\25\64\2\u02a5\15\64\1\0\26\64\1\0\1\64"+ "\1\0\2\64\2\0\6\64\1\0\26\64\1\0\10\64"+ "\1\u02a6\33\64\1\0\3\64\1\u02a6\22\64\1\0\1\64"+ "\1\0\2\64\2\0\6\64\1\0\1\u02a7\5\64\1\u02a8"+ "\17\64\1\0\32\64\1\u02a7\3\64\1\u02a8\5\64\1\0"+ "\26\64\1\0\1\64\1\0\2\64\2\0\6\64\1\0"+ "\6\64\1\u02a9\17\64\1\0\36\64\1\u02a9\5\64\1\0"+ "\26\64\1\0\1\64\1\0\2\64\2\0\6\64\1\0"+ "\2\64\1\u02aa\23\64\1\0\13\64\1\u02aa\30\64\1\0"+ "\26\64\1\0\1\64\1\0\2\64\2\0\3\64\1\u02ab"+ "\2\64\1\0\26\64\1\0\7\64\1\u02ab\17\64\1\u02ac"+ "\14\64\1\0\1\64\1\u02ac\24\64\1\0\1\64\1\0"+ "\2\64\2\0\5\64\1\u02ad\1\0\26\64\1\0\11\64"+ "\1\u02ad\32\64\1\0\26\64\1\0\1\64\1\0\2\64"+ "\2\0\6\64\1\0\26\64\1\0\27\64\1\111\14\64"+ "\1\0\1\64\1\111\24\64\1\0\1\64\1\0\2\64"+ "\2\0\1\u02ae\5\64\1\0\26\64\1\0\17\64\1\u02ae"+ "\24\64\1\0\26\64\1\0\1\64\1\0\2\64\2\0"+ "\1\u02af\5\64\1\0\26\64\1\0\17\64\1\u02af\24\64"+ "\1\0\26\64\1\0\1\64\1\0\2\64\2\0\6\64"+ "\1\0\21\64\1\u02b0\4\64\1\0\31\64\1\u02b0\12\64"+ "\1\0\26\64\1\0\1\64\1\0\2\64\2\0\2\64"+ "\1\111\3\64\1\0\26\64\1\0\12\64\1\111\2\64"+ "\1\u02b1\6\64\1\u02b1\10\64\1\111\6\64\1\0\6\64"+ "\1\111\17\64\1\0\1\64\1\0\2\64\2\0\5\64"+ "\1\u02b2\1\0\1\64\1\111\24\64\1\0\11\64\1\u02b2"+ "\4\64\1\111\25\64\1\0\26\64\1\0\1\64\1\0"+ "\2\64\2\0\6\64\1\0\26\64\1\0\25\64\2\111"+ "\15\64\1\0\26\64\1\0\1\64\1\0\2\64\2\0"+ "\5\64\1\u02b3\1\0\26\64\1\0\11\64\1\u02b3\32\64"+ "\1\0\26\64\1\0\1\64\1\0\2\64\2\0\6\64"+ "\1\0\26\64\1\0\15\64\1\u02b4\6\64\1\u02b4\17\64"+ "\1\0\26\64\1\0\1\64\1\0\2\64\2\0\6\64"+ "\1\0\2\64\1\u02b5\23\64\1\0\10\64\1\u02b6\2\64"+ "\1\u02b5\30\64\1\0\3\64\1\u02b6\22\64\1\0\1\64"+ "\1\0\2\64\2\0\2\64\1\u02b7\3\64\1\0\26\64"+ "\1\0\12\64\1\u02b7\12\64\2\u02b8\1\u0297\14\64\1\0"+ "\1\64\1\u0297\24\64\1\0\1\64\1\0\2\64\2\0"+ "\3\64\1\u02b9\2\64\1\0\26\64\1\0\7\64\1\u02b9"+ "\34\64\1\0\26\64\1\0\1\64\1\0\2\64\2\0"+ "\2\64\1\u02ba\3\64\1\0\26\64\1\0\12\64\1\u02ba"+ "\31\64\1\0\26\64\1\0\1\64\1\0\2\64\2\0"+ "\5\64\1\u02bb\1\0\2\64\1\u02bc\23\64\1\0\11\64"+ "\1\u02bb\1\64\1\u02bc\30\64\1\0\26\64\1\0\1\64"+ "\1\0\2\64\2\0\4\64\1\u02bd\1\64\1\0\26\64"+ "\1\0\20\64\1\u02bd\23\64\1\0\26\64\1\0\1\64"+ "\1\0\2\64\2\0\6\64\1\0\6\64\1\u013b\17\64"+ "\1\0\36\64\1\u013b\5\64\1\0\26\64\1\0\1\64"+ "\1\0\2\64\2\0\6\64\1\0\21\64\1\u02be\4\64"+ "\1\0\31\64\1\u02be\12\64\1\0\26\64\1\0\1\64"+ "\1\0\2\64\2\0\6\64\1\0\21\64\1\u02bf\4\64"+ "\1\0\31\64\1\u02bf\12\64\1\0\26\64\1\0\1\64"+ "\1\0\2\64\2\0\6\64\1\0\26\64\1\0\33\64"+ "\1\u02c0\10\64\1\0\2\64\1\u02c0\23\64\1\0\1\64"+ "\1\0\2\64\2\0\6\64\1\0\26\64\1\0\15\64"+ "\1\u02c1\6\64\1\u02c1\17\64\1\0\26\64\1\0\1\64"+ "\1\0\2\64\2\0\1\u02b8\5\64\1\0\26\64\1\0"+ "\17\64\1\u02b8\24\64\1\0\26\64\1\0\1\64\1\0"+ "\2\64\2\0\6\64\1\0\26\64\1\0\35\64\1\111"+ "\6\64\1\0\6\64\1\111\17\64\1\0\1\64\1\0"+ "\2\64\2\0\1\u02c2\5\64\1\0\1\64\1\u0107\1\u02c3"+ "\3\64\1\u013b\17\64\1\0\13\64\1\u02c3\1\u02c4\1\64"+ "\1\u0107\1\u02c2\3\64\1\u02c4\12\64\1\u013b\5\64\1\0"+ "\26\64\1\0\1\64\1\0\2\64\2\0\5\64\1\u02c5"+ "\1\0\26\64\1\0\11\64\1\u02c5\32\64\1\0\26\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\26\64"+ "\1\0\44\64\1\0\11\64\1\u0292\6\64\1\u0292\5\64"+ "\1\0\1\64\1\0\2\64\2\0\5\64\1\u02c6\1\0"+ "\26\64\1\0\11\64\1\u02c6\32\64\1\0\26\64\1\0"+ "\1\64\1\0\2\64\2\0\5\64\1\u02c7\1\0\26\64"+ "\1\0\11\64\1\u02c7\13\64\2\u02c8\15\64\1\0\26\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\1\64"+ "\1\u02c9\24\64\1\0\16\64\1\u02c9\25\64\1\0\26\64"+ "\1\0\1\64\1\0\2\64\2\0\2\64\1\u02ca\1\64"+ "\1\111\1\64\1\0\26\64\1\0\12\64\1\u02ca\5\64"+ "\1\111\23\64\1\0\26\64\1\0\1\64\1\0\2\64"+ "\2\0\6\64\1\0\1\u02cb\25\64\1\0\32\64\1\u02cb"+ "\11\64\1\0\26\64\1\0\1\64\1\0\2\64\2\0"+ "\6\64\1\0\21\64\1\111\4\64\1\0\31\64\1\111"+ "\12\64\1\0\26\64\1\0\1\64\1\0\2\64\2\0"+ "\6\64\1\0\21\64\1\u02cc\4\64\1\0\31\64\1\u02cc"+ "\12\64\1\0\26\64\1\0\1\64\1\0\2\64\2\0"+ "\2\64\1\111\3\64\1\0\26\64\1\0\12\64\1\111"+ "\31\64\1\0\24\64\67\0\1\u02cd\61\0\1\u02ce\54\0"+ "\1\u02ce\140\0\1\u02cf\50\0\10\u0141\1\u02d0\24\u0141\1\u0143"+ "\104\u0141\1\0\135\u0141\37\0\1\u02d1\100\0\1\127\10\0"+ "\6\127\1\0\11\127\1\0\1\u02d2\1\0\3\127\1\0"+ "\2\127\14\0\31\127\2\0\1\127\2\0\13\127\1\0"+ "\11\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u02d3"+ "\22\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\17\0\1\146\26\0\1\62\71\0\1\u0149\10\0\6\u0149"+ "\1\0\11\u0149\1\0\1\u0149\1\0\3\u0149\1\0\2\u0149"+ "\14\0\31\u0149\2\0\1\u0149\2\0\13\u0149\1\0\11\u0149"+ "\10\0\6\u0149\1\0\4\u0149\2\u02d4\1\u0149\1\u02d4\1\u0149"+ "\1\u02d5\1\u0149\1\0\3\u0149\1\0\2\u0149\1\u02d5\13\0"+ "\31\u0149\2\0\1\u0149\2\0\10\u0149\1\u02d4\2\u0149\1\0"+ "\1\u0149\3\u02d4\1\u0149\3\u02d4\1\u0149\10\0\6\u0149\1\0"+ "\2\u0149\1\u014b\1\u0149\2\u014d\1\u0149\1\u014d\1\u0149\1\0"+ "\1\u0149\1\0\3\u0149\1\0\1\u0149\1\u014c\14\0\4\u0149"+ "\1\u014b\1\u014c\6\u0149\1\u014c\5\u0149\1\u014c\6\u0149\2\0"+ "\1\u0149\2\0\10\u0149\1\u014d\2\u0149\1\0\1\u0149\3\u014d"+ "\1\u0149\3\u014d\1\u0149\10\0\6\u0149\1\0\2\u0149\1\u014b"+ "\1\u0149\2\u014e\1\u0149\1\u014e\1\u0149\1\0\1\u0149\1\0"+ "\3\u0149\1\0\1\u0149\1\u014c\1\0\1\u014d\12\0\4\u0149"+ "\1\u014b\1\u014c\6\u0149\1\u014c\5\u0149\1\u014c\6\u0149\2\0"+ "\1\u0149\2\0\10\u0149\1\u014e\2\u0149\1\0\1\u0149\3\u014e"+ "\1\u0149\3\u014e\1\u0149\10\0\6\u0149\1\0\1\u0149\1\u02d6"+ "\1\u014b\1\u0149\1\u014e\1\u014f\1\u0149\1\u014f\1\u0149\1\0"+ "\1\u0149\1\0\3\u0149\1\0\1\u0149\1\u014c\1\0\1\u014d"+ "\12\0\4\u0149\1\u014b\1\u014c\1\u0149\1\u02d6\4\u0149\1\u014c"+ "\5\u0149\1\u014c\6\u0149\2\0\1\u0149\2\0\10\u0149\1\u014f"+ "\2\u0149\1\0\1\u0149\3\u014f\1\u0149\2\u014f\1\u014e\1\u0149"+ "\10\0\1\u0149\1\u02d7\4\u0149\1\0\2\u0149\1\u02d7\1\u0149"+ "\4\u02d7\1\u0149\1\0\1\u0149\1\0\3\u0149\1\0\1\u0149"+ "\1\u02d7\14\0\4\u0149\3\u02d7\5\u0149\2\u02d7\3\u0149\2\u02d7"+ "\4\u0149\1\u02d7\1\u0149\2\0\1\u0149\2\0\10\u0149\1\u02d7"+ "\2\u0149\1\0\1\u0149\3\u02d7\1\u0149\3\u02d7\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u02d8\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\14\136\1\u02d9\2\136\1\u02da"+ "\10\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u02db"+ "\5\136\1\u02dc\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u02dd\16\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u02de\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u02df\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u02e0\14\136\1\u0152\4\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u02e1\2\136\1\u02e2\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u02e3\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u02e4\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u02e5\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u02e6\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u02e7\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u02e8\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u02e9\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u02ea\6\136\1\u02eb\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u02ec\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u02ed\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u02ee\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u02ef\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0152\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u02f0\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u02f1\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u02f2\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u02f3\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u02f4\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u02f5\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u02f6\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u02f7\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\27\136\1\u02f8\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u02f9\17\136\1\u02fa\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u02fb\15\136\1\u02fc\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u02fd\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\1\u0152\12\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u02fe\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\17\136\1\u0152\10\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u02ff\5\136\1\u02e6\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0300\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0301\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u0302\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u0303\1\136"+ "\1\u0304\17\136\1\u0305\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u0306\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u01df\6\136"+ "\1\u0307\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0308\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u0309\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u030a\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u030b\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u030c"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\67\0\1\u030d\62\0\1\u030e\7\0\1\u030e\1\0\4\u030e"+ "\11\0\1\u030e\20\0\3\u030e\5\0\2\u030e\3\0\2\u030e"+ "\4\0\1\u030e\16\0\1\u030e\4\0\3\u030e\1\0\3\u030e"+ "\12\0\1\u030f\7\0\1\u030f\1\0\4\u030f\11\0\1\u030f"+ "\20\0\3\u030f\5\0\2\u030f\3\0\2\u030f\4\0\1\u030f"+ "\16\0\1\u030f\4\0\3\u030f\1\0\3\u030f\67\0\1\u0310"+ "\61\0\1\u0311\54\0\1\u0311\136\0\1\u0312\141\0\1\u0313"+ "\130\0\1\u0314\173\0\1\u0315\34\0\1\u0316\54\0\1\u0316"+ "\136\0\1\u0317\141\0\1\u0318\130\0\1\u0319\173\0\1\u031a"+ "\23\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\13\136"+ "\1\u031b\14\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\1\136\1\u031c\4\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\1\136"+ "\1\u031d\14\0\1\136\1\u031e\1\u031f\11\136\1\u0320\2\136"+ "\1\u0321\1\136\1\u0322\6\136\1\127\2\0\1\136\2\0"+ "\2\136\1\u0323\10\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\5\136\1\u0324\22\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u0325\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u01b8\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0326\2\136\1\u0327\10\136"+ "\1\u0328\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0329"+ "\2\136\1\u032a\3\136\1\u032b\1\u032c\1\u032d\16\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\5\136\1\u032e\22\136\1\127"+ "\2\0\1\136\2\0\1\u032f\12\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0330\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\u019b\1\0\11\u019b\1\0\1\u019b\1\0\1\127"+ "\1\u0146\1\136\1\0\2\u019b\14\0\30\u019b\1\127\2\0"+ "\1\u019b\2\0\13\u019b\1\0\10\u019b\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u0331\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0332\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u0333\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u0334\1\136\1\u0335\1\u0336"+ "\1\u0337\1\u0338\1\u0339\1\u033a\1\u033b\1\u033c\1\u033d\6\136"+ "\1\u033e\1\u033f\5\136\1\127\2\0\1\u0340\2\0\1\u0341"+ "\12\136\1\0\4\136\1\u0342\3\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0343\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\1\136\1\u0344\6\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u0345\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0346\1\136"+ "\1\u0347\1\136\1\u0348\1\u0349\2\136\1\u034a\10\136\1\u034b"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u034c"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u034d"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u034e"+ "\2\136\1\u034f\16\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u0350\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0351\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0352\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u0353\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u0354"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u0355\1\u0356\10\136\1\u0357\1\136\1\u0358\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u0359\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u035a\1\u035b\1\u035c\1\u035d"+ "\1\u035e\1\u0338\2\136\1\u035f\1\u0360\6\136\1\u0361\1\u0362"+ "\1\u0363\5\136\1\127\2\0\1\136\2\0\1\u01d7\12\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0364\17\136\1\u0365\1\136\1\u0366\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u0367\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u0368\22\136\1\u0152\4\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u02e9\14\136"+ "\1\u0369\3\136\1\127\2\0\1\u036a\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u036b\1\136\1\u036c\12\136\1\u036d\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u036e\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u036f\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\25\136\1\u0370\2\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u0371\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u0372\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u0373\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0374\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\136\1\u0375\1\u02e4\3\136\1\u0376"+ "\1\u0377\1\u0378\1\u0379\4\136\1\u037a\2\136\1\u037b\2\136"+ "\1\u037c\3\136\1\127\2\0\1\136\2\0\1\u037d\12\136"+ "\1\0\1\u037e\7\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u037f\12\136\1\u0380\3\136\1\u0381\5\136"+ "\1\127\2\0\1\136\2\0\1\u0382\12\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0328"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u0383"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u0384\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0385"+ "\4\136\1\u0386\20\136\1\127\2\0\1\136\2\0\1\u0387"+ "\12\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u0388\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u0389\1\u038a\1\136\1\u038b\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u038c\10\136\1\u038d"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u038e"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u038f"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0390"+ "\3\136\1\u0391\13\136\1\u0392\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\5\136\1\u022f\22\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\12\136\1\u02de\15\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u0393\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u02fd\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u0394\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u0395\1\136\1\u0396\1\136\1\u0397\4\136"+ "\1\u0398\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136"+ "\1\u0399\3\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u039a\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u039b\1\u039c\2\136\1\u039d\6\136\1\u039e\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u039f\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u03a0\1\u0242\3\136"+ "\1\u01e6\1\u03a1\6\136\1\u03a2\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u03a3\3\136\1\u03a4\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u03a5\15\136\1\u01c1\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u03a6\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u03a7\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u03a8\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u03a9\1\136"+ "\1\u03aa\13\136\1\u03ab\1\u03ac\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u03ad\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u03ae\2\136\1\u03af\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\24\136\1\u03b0\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u03b1\5\136\1\u03b2"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u03b3"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0334"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u03b4"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u03b5"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u03b6"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u03b7"+ "\26\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u03b8"+ "\3\136\1\u03b9\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u03ba\4\136\1\u01b8\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u03bb\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u03bc\7\136\1\u03bd\7\136\1\u0328\1\u03be\6\136"+ "\1\127\2\0\1\u03bf\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u03c0\2\136"+ "\1\u03c1\10\136\1\u03c2\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u0152\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u03c3\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u03c4\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u03c5\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u03c6\5\136\1\u03c7\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\26\136\1\u03c8\1\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u03c9\5\136\1\u03ca\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u03a9\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u03cb\4\136"+ "\1\u03cc\7\136\1\u03cd\1\136\1\u03ce\1\u03cf\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\136\1\u03d0\26\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u03d1\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\5\136\1\u03d2\22\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\27\136\1\u03d3\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u036d\5\136\1\u03d4\3\136"+ "\1\127\2\0\1\136\2\0\12\136\1\u03d5\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u03d6"+ "\2\136\1\u03d7\11\136\1\u03d8\1\136\1\u03d9\1\136\1\u03da"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0384"+ "\12\136\1\u03db\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u03dc\1\u03dd\1\u03a2\2\136\1\u03de\1\u03df\5\136"+ "\1\u03e0\5\136\1\u03e1\3\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\26\136\1\u03e2\1\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u03e3\1\136\1\u03e4\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u03e5\11\136\1\u03ac\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u03ae\1\u03e6"+ "\2\136\1\u03e7\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u03e8\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u03e9\1\136\1\u03ea\11\136\1\u03eb\3\136\1\u03ec"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u03ed"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u03ee\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u03ef"+ "\15\136\1\u03f0\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u03f1\3\136\1\u03f2\15\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u03f3\13\136\1\u03f4\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u03f5\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u02f7\4\136\1\u03f6\22\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u03ef\3\136"+ "\1\u03f7\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u03f8\24\136\1\u03f9\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u03fa\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u03fb"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u03fc"+ "\3\136\1\u03fd\13\136\1\u03fe\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u03ff\1\u0400\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0401\1\u0402\4\136\1\u0403"+ "\10\136\1\u03a2\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u0404\16\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\136\1\u0405\26\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u0406\1\u03b2\16\136\1\127\2\0\1\136\2\0"+ "\1\u022f\12\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u03b3\6\136\1\u0407\1\136\1\u0408"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u0409"+ "\22\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u040a"+ "\26\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u040b"+ "\21\136\1\u040c\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u040d\20\136\1\u040e\1\127\2\0\1\u040f\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u0410\5\136\1\u0411\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u0412\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u0413\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u0414\1\136\1\u01e6"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\1\136\1\u0415\7\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u02fd"+ "\14\136\1\u0416\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0417\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\u0418\2\0\1\u0152\12\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0419\21\136\1\u041a\3\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u041b\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\1\136\1\u041c\6\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u041d\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u041e\1\u041f\16\136\1\u0420\5\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\1\136\1\u0421\7\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0422\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0423\13\136"+ "\1\u022f\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136"+ "\1\u0424\22\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136"+ "\1\u0425\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0426\1\136\1\u0427\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u0428\1\136\1\u040f\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\27\136\1\u0429\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u042a\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u042b\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\4\136\1\u042c\3\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u042d\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u042e\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u042f\1\136\1\u0430\12\136\1\u0431"+ "\1\136\1\u0432\4\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u02e9\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u0161"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u02ff\4\136"+ "\1\u0433\1\u02e6\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u0434\3\136\1\u0435\1\136\1\u0436\11\136\1\u0437\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u0438\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0439\1\u043a\1\136"+ "\1\u043b\1\u043c\1\136\1\u043d\11\136\1\u043e\1\136\1\u0388"+ "\1\136\1\u01d5\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u043f\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u036d\1\u0440\4\136\1\u0441\5\136\1\u0442\3\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\26\136\1\u0443\1\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0444\23\136"+ "\1\u0445\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u0446"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0447"+ "\1\u0152\3\136\1\u0448\7\136\1\u0449\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u044a\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\136\1\u044b\3\136\1\u044c\1\u044d"+ "\1\u044e\1\u044f\10\136\1\u0450\5\136\1\u0451\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0452\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0453\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\136\1\u020f\6\136\1\u0454\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u0455\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0456\16\136"+ "\1\u0457\2\136\1\u0458\3\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\136\1\u020f\6\136\1\u01e6\5\136\1\u0459\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u045a\1\u01e6"+ "\13\136\1\u045b\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u045c"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u045d\2\136\1\u045e\2\136\1\u045f\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u0460\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0461\21\136\1\u0462\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u0463\1\u0464\6\136\1\u0465"+ "\17\136\1\127\2\0\1\u022f\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u0466"+ "\2\136\1\u0467\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\1\u02e9\7\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u0468\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u0469\12\136\1\u046a\7\136\1\u046b\1\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u046c\2\136"+ "\1\u046d\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u046e\23\136\1\127\2\0\1\136\2\0\10\136\1\u046f"+ "\2\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u0470\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u0471\17\136\1\u0388\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u0472\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u02e9\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\23\136\1\u0473\4\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0474\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0475\3\136\1\u0476\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\11\136\1\u0477\16\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u0478\3\136\1\u0479"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u03ae"+ "\14\136\1\u047a\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u047b\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\136\1\u047c\26\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u047d\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u047e\1\136\1\u047f\1\u0480\7\136\1\u0481\1\u0482"+ "\1\136\1\u0483\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u0484\1\u0485\1\u01ce\12\136\1\u0361\1\u0362\1\u0486"+ "\5\136\1\127\2\0\1\136\2\0\1\u01d7\12\136\1\0"+ "\10\136\1\127\10\0\6\u024e\1\0\11\u024e\1\0\1\u024e"+ "\1\0\1\127\1\u0487\1\u024e\1\0\2\u024e\14\0\30\u024e"+ "\1\127\2\0\1\u024e\2\0\13\u024e\1\0\10\u024e\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u0488\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0489\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u048a\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u048b\3\136"+ "\1\u048c\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u048d\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u048e"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u048f"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u0490"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\1\136\1\u0491\6\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u0492"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u0493"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0494\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0495\13\136"+ "\1\u0496\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u0497\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u0498\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\1\u0499\12\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\26\136\1\u049a"+ "\1\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u049b"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0203"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u049c\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u049d\17\136"+ "\1\u049e\1\136\1\u049f\3\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\11\0\6\u0266\1\0\11\u0266\1\0"+ "\1\u0266\5\0\2\u0266\14\0\30\u0266\3\0\1\u0266\2\0"+ "\13\u0266\1\0\10\u0266\11\0\1\u04a0\54\0\1\u04a0\62\0"+ "\6\u026a\1\0\13\u026a\5\0\2\u026a\1\0\1\u026a\12\0"+ "\30\u026a\3\0\1\u026a\2\0\13\u026a\1\0\10\u026a\63\0"+ "\1\u04a1\1\u04a2\20\0\1\u04a3\116\0\1\u04a4\151\0\1\u04a5"+ "\135\0\1\u04a6\5\0\1\u04a7\113\0\1\u04a8\17\0\1\u04a9"+ "\140\0\1\u04aa\116\0\1\u04ab\5\0\1\u04ac\151\0\1\u04ad"+ "\121\0\1\u04ae\15\0\1\u04af\135\0\1\u04b0\133\0\1\u04b1"+ "\125\0\1\u04b2\137\0\1\u04b3\72\0\6\u0278\1\0\13\u0278"+ "\5\0\2\u0278\1\0\1\u0278\12\0\30\u0278\3\0\1\u0278"+ "\2\0\13\u0278\1\0\10\u0278\74\0\1\u0279\145\0\1\u0279"+ "\6\0\1\u0279\106\0\1\u0279\16\0\1\u0279\11\0\1\u0279"+ "\130\0\1\u0279\123\0\1\u0279\13\0\1\u0279\137\0\1\u04b4"+ "\46\0\2\357\1\u04b5\3\357\1\0\10\357\2\0\1\357"+ "\5\0\2\357\14\0\3\357\1\u04b5\24\357\3\0\1\357"+ "\2\0\13\357\1\0\10\357\11\0\6\357\1\0\1\u04b6"+ "\7\357\2\0\1\357\5\0\2\357\14\0\23\357\1\u04b6"+ "\4\357\3\0\1\357\2\0\13\357\1\0\10\357\31\0"+ "\1\u04b7\176\0\1\u04b8\131\0\1\u0289\130\0\1\u04b9\153\0"+ "\1\u04ba\113\0\1\u04bb\74\0\2\54\1\0\1\54\1\0"+ "\2\54\2\0\6\54\1\0\26\54\1\0\21\54\1\u04bc"+ "\22\54\1\0\24\54\2\64\1\0\1\64\1\0\2\64"+ "\2\0\3\64\1\u04bd\2\64\1\0\26\64\1\0\7\64"+ "\1\u04bd\34\64\1\0\26\64\1\0\1\64\1\0\2\64"+ "\2\0\1\64\1\u02a7\4\64\1\0\26\64\1\0\25\64"+ "\2\111\1\64\1\u02a7\13\64\1\0\26\64\1\0\1\64"+ "\1\0\2\64\2\0\3\64\1\u04be\2\64\1\0\26\64"+ "\1\0\7\64\1\u04be\17\64\1\u04bf\14\64\1\0\1\64"+ "\1\u04bf\24\64\1\0\1\64\1\0\2\64\2\0\5\64"+ "\1\u04c0\1\0\26\64\1\0\11\64\1\u04c0\32\64\1\0"+ "\26\64\1\0\1\64\1\0\2\64\2\0\6\64\1\0"+ "\26\64\1\0\35\64\1\u02a7\6\64\1\0\6\64\1\u02a7"+ "\17\64\1\0\1\64\1\0\2\64\2\0\6\64\1\0"+ "\2\64\1\u04c1\23\64\1\0\13\64\1\u04c1\30\64\1\0"+ "\26\64\1\0\1\64\1\0\2\64\2\0\4\64\1\111"+ "\1\64\1\0\26\64\1\0\20\64\1\111\23\64\1\0"+ "\26\64\1\0\1\64\1\0\2\64\2\0\2\64\1\u04c2"+ "\3\64\1\0\26\64\1\0\12\64\1\u04c2\31\64\1\0"+ "\26\64\1\0\1\64\1\0\2\64\2\0\6\64\1\0"+ "\1\64\1\u02c0\24\64\1\0\16\64\1\u02c0\25\64\1\0"+ "\26\64\1\0\1\64\1\0\2\64\2\0\6\64\1\0"+ "\2\64\1\111\23\64\1\0\13\64\1\111\30\64\1\0"+ "\26\64\1\0\1\64\1\0\2\64\2\0\5\64\1\u02a7"+ "\1\0\26\64\1\0\11\64\1\u02a7\32\64\1\0\26\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\26\64"+ "\1\0\35\64\1\u04c3\6\64\1\0\6\64\1\u04c3\17\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\26\64"+ "\1\0\10\64\1\u04c4\33\64\1\0\3\64\1\u04c4\22\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\26\64"+ "\1\0\33\64\1\u04c5\10\64\1\0\2\64\1\u04c5\23\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\26\64"+ "\1\0\25\64\2\u04c6\15\64\1\0\26\64\1\0\1\64"+ "\1\0\2\64\2\0\6\64\1\0\1\u02a7\25\64\1\0"+ "\32\64\1\u02a7\11\64\1\0\26\64\1\0\1\64\1\0"+ "\2\64\2\0\6\64\1\0\26\64\1\0\15\64\1\u04c7"+ "\6\64\1\u04c7\17\64\1\0\26\64\1\0\1\64\1\0"+ "\2\64\2\0\6\64\1\0\12\64\1\u02b8\13\64\1\0"+ "\22\64\1\u02b8\21\64\1\0\26\64\1\0\1\64\1\0"+ "\2\64\2\0\6\64\1\0\26\64\1\0\10\64\1\u02bf"+ "\33\64\1\0\3\64\1\u02bf\22\64\1\0\1\64\1\0"+ "\2\64\2\0\3\64\1\u04c8\2\64\1\0\26\64\1\0"+ "\7\64\1\u04c8\34\64\1\0\26\64\1\0\1\64\1\0"+ "\2\64\2\0\6\64\1\0\26\64\1\0\15\64\1\u02b7"+ "\6\64\1\u02b7\17\64\1\0\26\64\1\0\1\64\1\0"+ "\2\64\2\0\5\64\1\u04c9\1\0\26\64\1\0\11\64"+ "\1\u04c9\32\64\1\0\26\64\1\0\1\64\1\0\2\64"+ "\2\0\6\64\1\0\26\64\1\0\27\64\1\u02b8\14\64"+ "\1\0\1\64\1\u02b8\24\64\1\0\1\64\1\0\2\64"+ "\2\0\6\64\1\0\26\64\1\0\15\64\1\u0139\6\64"+ "\1\u0139\17\64\1\0\26\64\1\0\1\64\1\0\2\64"+ "\2\0\6\64\1\0\26\64\1\0\34\64\1\111\7\64"+ "\1\0\4\64\1\111\21\64\1\0\1\64\1\0\2\64"+ "\2\0\6\64\1\0\2\64\1\u04ca\23\64\1\0\13\64"+ "\1\u04ca\30\64\1\0\26\64\1\0\1\64\1\0\2\64"+ "\2\0\6\64\1\0\2\64\1\u013b\23\64\1\0\13\64"+ "\1\u013b\30\64\1\0\26\64\1\0\1\64\1\0\2\64"+ "\2\0\6\64\1\0\2\64\1\u02c0\23\64\1\0\13\64"+ "\1\u02c0\30\64\1\0\26\64\1\0\1\64\1\0\2\64"+ "\2\0\6\64\1\0\2\64\1\u0139\23\64\1\0\13\64"+ "\1\u0139\30\64\1\0\26\64\1\0\1\64\1\0\2\64"+ "\2\0\6\64\1\0\26\64\1\0\25\64\2\u04cb\15\64"+ "\1\0\26\64\1\0\1\64\1\0\2\64\2\0\1\64"+ "\1\u04cc\4\64\1\0\26\64\1\0\30\64\1\u04cc\13\64"+ "\1\0\26\64\1\0\1\64\1\0\2\64\2\0\5\64"+ "\1\u04cd\1\0\26\64\1\0\11\64\1\u04cd\32\64\1\0"+ "\26\64\1\0\1\64\1\0\2\64\2\0\6\64\1\0"+ "\26\64\1\0\27\64\1\u04ce\14\64\1\0\1\64\1\u04ce"+ "\24\64\1\0\1\64\1\0\2\64\2\0\6\64\1\0"+ "\2\64\1\u04cf\23\64\1\0\13\64\1\u04cf\30\64\1\0"+ "\26\64\1\0\1\64\1\0\2\64\2\0\6\64\1\0"+ "\1\111\25\64\1\0\32\64\1\111\11\64\1\0\26\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\1\64"+ "\1\u04d0\24\64\1\0\16\64\1\u04d0\25\64\1\0\26\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\26\64"+ "\1\0\15\64\1\u04d1\6\64\1\u04d1\17\64\1\0\26\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\26\64"+ "\1\0\15\64\1\u04d2\6\64\1\u04d2\17\64\1\0\26\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\26\64"+ "\1\0\33\64\1\u04d3\10\64\1\0\2\64\1\u04d3\23\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\1\64"+ "\1\u04d4\24\64\1\0\16\64\1\u04d4\25\64\1\0\26\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\12\64"+ "\1\u04d5\13\64\1\0\22\64\1\u04d5\21\64\1\0\26\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\26\64"+ "\1\0\33\64\1\111\10\64\1\0\2\64\1\111\23\64"+ "\1\0\1\64\1\0\2\64\2\0\5\64\1\111\1\0"+ "\26\64\1\0\11\64\1\111\32\64\1\0\26\64\1\0"+ "\1\64\1\0\2\64\2\0\6\64\1\0\21\64\1\u0296"+ "\4\64\1\0\31\64\1\u0296\12\64\1\0\26\64\1\0"+ "\1\64\1\0\2\64\2\0\6\64\1\0\26\64\1\0"+ "\27\64\1\u04d6\14\64\1\0\1\64\1\u04d6\24\64\1\0"+ "\1\64\1\0\2\64\2\0\3\64\1\u04d7\2\64\1\0"+ "\26\64\1\0\7\64\1\u04d7\34\64\1\0\26\64\1\0"+ "\1\64\1\0\2\64\2\0\6\64\1\0\26\64\1\0"+ "\15\64\1\111\6\64\1\111\17\64\1\0\26\64\1\0"+ "\1\64\1\0\2\64\2\0\6\64\1\0\1\64\1\u04d8"+ "\24\64\1\0\16\64\1\u04d8\25\64\1\0\26\64\1\0"+ "\1\64\1\0\2\64\2\0\3\64\1\u011b\2\64\1\0"+ "\26\64\1\0\7\64\1\u011b\34\64\1\0\26\64\1\0"+ "\1\64\1\0\2\64\2\0\2\64\1\u04d9\3\64\1\0"+ "\26\64\1\0\12\64\1\u04d9\31\64\1\0\26\64\1\0"+ "\1\64\1\0\2\64\2\0\6\64\1\0\21\64\1\u04da"+ "\4\64\1\0\31\64\1\u04da\12\64\1\0\26\64\1\0"+ "\1\64\1\0\2\64\2\0\1\64\1\371\4\64\1\0"+ "\26\64\1\0\30\64\1\371\13\64\1\0\26\64\1\0"+ "\1\64\1\0\2\64\2\0\6\64\1\0\26\64\1\0"+ "\33\64\1\u04db\10\64\1\0\2\64\1\u04db\23\64\1\0"+ "\1\64\1\0\2\64\2\0\2\64\1\u04dc\3\64\1\0"+ "\26\64\1\0\12\64\1\u04dc\31\64\1\0\26\64\1\0"+ "\1\64\1\0\2\64\2\0\3\64\1\u04cd\2\64\1\0"+ "\26\64\1\0\7\64\1\u04cd\1\u04c4\33\64\1\0\3\64"+ "\1\u04c4\22\64\1\0\1\64\1\0\2\64\2\0\4\64"+ "\1\u029e\1\64\1\0\26\64\1\0\20\64\1\u029e\23\64"+ "\1\0\26\64\1\0\1\64\1\0\2\64\2\0\6\64"+ "\1\0\2\64\1\u013b\23\64\1\0\13\64\1\u013b\1\64"+ "\1\111\6\64\1\111\17\64\1\0\26\64\1\0\1\64"+ "\1\0\2\64\2\0\6\64\1\0\12\64\1\111\13\64"+ "\1\0\22\64\1\111\21\64\1\0\26\64\1\0\1\64"+ "\1\0\2\64\2\0\5\64\1\u04dd\1\0\26\64\1\0"+ "\11\64\1\u04dd\32\64\1\0\26\64\1\0\1\64\1\0"+ "\2\64\2\0\6\64\1\0\26\64\1\0\34\64\1\111"+ "\7\64\1\0\4\64\1\111\1\u04de\6\64\1\u04de\11\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\26\64"+ "\1\0\10\64\1\u04df\33\64\1\0\3\64\1\u04df\22\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\2\64"+ "\1\u011b\23\64\1\0\13\64\1\u011b\30\64\1\0\24\64"+ "\70\0\1\u04e0\61\0\1\u04e1\64\0\1\u04e1\130\0\1\u04e2"+ "\125\0\2\u02d0\22\0\1\u02d0\45\0\1\u04e3\127\0\1\127"+ "\10\0\1\127\1\u04e4\4\127\1\0\2\127\1\u04e4\1\127"+ "\4\u04e4\1\127\1\0\1\127\1\0\3\127\1\0\1\127"+ "\1\u04e4\14\0\4\127\3\u04e4\5\127\2\u04e4\3\127\2\u04e4"+ "\4\127\1\u04e4\1\127\2\0\1\127\2\0\10\127\1\u04e4"+ "\2\127\1\0\1\127\3\u04e4\1\127\3\u04e4\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u04e5\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\u0149\10\0\6\u0149"+ "\1\0\4\u0149\2\u02d4\1\u0149\1\u02d4\1\u0149\1\0\1\u0149"+ "\1\0\3\u0149\1\0\1\u0149\1\u014c\14\0\5\u0149\1\u014c"+ "\6\u0149\1\u014c\5\u0149\1\u014c\6\u0149\2\0\1\u0149\2\0"+ "\10\u0149\1\u02d4\2\u0149\1\0\1\u0149\3\u02d4\1\u0149\3\u02d4"+ "\24\0\2\u02d4\1\0\1\u02d4\74\0\1\u02d4\4\0\3\u02d4"+ "\1\0\3\u02d4\1\u0149\10\0\1\u0149\1\u02d7\4\u0149\1\0"+ "\1\u0149\1\u02d6\1\u02d7\1\u0149\4\u02d7\1\u0149\1\0\1\u0149"+ "\1\0\3\u0149\1\0\1\u0149\1\u02d7\14\0\4\u0149\3\u02d7"+ "\1\u02d6\4\u0149\2\u02d7\3\u0149\2\u02d7\4\u0149\1\u02d7\1\u0149"+ "\2\0\1\u0149\2\0\10\u0149\1\u02d7\2\u0149\1\0\1\u0149"+ "\3\u02d7\1\u0149\3\u02d7\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u015d\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u04e6\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u04e7\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u04e8\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u04e9\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u04ea\10\136\1\u04eb\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u0152\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u04ec\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u04ed\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u0152\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u04ee\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u04ef\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u04f0\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\12\136\1\u04f1\15\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0152\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u01b3\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u0152\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u022f\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u04f2\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u04eb\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u04f3\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u04f4\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u02df\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u04f5\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u04f6\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\136\1\u04f7\26\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0165\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u04f8\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u04f5\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u04f9\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u02ff\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u04f8\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\26\136\1\u04fa\1\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u04fb\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u04fc\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\25\136\1\u04fd\2\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u0152\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u04fe\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u030b\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u02e1\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u04f7\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u04ff\5\136\1\u03c6\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u0500\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0501\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u0502\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136"+ "\1\u0503\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0504"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0505"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u0506"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u04f7"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\12\136\1\u0152"+ "\15\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u02e6"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\70\0\1\u0507\61\0\1\u0508\7\0\1\u0508\1\0\4\u0508"+ "\11\0\1\u0508\20\0\3\u0508\5\0\2\u0508\3\0\2\u0508"+ "\4\0\1\u0508\16\0\1\u0508\4\0\3\u0508\1\0\3\u0508"+ "\12\0\1\u0509\7\0\1\u0509\1\0\4\u0509\11\0\1\u0509"+ "\20\0\3\u0509\5\0\2\u0509\3\0\2\u0509\4\0\1\u0509"+ "\16\0\1\u0509\4\0\3\u0509\1\0\3\u0509\70\0\1\u050a"+ "\61\0\1\u050b\64\0\1\u050b\122\0\1\u0313\130\0\1\u050c"+ "\153\0\1\u050d\113\0\1\u050e\106\0\1\u050f\64\0\1\u050f"+ "\122\0\1\u0318\130\0\1\u0510\153\0\1\u0511\113\0\1\u0512"+ "\74\0\1\127\10\0\6\136\1\0\2\136\1\u04ec\6\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\1\136\1\u0513\7\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\3\136\1\u0514\2\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0515\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u0516\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\3\136\1\u0517\2\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\13\136\1\u0518\14\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\15\136\1\u0519\12\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u0242\11\136\1\u051a\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\2\136\1\u051b\6\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\7\136\1\u051c\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u051d\15\136\1\u051e\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u051f\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0520\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u03e3\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u03ef\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\u0521\2\0\13\136\1\0\1\u0522\7\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0523\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u0524\17\136\1\u0525\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0526\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0525\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0527\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u0528\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u03a2\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u0529\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u052a\20\136\1\u022f"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u052b\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u052c\2\136"+ "\1\u052d\1\u0337\1\u052e\1\u052f\1\u0530\1\u0531\5\136\1\u0532"+ "\1\136\1\u0533\1\u0534\1\u0535\4\136\1\u0536\1\127\2\0"+ "\1\136\2\0\1\u0537\12\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\22\136\1\u022f\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0538\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0539\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\u053a"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u0364\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u053b\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u053c\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u053d\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u03c6\1\136\1\u053e\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\12\136\1\u053b\15\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u03bf\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u053f\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u0540\17\136\1\u03ef\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\12\136\1\u033d\11\136\1\u02e9\3\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0541\6\136"+ "\1\u0542\15\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u0543\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u0544\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u0545\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u0546\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u0547\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u022f\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0548\21\136\1\u015f\1\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0549\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u022f\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u04e9\1\136\1\u054a\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u054b\3\136\1\u054c"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u054d"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u054e"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u054f"+ "\7\136\1\u0550\16\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u0551\10\136\1\u0552\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u0553\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\136\1\u0554\26\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u0555\1\0\1\u0556\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u0557\1\u0558\1\u0559\1\u055a\1\u055b"+ "\1\u055c\1\u055d\1\u055e\1\u055f\1\u0560\1\u0561\3\136\1\u0562"+ "\1\136\1\u0563\1\u0564\1\u0565\1\136\1\u0566\1\136\1\u0567"+ "\1\u0568\1\127\2\0\1\136\2\0\1\u0569\12\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136"+ "\1\u056a\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u056b\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u056c\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u056d\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u0543\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\25\136\1\u056e\2\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u056f\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u0570\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0571\23\136\1\127"+ "\2\0\1\136\2\0\12\136\1\u0572\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0242\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0573\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u0574\1\136"+ "\1\u01c1\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u03aa\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u0575"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u03af\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136"+ "\1\u03b2\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u03b3\10\136\1\u0576\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0570\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u0372\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\23\136\1\u0577\4\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0578\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u04ec\11\136\1\u0579\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\136\1\u057a\22\136\1\u022f\3\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u057b\16\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u057c\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u057d\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u057e\26\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\12\136\1\u022f\15\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u057f\13\136"+ "\1\u0172\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u038d\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0580\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\1\u0581\12\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u022f"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u0338"+ "\22\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0582\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0583\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u0584\1\u0585\11\136"+ "\1\u0586\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u0587\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u0588"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0589\1\136\1\u03ef\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u058a\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u058b\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u058c\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u058d\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u058e\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u058f\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u0590\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u0372\20\136"+ "\1\u022f\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\1\136\1\u0591"+ "\6\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u0592"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u0593\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u0334\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u0594\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u0595\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u0596\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u0540\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u0597\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\136\1\u0598\26\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u0372\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0599\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u059a\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u059b\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u059c\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\27\136\1\u059d\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u059e\4\136\1\u059f\2\136\1\u05a0\11\136\1\u05a1"+ "\5\136\1\127\2\0\1\136\2\0\1\u05a2\12\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u05a3\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136"+ "\1\u05a4\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u05a5\2\136\1\u05a6\22\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u05a7\1\u05a8\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u05a9\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u05aa\10\136\1\u0328\3\136\1\u05ab"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u05ac"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u05ad"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u05ae"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u05af"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u05b0"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u02fd"+ "\13\136\1\u022f\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u05b1\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u05b2\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u05b3\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\25\136\1\u022f\2\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u05b4\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u05b5\1\136\1\u0334"+ "\7\136\1\u05b6\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u05b7\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u03a7\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u038d"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u05b8"+ "\11\136\1\u0540\1\u03a2\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u03ef\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u03a2\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u05b9\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u05ba\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u05bb\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u05bc\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u0403\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u05bd\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u05be\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u049c\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u038b\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\1\u05bf"+ "\7\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0543"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u05c0"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u05c1"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u05c2"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u05c3"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u05c4"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u049c"+ "\26\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u036d"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u05c5\3\136"+ "\1\u05c6\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u05c7"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u02e9"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u05c8"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u05c9"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u05ca\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u036d\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u05cb\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u05cc"+ "\1\u05cd\1\u05ce\1\136\1\u05cf\10\136\1\u05d0\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u0152\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\25\136\1\u05d1\2\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u05d2\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u05d3\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\136\1\u05d4\26\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\6\136\1\u05d5\1\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\22\136\1\u05d6\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\136\1\u05d7\26\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\25\136\1\u05d8\2\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u05d9\16\136\1\u022f"+ "\2\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u05da\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u05db\16\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u05dc\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u05dd\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u05de\10\136\1\u05df\16\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u05e0\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u05e1\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u05e2\1\136"+ "\1\u05e3\1\u05e4\1\u05e5\1\u056e\1\136\1\u03b2\1\u05e6\1\u05e7"+ "\4\136\1\u05e8\2\136\1\u05e9\4\136\1\u015f\1\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u05ea\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u05eb\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\1\136\1\u05ec\4\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u05ed\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u05ee\1\136\1\u05ef"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u05f0\1\0\1\u053b"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u05f1"+ "\1\136\1\u05f2\1\u05f3\1\136\1\u05f4\1\u05f5\1\u05f6\1\u05f7"+ "\1\u05f8\1\u05f9\3\136\1\u057d\1\136\1\u05fa\1\u05fb\1\u05fc"+ "\1\136\1\u05fd\2\136\1\u05fe\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u05ff\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0600\1\u0152\22\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u0601\1\136\1\u0602\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u0603\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u0604\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u05d6\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u053b\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\26\136\1\u0605\1\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u0606\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u0607\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u0608\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u0609\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\5\136\1\u060a\22\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u060b\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\6\136\1\u046f\1\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\1\u060c\12\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u060d"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u060e\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\11\136\1\u060f\16\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u0610\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u022f\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\25\136\1\u0611\2\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u0612\6\136\1\u01bb\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0613\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0614\4\136\1\u0615\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u033a\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\1\u0616\12\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u0617\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u0618\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u0619\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u061a\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u061b\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u061c\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\136\1\u022f\26\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u061d\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u061e\1\u061f\1\u0620\1\u0621"+ "\1\u0622\1\u0623\1\u0624\1\u0625\1\u0626\1\u0627\1\u0628\3\136"+ "\1\u0629\1\136\1\u062a\1\u062b\1\u062c\1\136\1\u062d\1\136"+ "\1\u0567\1\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\1\u062e\7\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u062f\7\136\1\u04fa\1\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\136\1\u0630\3\136\1\u0631\3\136\1\u0632"+ "\14\136\1\u0633\1\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u04fb\16\136\1\u0634\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u03ab\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0635\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\12\136\1\u0354\15\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0636\3\136\1\u0637\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u0638\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u0639\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u056b\20\136\1\u063a"+ "\4\136\1\u0567\1\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\1\136"+ "\1\u063b\6\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u063c\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u063d\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u063e\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u063f\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\12\136\1\u0640"+ "\15\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u0641"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u0642"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u0643"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0644"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u0645"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u0646\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136"+ "\1\u0647\1\u0648\1\136\1\u0649\5\136\1\u0335\2\136\1\u064a"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u0364"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u03ef"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u064b\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u064c\1\u064d"+ "\1\136\1\u064e\1\u064f\1\u0650\1\u0651\1\136\1\u0652\1\u0653"+ "\4\136\1\u0654\1\136\1\u0655\1\u0656\1\u0657\1\136\1\u0658"+ "\3\136\1\127\2\0\1\136\2\0\1\u0659\12\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136"+ "\1\u065a\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\1\u031b\5\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u065b\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136"+ "\1\u065c\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u065d"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u065e"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u01b8"+ "\10\136\1\u065f\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0660\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u0661\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\27\136\1\u0540\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136"+ "\1\u0662\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0663\1\136\1\u0664\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\24\136\1\u05ff\3\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0665\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\1\136"+ "\1\u0152\7\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\11\136\1\u0666\16\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u0667\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u0668\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u0669"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u066a"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u066b"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u066c\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u066d"+ "\2\136\1\u066e\1\u066f\1\u0670\1\136\1\u0671\1\u0672\1\u0673"+ "\4\136\1\u0674\2\136\1\u0675\1\u0676\4\136\1\u0677\1\127"+ "\2\0\1\136\2\0\1\u0678\12\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u0679\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u067a\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u067b\1\u067c\1\u067d"+ "\1\136\1\u067e\1\u01ce\1\136\1\u067f\1\u0680\10\136\1\u0681"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0682"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0683"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0684"+ "\3\136\1\u0685\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u0686\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u0687\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\5\136"+ "\1\u0688\2\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u03ef\16\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u0689"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u068a\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u068b\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u068c\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u068d\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u068e\5\136\1\u068f\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u0690\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u0691\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u053b\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u0412\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u0692\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0693\12\136\1\u0694\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u022f\16\136"+ "\1\127\2\0\1\136\2\0\1\u049c\12\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u0695"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\23\136\1\u022f"+ "\4\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0696"+ "\5\136\1\u0697\5\136\1\u0698\7\136\1\u0699\1\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\11\136\1\u05a7\12\136\1\u069a"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u069b"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u069c\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u069d\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\11\136\1\u069e\16\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u0391\16\136\1\u069f"+ "\2\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u06a0\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\1\u06a1\12\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\1\136\1\u06a2\6\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u06a3\5\136\1\u0500\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u06a4\26\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u06a5\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u06a6\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u054b\3\136"+ "\1\u06a7\2\136\1\u06a8\5\136\1\u06a9\6\136\1\u0262\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u06aa\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u06ab\1\136\1\u06ac\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u05ee\11\136\1\u06ad"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u06ae\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u06af\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u06b0\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u06b1\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u05f2\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u06b2\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\u06b3\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\136\1\u020f\26\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u06b4\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u061e\2\136\1\u06b5\1\u06b6\1\u06b7\10\136"+ "\1\u06b8\1\136\1\u0361\1\u01d4\1\u06b9\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\136\1\u06ba\2\136\1\u06bb\1\u032e"+ "\1\u0242\7\136\1\u0335\2\136\1\u03a9\1\136\1\u06bc\1\u06bd"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u06be"+ "\26\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u06bf"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u06c0"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u06c1"+ "\1\136\1\u06c2\4\136\1\u06c3\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u06c4\3\136\1\u06c5\15\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u06c6\1\u06c7\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u022f\6\136"+ "\1\u022f\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u06c8"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u06c9"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u06ca\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u06cb\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u06cc\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u06cd\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u06ce\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u06cf\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\23\136\1\u06d0\4\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u06d1\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u06d2\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u0373\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\1\u06d3\7\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u06d4\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u06d5\1\u06d6\1\136\1\u06d7\1\u06d8\2\136"+ "\1\u06d9\1\u06da\1\u06db\1\u06dc\5\136\1\u06dd\1\u06de\1\u06df"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u06e0\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u06e1\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u06e2\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u06e3\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u03ae\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u06e4\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u06e5\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u06e6\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u06e7\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\11\136\1\u06e8\16\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\22\136\1\u06e9\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\1\136\1\u06ea\6\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u06eb\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u06ec\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u0334\5\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u06ed\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u06ee\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\1\u0328\7\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u06ef"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u06f0"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u06f1\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u02e9\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0334\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u06f2\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u06f3\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u056f\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\127\1\0\11\127\1\0\1\u06f4\1\0\3\127"+ "\1\0\2\127\14\0\31\127\2\0\1\127\2\0\13\127"+ "\1\0\11\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u06f5\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u06f6\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u06f7\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u06f8\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u06f9\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u06fa\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u06fb"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u06fc\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u06fd\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u06fe\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\u06ff\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u0700\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u0701\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u0702"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u0703"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0440\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0704\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u0705\3\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0706\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u0707\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u0708\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u0709\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u022f\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u070a\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u070b\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u070c\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\16\0\1\u070d\41\0"+ "\1\u070d\135\0\1\u070e\144\0\1\u070f\136\0\1\u0710\136\0"+ "\1\u0711\154\0\1\u04af\125\0\1\u0712\142\0\1\u0713\131\0"+ "\1\u0714\155\0\1\u0715\120\0\1\u0716\153\0\1\u0717\131\0"+ "\1\u0718\5\0\1\u0719\147\0\1\u071a\123\0\1\u071b\127\0"+ "\1\u071c\144\0\1\u071d\134\0\1\u071e\143\0\1\u04a6\137\0"+ "\1\u071f\140\0\1\u0720\61\0\3\357\1\u0721\2\357\1\0"+ "\10\357\2\0\1\357\5\0\2\357\14\0\1\u0721\27\357"+ "\3\0\1\357\2\0\13\357\1\0\10\357\11\0\6\357"+ "\1\0\1\357\1\u0722\6\357\2\0\1\357\5\0\2\357"+ "\14\0\7\357\1\u0722\20\357\3\0\1\357\2\0\13\357"+ "\1\0\10\357\67\0\1\u0723\60\0\1\u0724\202\0\1\u04b9"+ "\12\0\1\u0289\56\0\2\u0725\1\0\7\u04bb\1\0\10\u04bb"+ "\2\u0725\1\u04bb\1\0\1\u0725\1\0\1\u04bb\1\u0725\2\u04bb"+ "\2\u0725\1\0\2\u0725\1\0\5\u0725\1\0\30\u04bb\3\u0725"+ "\1\u04bb\2\u0725\13\u04bb\1\0\10\u04bb\2\54\1\0\1\54"+ "\1\0\2\54\2\0\6\54\1\0\26\54\1\0\20\54"+ "\1\u0726\23\54\1\0\24\54\2\64\1\0\1\64\1\0"+ "\2\64\2\0\4\64\1\u02b8\1\64\1\0\26\64\1\0"+ "\20\64\1\u02b8\23\64\1\0\26\64\1\0\1\64\1\0"+ "\2\64\2\0\6\64\1\0\26\64\1\0\34\64\1\u0296"+ "\7\64\1\0\4\64\1\u0296\21\64\1\0\1\64\1\0"+ "\2\64\2\0\6\64\1\0\26\64\1\0\25\64\2\u010a"+ "\15\64\1\0\26\64\1\0\1\64\1\0\2\64\2\0"+ "\3\64\1\u04cd\2\64\1\0\26\64\1\0\7\64\1\u04cd"+ "\34\64\1\0\26\64\1\0\1\64\1\0\2\64\2\0"+ "\1\64\1\u02b8\4\64\1\0\26\64\1\0\30\64\1\u02b8"+ "\13\64\1\0\26\64\1\0\1\64\1\0\2\64\2\0"+ "\1\64\1\u0296\4\64\1\0\26\64\1\0\30\64\1\u0296"+ "\13\64\1\0\26\64\1\0\1\64\1\0\2\64\2\0"+ "\6\64\1\0\26\64\1\0\15\64\1\u0727\6\64\1\u0727"+ "\17\64\1\0\26\64\1\0\1\64\1\0\2\64\2\0"+ "\2\64\1\u0728\3\64\1\0\26\64\1\0\12\64\1\u0728"+ "\31\64\1\0\26\64\1\0\1\64\1\0\2\64\2\0"+ "\6\64\1\0\2\64\1\u0729\23\64\1\0\13\64\1\u0729"+ "\1\64\1\u04ca\6\64\1\u04ca\17\64\1\0\26\64\1\0"+ "\1\64\1\0\2\64\2\0\6\64\1\0\21\64\1\u072a"+ "\4\64\1\0\31\64\1\u072a\12\64\1\0\26\64\1\0"+ "\1\64\1\0\2\64\2\0\6\64\1\0\26\64\1\0"+ "\33\64\1\u0296\10\64\1\0\2\64\1\u0296\23\64\1\0"+ "\1\64\1\0\2\64\2\0\6\64\1\0\26\64\1\0"+ "\25\64\2\u072b\15\64\1\0\26\64\1\0\1\64\1\0"+ "\2\64\2\0\6\64\1\0\26\64\1\0\15\64\1\u072c"+ "\6\64\1\u072c\17\64\1\0\26\64\1\0\1\64\1\0"+ "\2\64\2\0\6\64\1\0\26\64\1\0\25\64\2\u0139"+ "\15\64\1\0\26\64\1\0\1\64\1\0\2\64\2\0"+ "\5\64\1\u072d\1\0\26\64\1\0\11\64\1\u072d\32\64"+ "\1\0\26\64\1\0\1\64\1\0\2\64\2\0\6\64"+ "\1\0\26\64\1\0\34\64\1\u072e\7\64\1\0\4\64"+ "\1\u072e\21\64\1\0\1\64\1\0\2\64\2\0\6\64"+ "\1\0\26\64\1\0\27\64\1\u0121\14\64\1\0\1\64"+ "\1\u0121\24\64\1\0\1\64\1\0\2\64\2\0\6\64"+ "\1\0\12\64\1\u04ca\13\64\1\0\22\64\1\u04ca\21\64"+ "\1\0\26\64\1\0\1\64\1\0\2\64\2\0\6\64"+ "\1\0\26\64\1\0\14\64\1\u072f\6\64\1\u072f\20\64"+ "\1\0\26\64\1\0\1\64\1\0\2\64\2\0\6\64"+ "\1\0\26\64\1\0\27\64\1\u010a\14\64\1\0\1\64"+ "\1\u010a\24\64\1\0\1\64\1\0\2\64\2\0\3\64"+ "\1\u0730\2\64\1\0\26\64\1\0\7\64\1\u0730\34\64"+ "\1\0\26\64\1\0\1\64\1\0\2\64\2\0\5\64"+ "\1\u0731\1\0\1\64\1\u0732\24\64\1\0\10\64\1\u0733"+ "\1\u0731\4\64\1\u0732\25\64\1\0\3\64\1\u0733\22\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\2\64"+ "\1\u0734\23\64\1\0\13\64\1\u0734\30\64\1\0\26\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\21\64"+ "\1\u0735\4\64\1\0\31\64\1\u0735\12\64\1\0\26\64"+ "\1\0\1\64\1\0\2\64\2\0\2\64\1\u0296\3\64"+ "\1\0\26\64\1\0\12\64\1\u0296\31\64\1\0\26\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\26\64"+ "\1\0\25\64\2\u0736\15\64\1\0\26\64\1\0\1\64"+ "\1\0\2\64\2\0\1\64\1\u0105\4\64\1\0\26\64"+ "\1\0\30\64\1\u0105\13\64\1\0\26\64\1\0\1\64"+ "\1\0\2\64\2\0\6\64\1\0\2\64\1\u02b8\23\64"+ "\1\0\13\64\1\u02b8\30\64\1\0\26\64\1\0\1\64"+ "\1\0\2\64\2\0\6\64\1\0\2\64\1\u0737\23\64"+ "\1\0\13\64\1\u0737\30\64\1\0\26\64\1\0\1\64"+ "\1\0\2\64\2\0\6\64\1\0\26\64\1\0\15\64"+ "\1\u0738\6\64\1\u0738\17\64\1\0\26\64\1\0\1\64"+ "\1\0\2\64\2\0\3\64\1\u0739\2\64\1\0\26\64"+ "\1\0\7\64\1\u0739\34\64\1\0\26\64\1\0\1\64"+ "\1\0\2\64\2\0\6\64\1\0\12\64\1\u073a\13\64"+ "\1\0\22\64\1\u073a\21\64\1\0\26\64\1\0\1\64"+ "\1\0\2\64\2\0\6\64\1\0\2\64\1\u0121\23\64"+ "\1\0\13\64\1\u0121\30\64\1\0\24\64\67\0\1\u073b"+ "\63\0\1\u073c\45\0\1\u073c\145\0\1\u073d\50\0\1\127"+ "\10\0\1\127\1\u073e\4\127\1\0\2\127\1\u073e\1\127"+ "\4\u073e\1\127\1\0\1\127\1\0\3\127\1\0\1\127"+ "\1\u073e\14\0\4\127\3\u073e\5\127\2\u073e\3\127\2\u073e"+ "\4\127\1\u073e\1\127\2\0\1\127\2\0\10\127\1\u073e"+ "\2\127\1\0\1\127\3\u073e\1\127\3\u073e\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u073f\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u03b5\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\17\136\1\u022f\10\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u0740\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u0741\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0742\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u03c6\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u0743\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\1\u0744\12\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u059e\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0745\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u0746\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0747\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u0748\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u04f7\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0749\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u074a\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\12\136\1\u074b\15\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u0501\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u074c\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u074d\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u074e\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\26\136\1\u02e6\1\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u074f\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u0750\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u02e6\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u0751\26\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u030a\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0180\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\25\136"+ "\1\u0152\2\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0752\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\67\0\1\u0753\137\0\1\u0754\63\0\1\u0755\45\0"+ "\1\u0755\66\0\1\u0756\202\0\1\u050c\12\0\1\u0313\56\0"+ "\2\u0757\1\0\7\u050e\1\0\10\u050e\2\u0757\1\u050e\1\0"+ "\1\u0757\1\0\1\u050e\1\u0757\2\u050e\2\u0757\1\0\2\u0757"+ "\1\0\5\u0757\1\0\30\u050e\3\u0757\1\u050e\2\u0757\13\u050e"+ "\1\0\10\u050e\13\0\1\u0758\45\0\1\u0758\66\0\1\u0759"+ "\202\0\1\u0510\12\0\1\u0318\56\0\2\u075a\1\0\7\u0512"+ "\1\0\10\u0512\2\u075a\1\u0512\1\0\1\u075a\1\0\1\u0512"+ "\1\u075a\2\u0512\2\u075a\1\0\2\u075a\1\0\5\u075a\1\0"+ "\30\u0512\3\u075a\1\u0512\2\u075a\13\u0512\1\0\10\u0512\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\15\136\1\u075b\12\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\2\136\1\u075c\3\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u075d\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u075e\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\1\136\1\u075f\7\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\17\136\1\u0760\10\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\2\136\1\u0761\10\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u0762\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\5\136\1\u0763\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u0325\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u0574\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0574\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0764\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u0765\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u045a\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u0766\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u0334\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\136\1\u0767\26\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u0768\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u03a2\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0152\1\u03dd\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u06b4\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u0769\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u076a\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u076b\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\11\136\1\u076c\16\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u076d\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u076e\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u076f\6\136\1\u0770\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0771\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0"; private static final String ZZ_TRANS_PACKED_1 = "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u053c\17\136\1\u0772\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u0773\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0774\15\136\1\u0775\1\u0776"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u0777\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u049c"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u0778"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0779\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0540\17\136\1\u077a"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u077b"+ "\10\136\1\u077c\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u077d\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\u03ef\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u077e"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u077f"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u022f"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u03a2"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u0780"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u0781"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u0782"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u022f"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0783\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0784\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u0372\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0785\4\136\1\u0786"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0772"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u0787"+ "\1\136\1\u0788\2\136\1\u0789\1\136\1\u057e\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u078a\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u078b\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u078c\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0782\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u078d\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\26\136\1\u078e\1\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u078f\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0790\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u0791\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0742\13\136\1\u0792\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0793\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0794\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u0795\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u0796\2\136\1\u0797\1\u0798\1\136\1\u0799"+ "\1\u079a\1\u079b\1\u079c\1\u079d\3\136\1\u079e\1\136\1\u079f"+ "\1\u07a0\1\u07a1\1\136\1\u07a2\2\136\1\u07a3\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u07a4\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u07a5\13\136\1\u07a6\5\136"+ "\1\u07a7\3\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u07a8\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u07a9"+ "\3\136\1\u0538\16\136\1\u01b3\4\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u07aa\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u07ab\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u07ac\6\136\1\u06f1\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u07ad\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u07ae\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u07af\4\136\1\u07b0\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u07b1\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u07b2\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u07b3\1\136\1\u07b4"+ "\1\136\1\u07b5\5\136\1\u07b6\15\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u07b7\1\u07b8\1\136\1\u07b9\11\136"+ "\1\u07ba\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u07bb\13\136\1\u07bc\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u07bd\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\11\136\1\u03ef\16\136\1\127\2\0\1\136\2\0"+ "\1\u07be\12\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0471\1\u07bf\6\136\1\u07c0\15\136"+ "\1\127\2\0\1\136\2\0\1\u0334\12\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u07c1"+ "\1\136\1\u0543\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0471\1\136\1\u07c2\16\136\1\u07c3\4\136\1\127"+ "\2\0\1\u07c4\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u07c5\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u07c6\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u07c7\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u07c8\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u07c9\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u07ca\1\u07cb\1\136\1\u07cc\1\136\1\u05a7\1\u07cd"+ "\1\u07ce\1\u07cf\1\u07d0\1\u07d1\3\136\1\u07d2\1\136\1\u0540"+ "\1\u07d3\1\u07d4\1\136\1\u0483\3\136\1\127\2\0\1\u07d5"+ "\2\0\13\136\1\0\4\136\1\u07d6\3\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u0471\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u07d7\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\5\136\1\u07d8\22\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u07d9\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\1\u01d7\12\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u0334\21\136\1\127\2\0"+ "\1\136\2\0\1\u07da\12\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u05aa\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u07db\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\24\136\1\u07dc\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u07dd\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u07de\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u0357\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\136\1\u07df\26\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u07e0\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\22\136\1\u07e1\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u06d4\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u03ef\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u07e2\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u07e3\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u07e4\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u022f\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u07e5\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u07e6\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u07e7\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u049c\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u07e8\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\136\1\u07e9\3\136\1\u0338"+ "\1\136\1\u07ea\12\136\1\u0388\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\u07eb\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u07ec\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u07ed\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u07ee\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u07ef\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u07f0\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\26\136\1\u07f1\1\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u07f2\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u07f3\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u07f4\2\136\1\u045a\10\136\1\u0361\1\u01d4\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\22\136\1\u07d2\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u0195\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\11\136\1\u07f5\16\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\1\u07f6\7\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0612\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u032d\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u07f7\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u07f8\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u07f9\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u07fa\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u07fb\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u059e\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u07fc\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u07fd\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u07fe\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\5\136\1\u0152\22\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u07ff\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\1\u016d\12\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0800\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\12\136\1\u0180\15\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\23\136\1\u0152\4\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u0801\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u0802\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u06a9\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u0803\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u0543\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0792"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\6\136\1\u022f\1\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u0804"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u0805\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0806\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0807\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136"+ "\1\u0808\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u0809\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u080a\1\u0558\1\u05f2\3\136\1\u056e\1\136\1\u080b\1\u080c"+ "\6\136\1\u080d\1\u056e\2\136\1\u056e\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u080e\10\136\1\u080f\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u0579\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u0810\1\136"+ "\1\u0811\1\u0812\1\u0813\1\u0814\1\u0815\1\u0816\1\u0817\4\136"+ "\1\u0818\2\136\1\u0819\1\u06b9\1\136\1\u081a\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\1\u081b\7\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u081c\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u051f\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u081d\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\12\136\1\u081e\15\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u081f\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\25\136\1\u0820\2\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u01c1\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u022f\10\136\1\u0821\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u0822\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u036f\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u02ff\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u0823\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u0824\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0825\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u0826\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0827\3\136"+ "\1\u0828\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\12\136"+ "\1\u022f\15\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\1\136\1\u022f\6\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\23\136\1\u0829\4\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\136\1\u082a\26\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u082b\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u082c\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\12\136\1\u082d\15\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u082e\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\136\1\u082f\2\136\1\u0830\3\136\1\u0831\10\136\1\u0832"+ "\1\u0833\4\136\1\u0834\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u064e\12\136\1\u0835\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u0836\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u0837\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u0242\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u0838\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u0774\4\136\1\u0839\2\136\1\u02e7\15\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u083a\7\136"+ "\1\u083b\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u083c\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u083d\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u083e\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136"+ "\1\u083f\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\5\136\1\u022f\3\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\11\136\1\u022f\16\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\12\136\1\u0840\15\136\1\127\2\0\1\u03bf\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\1\136\1\u0841\6\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u0842\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u0843\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\26\136"+ "\1\u0844\1\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u0845\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0846"+ "\1\u07d7\1\u0486\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0847\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u0848\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u0849\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u01c1\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u07f9\2\136\1\u084a\4\136\1\u084b\1\u06f2\16\136\1\127"+ "\2\0\1\136\2\0\1\u084c\12\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u084d\1\u084e"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u022f"+ "\14\136\1\u084f\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u0850\3\136\1\u06f1\4\136\1\u0851\7\136\1\u0852\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0853\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0540\6\136"+ "\1\u049c\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0471\15\136\1\u07db\6\136\1\u0854\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u0855\12\136\1\u0856\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u0857\1\136\1\u0858"+ "\1\136\1\u0540\5\136\1\u0242\3\136\1\u053b\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0859\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u0176\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u085a\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u085b\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u085c\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u085d\1\136\1\u085e\1\136\1\u085f"+ "\1\u0860\1\u0861\1\u0862\6\136\1\u0863\1\136\1\u0432\1\u0864"+ "\2\136\1\u0865\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u0866\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\23\136\1\u01b3\4\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u0867\5\136\1\u0868\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u0869\14\136\1\u086a\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u086b\16\136\1\u0838\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u086c\3\136\1\u086d"+ "\13\136\1\u086e\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u086f\16\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0870\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u03ef\3\136\1\u07bb\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\26\136\1\u0871\1\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u0872\10\136\1\u0873\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u0874\3\136\1\u07c1\13\136\1\u0875"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0876"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u07c6\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0877"+ "\11\136\1\u0878\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u0879\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u087a\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u087b\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u087c\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u087d\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u057e"+ "\1\136\1\u087e\2\136\1\u087f\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0880\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u057e\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u0881\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u0882\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u0883\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\5\136\1\u0364\22\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u0884\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u0885\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\136\1\u0886\1\136\1\u0887\2\136\1\u0888\2\136\1\u0889"+ "\10\136\1\u088a\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u088b\16\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\1\u088c\12\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136"+ "\1\u06a8\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u088d\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u088e\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136"+ "\1\u088f\3\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0890\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u03fa\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\23\136"+ "\1\u088e\4\136\1\127\2\0\1\u088e\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u0891\1\u0892\1\u0893\1\u0894\1\u0895\1\u0896\1\u0897\1\u0898"+ "\1\u0899\4\136\1\u089a\1\136\1\u089b\1\u089c\1\u089d\1\136"+ "\1\u089e\1\136\1\u089f\1\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u08a0\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u08a1\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u08a2\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u06f1\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u08a3"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u08a4"+ "\4\136\1\u08a5\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u08a6\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u08a7\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0440\1\u08a8\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u08a9\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u08aa\4\136\1\u08ab\5\136\1\u08ac\11\136"+ "\1\127\2\0\1\u0645\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u08ad\2\136\1\u08ae"+ "\1\u08af\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136"+ "\1\u08b0\22\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u08b1\11\136\1\u08b2\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u08b3\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u08b4\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u0772\5\136\1\u08b5\11\136\1\u0328\1\u08b6\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u06b4\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u08b7\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u0664\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u08b8\1\u08b9\10\136\1\u08ba"+ "\3\136\1\u08bb\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u08bc\22\136\1\u036b\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u08bd\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u08be\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u08bf\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u08c0\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u08c1\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u08c2\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u08c3\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u08c4\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u08c5\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u08c6\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u08c7\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u08c8\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u08c9\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u036b\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u08ca\6\136\1\u08cb"+ "\1\u08cc\10\136\1\u08cd\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u08ce\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\1\u08cf\12\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\u08d0\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u08d1"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u08d2"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u08d3\1\u08d4"+ "\1\u08d5\1\u08d6\1\u08d7\1\u08d8\1\u08d9\1\u08da\1\u08db\1\u08dc"+ "\4\136\1\u08dd\1\136\1\u08de\1\u08df\1\u06b9\1\136\1\u08e0"+ "\2\136\1\u08e1\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u08e2\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u08e3\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u08e4\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u08e5\3\136\1\u08e6\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u08e7\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u08e8\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u07bf\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u08e9\12\136\1\u08ea\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u08eb\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u08ec\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u08ed\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\12\136\1\u08ee\15\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u08ef\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u08f0\3\136\1\u01a3\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u08f1\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u08f2\16\136\1\u08f3"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u08f4"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u08f5"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u03a9"+ "\1\136\1\u08f6\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u08f7\20\136\1\u08b6\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u08f8\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u08f9\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\27\136\1\u08fa\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u03b3\1\136\1\u022f\1\u08fb\5\136\1\u08fc\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u08fd\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u08fe\13\136"+ "\1\u08ff\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u0900\11\136\1\u0901\5\136\1\u022f\1\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\12\136\1\u0349\15\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u0902\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0903\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0904\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0335\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u0905\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\5\136\1\u0906\22\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u0907\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u0908\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u0909\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u090a\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u090b\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0426\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u090c\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u090d\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u090e\1\136\1\u090f\1\u0910\1\u0911\1\136\1\u0912\1\136"+ "\1\u0913\4\136\1\u0914\1\136\1\u0361\1\u0915\1\u0349\4\136"+ "\1\u07da\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0916"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u0223"+ "\22\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0917"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u0615"+ "\1\u0918\11\136\1\u0388\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u0919\2\136\1\u091a\1\u066f\1\u091b\1\136\1\u091c"+ "\1\u091d\1\u091e\4\136\1\u091f\2\136\1\u0920\1\u0921\4\136"+ "\1\u0922\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u0923"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0924"+ "\13\136\1\u0925\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u0926\24\136\1\127\2\0\1\u0927\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u0928\1\u0929\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u092a\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u092b\1\136\1\u092c\1\136\1\u092d\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u092e\1\u092f"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u0930\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0931"+ "\2\136\1\u092f\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u0932\1\u0933\10\136\1\u0934\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0935\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u0936\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0937\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u0938\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u0939\3\136\1\u093a\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u093b\2\136\1\u093c\3\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u093d\23\136"+ "\1\127\2\0\1\136\2\0\12\136\1\u093e\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u093f\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u0940\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0941\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u0942\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u0943\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u0944\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u0945\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u086a\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u0946\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0947\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\25\136\1\u0948\2\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\1\136\1\u022f\6\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u056b\1\136\1\u0949\2\136\1\u094a"+ "\14\136\1\u094b\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u094c"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u094d\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u094e\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u094f\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0950\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0951\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\25\136"+ "\1\u0952\2\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136"+ "\1\u0953\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\25\136"+ "\1\u0954\2\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u0955\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u0956\26\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0957\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u074f"+ "\3\136\1\u086a\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0958\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0959\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u095a\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u03ef\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u095b\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u095c"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u095d"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u095e\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u095f\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u0960"+ "\22\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0961"+ "\1\u0484\1\136\1\u0962\2\136\1\u0963\7\136\1\u0361\1\u01d4"+ "\6\136\1\127\2\0\1\136\2\0\1\u01d7\12\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u0964\11\136\1\u0965\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u06f2\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u0966\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\136\1\u0967\26\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u0968\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u0969\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u096a\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u08c1\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u03ef\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\136\1\u096b\26\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u096c\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u096d"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136"+ "\1\u096e\22\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u096f\17\136\1\u0970\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u0971\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0972\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\24\136\1\u0973\3\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u0974\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u0975\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u03ef\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0976\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\u0977\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0978\3\136"+ "\1\u05bd\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0979\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u08bc\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u097a\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u097b\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136"+ "\1\u097c\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u097d\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u097e\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u056e"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u097f\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u05f2\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0980\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u0384\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u06c2\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136"+ "\1\u0981\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u0982\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u0983\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u0984\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u0985\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0986\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u0987\1\136\1\u0988\4\136\1\u0989\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u098a\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\12\136\1\u098b\15\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u098c\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\23\136\1\u098d\4\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u098e\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0349\6\136\1\u098f\16\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u0990\16\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u0991\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u0992\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u0993\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\24\136\1\u0372\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u0994\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0995\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0996\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u0997\12\136\1\u0998"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0999\5\136"+ "\1\u099a\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u099b"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u099c\1\136\1\u099d\4\136\1\u099e\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u099f\2\136\1\u09a0\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u09a1\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u09a2\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u09a3\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u09a4\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u06b6\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u015f\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u09a5\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u09a6\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u09a7\15\136\1\u09a8\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u09a9\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u080e\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\22\136\1\u09aa\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u09ab\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u09ac\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u09ad\1\136\1\u07bf\4\136"+ "\1\u09ae\7\136\1\u09af\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\12\136\1\u06a8\15\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u09b0\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u09b1\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u057d\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\2\136\1\u09b2\5\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\27\136\1\u022f\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u0364\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\1\u09b3\12\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u053b\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\26\136\1\u022f\1\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u0334\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u09b4\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\1\127\1\u09b5"+ "\4\127\1\0\2\127\1\u09b5\1\127\4\u09b5\1\127\1\0"+ "\1\127\1\0\3\127\1\0\1\127\1\u09b5\14\0\4\127"+ "\3\u09b5\5\127\2\u09b5\3\127\2\u09b5\4\127\1\u09b5\1\127"+ "\2\0\1\127\2\0\10\127\1\u09b5\2\127\1\0\1\127"+ "\3\u09b5\1\127\3\u09b5\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u09b6\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u09b7\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\u09b8\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u09b9\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u09ba\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\12\136\1\u09bb\15\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u09bc\2\136"+ "\1\u09bd\3\136\1\u09be\1\u09bf\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u09c0\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u09c1\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\1\u09c2"+ "\12\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u09c3\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u09c4\16\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u0484\1\u09c5\13\136\1\u0361\1\u01d4\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u09c6\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u09c7\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u09c8\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u09c9\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u09ca\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u081d\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u09cb\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u09cc"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u09cd"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u09ce\3\136\1\u09cf\22\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\4\136\1\u09d0\3\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\23\136\1\u09d1\4\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u09d2\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\20\0\1\u09d3\60\0"+ "\1\u09d3\117\0\1\u09d4\136\0\1\u071a\142\0\1\u09d5\133\0"+ "\1\u09d6\165\0\1\u09d7\112\0\1\u09d8\145\0\1\u0718\103\0"+ "\1\u09d9\163\0\1\u09da\164\0\1\u071c\114\0\1\u09db\136\0"+ "\1\u071c\142\0\1\u09dc\106\0\1\u09dd\207\0\1\u09db\135\0"+ "\1\u09de\116\0\1\u09df\157\0\1\u09e0\52\0\4\357\1\u09e1"+ "\1\357\1\0\10\357\2\0\1\357\5\0\2\357\14\0"+ "\11\357\1\u09e1\16\357\3\0\1\357\2\0\13\357\1\0"+ "\10\357\11\0\6\357\1\0\2\357\1\u09e2\5\357\2\0"+ "\1\357\5\0\2\357\14\0\4\357\1\u09e2\23\357\3\0"+ "\1\357\2\0\13\357\1\0\10\357\10\0\1\u04bb\127\0"+ "\2\64\1\0\1\64\1\0\2\64\2\0\1\111\5\64"+ "\1\0\26\64\1\0\17\64\1\111\24\64\1\0\26\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\26\64"+ "\1\0\27\64\1\u09e3\14\64\1\0\1\64\1\u09e3\24\64"+ "\1\0\1\64\1\0\2\64\2\0\6\64\1\0\26\64"+ "\1\0\25\64\2\u02b8\15\64\1\0\26\64\1\0\1\64"+ "\1\0\2\64\2\0\6\64\1\0\2\64\1\u09e4\23\64"+ "\1\0\13\64\1\u09e4\30\64\1\0\26\64\1\0\1\64"+ "\1\0\2\64\2\0\5\64\1\u09e5\1\0\26\64\1\0"+ "\11\64\1\u09e5\32\64\1\0\26\64\1\0\1\64\1\0"+ "\2\64\2\0\2\64\1\u09e6\3\64\1\0\26\64\1\0"+ "\12\64\1\u09e6\31\64\1\0\26\64\1\0\1\64\1\0"+ "\2\64\2\0\1\u09e7\5\64\1\0\26\64\1\0\17\64"+ "\1\u09e7\24\64\1\0\26\64\1\0\1\64\1\0\2\64"+ "\2\0\6\64\1\0\26\64\1\0\44\64\1\0\5\64"+ "\1\u09e8\6\64\1\u09e8\11\64\1\0\1\64\1\0\2\64"+ "\2\0\6\64\1\0\26\64\1\0\27\64\1\u0729\14\64"+ "\1\0\1\64\1\u0729\24\64\1\0\1\64\1\0\2\64"+ "\2\0\6\64\1\0\1\64\1\u0727\24\64\1\0\16\64"+ "\1\u0727\25\64\1\0\26\64\1\0\1\64\1\0\2\64"+ "\2\0\6\64\1\0\2\64\1\u09e9\23\64\1\0\13\64"+ "\1\u09e9\30\64\1\0\26\64\1\0\1\64\1\0\2\64"+ "\2\0\3\64\1\u012f\2\64\1\0\26\64\1\0\7\64"+ "\1\u012f\34\64\1\0\26\64\1\0\1\64\1\0\2\64"+ "\2\0\2\64\1\u09ea\3\64\1\0\26\64\1\0\12\64"+ "\1\u09ea\31\64\1\0\26\64\1\0\1\64\1\0\2\64"+ "\2\0\1\u04d8\5\64\1\0\26\64\1\0\17\64\1\u04d8"+ "\24\64\1\0\26\64\1\0\1\64\1\0\2\64\2\0"+ "\6\64\1\0\1\u02b7\25\64\1\0\32\64\1\u02b7\11\64"+ "\1\0\26\64\1\0\1\64\1\0\2\64\2\0\1\u0727"+ "\5\64\1\0\26\64\1\0\17\64\1\u0727\24\64\1\0"+ "\26\64\1\0\1\64\1\0\2\64\2\0\6\64\1\0"+ "\26\64\1\0\33\64\1\u09eb\10\64\1\0\2\64\1\u09eb"+ "\23\64\1\0\1\64\1\0\2\64\2\0\1\64\1\u09ec"+ "\4\64\1\0\26\64\1\0\30\64\1\u09ec\13\64\1\0"+ "\26\64\1\0\1\64\1\0\2\64\2\0\6\64\1\0"+ "\2\64\1\u0296\23\64\1\0\13\64\1\u0296\30\64\1\0"+ "\24\64\14\0\1\u09ed\41\0\1\u09ed\61\0\1\127\10\0"+ "\1\127\1\u09ee\4\127\1\0\2\127\1\u09ee\1\127\4\u09ee"+ "\1\127\1\0\1\127\1\0\3\127\1\0\1\127\1\u09ee"+ "\14\0\4\127\3\u09ee\5\127\2\u09ee\3\127\2\u09ee\4\127"+ "\1\u09ee\1\127\2\0\1\127\2\0\10\127\1\u09ee\2\127"+ "\1\0\1\127\3\u09ee\1\127\3\u09ee\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u0393\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\5\136\1\u09ef\22\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u09f0\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u09f1\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u09f2\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u05a5\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u02e1\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u09f3\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u05a3\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u09f4\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u0152\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u09f5\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u09f6\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\3\136\1\u086a\2\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\14\136\1\u09f7\13\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\136\1\u02e6\26\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u09f8\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u03c6\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\136\1\u02f3\26\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u09f9\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\14\0\1\u09fa\41\0\1\u09fa"+ "\71\0\1\u050e\143\0\1\u09fb\41\0\1\u09fb\71\0\1\u0512"+ "\127\0\1\127\10\0\1\u09fc\5\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u09fd\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u09fe\2\136"+ "\1\u09ff\1\136\1\u0a00\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u0774\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\2\136"+ "\1\u075c\6\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\1\136\1\u0a01\4\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\2\136"+ "\1\u0a02\6\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u0a03\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\7\136\1\u0a04"+ "\3\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0924\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0a05\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u0a06\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u0a07\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\25\136\1\u0a08\2\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u07db\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0a09\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0a0a\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u0a0b\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0a0c\2\136\1\u02d9\22\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u0a0d\1\136\1\u0a0e\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u0372\6\136\1\u03b5"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u03a9"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0a0f"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u0a10"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0a11\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0a12\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0a13\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u02e9\14\136"+ "\1\u0a14\3\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\4\136\1\u08d2"+ "\3\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u0a15\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u0a16"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0a17\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u02e9\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0a18\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\22\136\1\u0a19\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u0a1a\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\11\136\1\u0a1b\16\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u080a\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\24\136\1\u0684\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u0a19\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u0a1c\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\24\136\1\u0a1d\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u0a1e\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0a1f\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0a20\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u0a21\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\5\136\1\u0a22\10\136\1\u0a23"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u0a24"+ "\4\136\1\u0a25\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0a26\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u0a27\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u0a28"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0a29"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u0a2a\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0a2b"+ "\1\u0a2c\1\u0a2d\1\u0a2e\1\u0a2f\1\u0a30\1\u0a31\1\u0a32\1\u0a33"+ "\1\u0a34\7\136\1\u0a35\1\u0a36\5\136\1\127\2\0\1\u0a37"+ "\2\0\1\u08cf\12\136\1\0\1\136\1\u063b\2\136\1\u0a38"+ "\3\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u0a39"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u0a3a\1\u0a3b\1\u0a3c\1\u0a3d\1\u0a3e\1\u0a3f\1\u0a40\1\u0a41"+ "\1\u0a11\1\u0a42\3\136\1\u0a43\1\136\1\u0361\1\u0a44\1\u0a45"+ "\1\136\1\u0a46\2\136\1\u0a47\1\127\2\0\1\136\2\0"+ "\13\136\1\0\1\u0a48\6\136\1\u0a49\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u0372\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0a4a\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u0a4b\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0498\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u0a4c\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0a4d\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u0a4e\20\136\1\127\2\0\1\u0a4f"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0a50\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u0a51\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0a52\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u0a53\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0a54\1\136\1\u0a55\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u0a56\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\27\136\1\u0a57\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u0a58\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\5\136\1\u0a59\1\136\1\u0a5a\10\136"+ "\1\u0a5b\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0a5c\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0a5d\1\136\1\u0a5e\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u0a5f\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\11\136\1\u0a60\16\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0a61\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u0a62\1\136\1\u0792\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u0a63\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u0a64\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\24\136\1\u0a65\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u0a66\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u0a67\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0a68\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u0a69\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u0a6a\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u06d4\1\136\1\u0a6b\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u0a6c\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u0a6d\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\27\136\1\u0a6e\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\12\136\1\u0372\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u0575\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0a6f\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u0a70\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u0a71\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0a72\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0a73\16\136\1\u0a74\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u0a75\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u0a76\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u0a77\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\24\136\1\u0a78\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u0871\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u022f\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u0a79\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u0a7a\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0a7b\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u0522\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u080a\1\u0522\7\136\1\u0522\16\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u0540\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u0a7c\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\5\136\1\u0a7d\22\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\22\136\1\u0a7a\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\5\136\1\u0349\22\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\5\136\1\u056e\22\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u0a7e\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u0a7f\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u0a80\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u0334\3\136\1\u0334"+ "\4\136\1\u07db\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0a81\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u06ed"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u03bb"+ "\1\136\1\u0a82\1\136\1\u0a83\14\136\1\u0a84\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\1\u0a85\7\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0a86\1\u0a87"+ "\13\136\1\u0a88\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u0a89\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u03fa\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u0a8a\10\136\1\u0582\3\136\1\u053b\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u0a8b\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u0540\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u0a8c\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u0576\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u0357\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u080e\10\136\1\u022f\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0384\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u022f\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\11\136\1\u0a8d\16\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u0a8e\1\u0a8f\1\136\1\u0a90"+ "\1\u0a91\1\136\1\u0a92\1\u0a93\1\u0a94\1\u0a95\7\136\1\u0a96"+ "\1\u0a97\5\136\1\127\2\0\1\136\2\0\1\u0a98\12\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u0a99\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0a9a\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u0582\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u0a9b\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u0a9c\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u0a9d"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u0a9e\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0a9f\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0aa0\14\136\1\u08b6\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\1\u062e\7\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u0a7a\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0aa1\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\12\136"+ "\1\u0373\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u0aa2\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u0aa3\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0aa4\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u0aa5\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u0aa6\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0aa7\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0aa8\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0aa9\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u0aaa\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u0a27\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u0aab\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u0aac\2\136\1\u0aad\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u0aae\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u086a\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u0aaf\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u056b"+ "\20\136\1\u05aa\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u06b5\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u07f9"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u0ab0\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0ab1\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0ab2"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0ab3"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u03b1"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u0ab4"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u0ab5"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0ab6\1\136"+ "\1\u0ab7\1\u0ab8\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u0ab9\11\136\1\u02e1\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u0aba\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\136\1\u0abb\14\136\1\u0abc\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u0abd\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u083d\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u0abe\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\136\1\u0abf\2\136\1\u06b6\4\136\1\u0ac0\16\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u05aa\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u07b3\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0ac1\1\u07b8\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\1\u07be\12\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u06f1\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0ac2\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u036b\1\136\1\u0ac3\15\136"+ "\1\u01bb\3\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\u0645\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u057e\7\136"+ "\1\u0ac4\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u0ac5\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u0ac6\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0ac7"+ "\3\136\1\u0ac8\3\136\1\u0ac9\12\136\1\u0aca\4\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u03ef\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u0821\21\136\1\127"+ "\2\0\1\136\2\0\1\u0334\12\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u045a\17\136"+ "\1\u0acb\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u03b3"+ "\2\136\1\u0acc\5\136\1\u0408\1\136\1\u0a64\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\22\136\1\u0acd\2\136\1\u01bb"+ "\2\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u069a\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\22\136\1\u0ace\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\12\136\1\u0521\15\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u0acf\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0242\1\136"+ "\1\u0ad0\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\26\136"+ "\1\u015f\1\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u0361\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u01c1\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u0ad1\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0ad2"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u0ad3"+ "\26\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u057e"+ "\6\136\1\u057e\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\27\136\1\u0ad4\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136"+ "\1\u0541\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u0ad5\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u0ad6"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0ad7"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\1\136\1\u0ad8\6\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0ad9"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u0ada"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0adb"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u0659"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0adc"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0add"+ "\2\136\1\u0ade\1\u0adf\10\136\1\u0ae0\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u0ae1\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u0ae2\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u0ae3\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u0495\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u05ce\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u0ae4\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u0ae5\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u0839\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u07d5\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u0ae6\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u0ae7\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u0ae8\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0ae9\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u0aea\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u053b\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u0aeb\16\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0471\1\136\1\u0aec\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u0aed\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u0aee\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\136\1\u0aef\1\u0af0\1\u0af1\1\u0af2\1\u0af3"+ "\1\u047e\1\u045a\1\u0af4\1\u0af5\4\136\1\u0af6\2\136\1\u0af7"+ "\1\u0af8\1\136\1\u0af9\2\136\1\u07da\1\127\2\0\1\136"+ "\2\0\13\136\1\0\7\136\1\u0afa\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u0afb\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0afc\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u0afd\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0afe\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0aff\13\136\1\u0b00\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u099e\1\u0b01"+ "\15\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0b02"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0540"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u0b03\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u083a\7\136\1\u07db\1\u0b04\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u0b05\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0471\4\136\1\u0b06\15\136\1\u022f"+ "\2\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u0851"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u07db"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\12\136\1\u0540"+ "\15\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u0b07"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u03a2"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0b08"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0857"+ "\15\136\1\u053b\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u0b09\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u049c\16\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u0b0a\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u0b0b\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136"+ "\1\u0b0c\22\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u0b0d\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0b0e"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0b0f"+ "\24\136\1\127\2\0\1\u0b10\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0b11\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0b12\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0b13\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0b14\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0a5b\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0b15\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u0b16\5\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u0b17\26\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0b18\25\136"+ "\1\127\2\0\1\136\2\0\1\u0b19\12\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0b1a"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u03ef"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0b1b"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u0b1c"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u0b1d"+ "\22\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u06ee"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0b1e"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0b1f"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0540"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u08c5"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u07d5"+ "\10\136\1\u0b20\3\136\1\u0b21\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u0b22\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\1\u049c"+ "\12\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u0b23\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u0b24\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u0b25\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u080b\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0b26\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u0b27\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0b28"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u0b29"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0b2a"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u0b2b"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u0b2c\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u0b2d\22\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u0b2e\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u022f\1\136\1\u0335"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u0b2f\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u0a0e\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0b30\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0b31\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0b32\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u0b30\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0b32\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u0b33\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u0b34\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0b35\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0349\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u0b36\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u0b37\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0b38\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0b39\1\u0b3a\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0b3b\13\136\1\u0b3c\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u0b3d\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0b3e\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u0b3f\1\u0b40"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0b41"+ "\11\136\1\u0b42\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0b43\1\136\1\u0b44\5\136\1\u0b45\6\136\1\u06ee"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u0b46\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0b47"+ "\2\136\1\u0b48\10\136\1\u0b49\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0b4a\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0b4b\5\136\1\u0b4c\4\136\1\u0b4d"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u0b4e"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0b4f"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u0b50\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0901"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0b51\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0b52\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0b53\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0b54\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u0b55\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u0357\5\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0b56\1\136"+ "\1\u0b57\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u0b58\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0b59\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u0b5a\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u0b5b\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u0b5c\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u0b5d\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136"+ "\1\u0b5e\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0b5f\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0b60\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0b61\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136"+ "\1\u0b62\22\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u0b63\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u0b64\1\0"+ "\1\u0b65\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u0b66\2\136\1\u0b67\1\u09a7\13\136\1\u0361\1\u0b68\6\136"+ "\1\127\2\0\1\136\2\0\1\u01d7\12\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0b69"+ "\4\136\1\u08d2\6\136\1\u0b6a\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0b6b\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0b6c\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u0408\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u0b6d\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u0b6e\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u0b6f\17\136\1\u038b\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u0b70\4\136\1\u0b71\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u0b72\5\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u0b73\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0b74\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0495\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u0540\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0b75"+ "\1\u022f\22\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u0b76\1\136\1\u0b77\4\136\1\u0b78\13\136\1\u0b79\3\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\1\u0b7a\7\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\u022f\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u0372\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u0b7b\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\136\1\u0b7c\1\u0b7d\13\136"+ "\1\u0b7e\1\136\1\u0361\1\u01d4\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u07db\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u0b7f\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u0b80\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u0b81\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\25\136\1\u0b82\2\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\12\136\1\u0b83\15\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u0b84\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u0b85\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0b86\3\136\1\u0b87\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\12\136\1\u0b88\15\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0b89\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\27\136\1\u06f0\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u0b8a\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u0b8b\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u06a9\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u0b8c\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0b8d\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u0b39\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0b8e\13\136\1\u0b3c\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u0b8f\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u0b90\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0b91\1\u0b92\16\136\1\u0b93\5\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0b94\17\136\1\u0b95"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0b96"+ "\1\136\1\u0b97\1\136\1\u0b98\3\136\1\u0b99\6\136\1\u06ee"+ "\3\136\1\u08dd\2\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u0b9a\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0b9b\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u0b9c\16\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u0b9d\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u0b9e\6\136\1\u0b9f\10\136\1\u0ba0\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u0ba1\11\136\1\u0ba2\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0ba3\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0ba4\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u0ba5\23\136\1\u0ba6"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0ba7\15\136"+ "\1\u0ba8\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u0ba9\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136"+ "\1\u0baa\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u0bab\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\26\136"+ "\1\u0bac\1\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0bad\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\12\136"+ "\1\u0bae\15\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u0baf\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0bb0\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136"+ "\1\u0bb1\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0bb2\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u0bb3\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u0349\2\136"+ "\1\u0bb4\10\136\1\u0bb5\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u0bb6\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u0bb7\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u0417\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0bb8\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u0bb9\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0bba\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u0bbb\16\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\1\u0945\12\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0bbc\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\4\136\1\u0bbd"+ "\3\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0bbe"+ "\5\136\1\u0bbf\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u0bc0\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u0bc1\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u0bc2\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u0bc3\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u0522\16\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u0bc4\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u0bc5"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u0bc6\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u098d\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u0764\4\136\1\u0bc7\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u057d\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u0bc8\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\11\136\1\u09ef\16\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u0bc9\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u0bca\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u0bcb"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u05f2\13\136\1\u057d\7\136\1\u0844\1\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0bcc\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0bcd\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u0bce\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0bcf\24\136\1\127\2\0"+ "\1\u0645\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0bd0\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u0bd1\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u0a1e\1\u092f\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u0bd2\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u03b3\10\136\1\u0bd3\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u0bd4\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u07db\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u0bd5\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u0bd6\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0924\13\136\1\u0bce"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0bd7\2\136"+ "\1\u0bd8\1\u0bd9\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u0bda\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0bdb\1\136\1\u0bdc\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u0bdd\12\136\1\u08b6\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u0bde\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0bdf\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u0932\1\u03b3\10\136"+ "\1\u0be0\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0be1\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0be2"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0be3"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u0be4"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u0386"+ "\20\136\1\127\2\0\1\136\2\0\1\u0387\12\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u07d5\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0be5\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0be6\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0be7\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u0be8\4\136\1\u0be9\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u0bea\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u0beb\1\u0bec\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\26\136\1\u0bed\1\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u038b\4\136\1\u0bee\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u0bef\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\24\136\1\u0bf0\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\1\u0bf1\12\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u0bf2\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u0bf3\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u0bf4\14\136\1\u0bf5\3\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u0bf6\22\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u0bf7\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0bf8\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\136\1\u0bf9\1\u0bfa\1\u0bfb"+ "\1\u0bfc\1\u0bfd\1\u0bfe\1\u0bff\1\u0c00\1\u0c01\4\136\1\u0c02"+ "\2\136\1\u0c03\1\u0c04\4\136\1\u0c05\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u0c06\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u06f2\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u0c07\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\11\136\1\u0c08\16\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u0c09\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\12\136\1\u0c0a\15\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u0c0b\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u0c0c\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u0c0d\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u0328\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0c0e\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u0c0f\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u0c10\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u0b0a\1\u0c11\2\136\1\u0c12\3\136\1\u0c13\10\136\1\u0c14"+ "\2\136\1\u0c15\1\136\1\u0567\1\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0c16\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u0c17\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u0c18\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u0c19\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u0c1a\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u0c1b\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0c1c\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u0c1d\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u0c1e\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\25\136\1\u0c1f\2\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u0615\12\136\1\u0388\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u080a\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u05aa\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u0c20\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u0c21\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u03b2\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u049c\17\136\1\u0ac4\1\136\1\u0c22"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u0c23"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0c24"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u0c25\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u086a\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u0c26\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0c27\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0b0a\1\136\1\u0c28"+ "\1\u0c29\2\136\1\u0c2a\1\u0c2b\1\u0c2c\5\136\1\u08dd\2\136"+ "\1\u0c2d\1\u0c2e\3\136\1\u0c2f\1\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u0c30\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u0c31\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\5\136\1\u0338\10\136\1\u05aa\3\136\1\u0c32\1\136"+ "\1\u0c33\3\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0c34\2\136\1\u0c35\22\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u0c36\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u03a0\15\136\1\u0c37\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u0c38\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u03a9\1\136\1\u03aa\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0c39\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u0c3a\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0c3b\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0c3c\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0c3d\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u0c3e\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u02e6\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u0c3f\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\136\1\u0c40\26\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u0c41\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u035f\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u0c42\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0c43\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\12\136\1\u0c44\15\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u081f\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0c45\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0c46\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u0c47\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u0c48\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u0c49\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u0c4a\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u0c4b\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\u0c4c\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0c4d\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u0c4e\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u0c4f\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u036f"+ "\5\136\1\u0a21\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u0c50\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u0c51\14\136\1\u0c52\2\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u0c53\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"; private static final String ZZ_TRANS_PACKED_2 = "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0c54\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\12\136\1\u0c55\15\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\22\136\1\u0c56\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\23\136\1\u0c57\4\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u0c58\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u0c59\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u0880\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0c5a\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0c5b\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u0c5c\1\136\1\u0c5d\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u0c5e\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u0c5f\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u0c60\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u0c61\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u052b\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0c62"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0c63"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0c64\1\136"+ "\1\u0c65\1\u0c66\1\u0c67\1\u0c68\1\u0c69\1\u0c6a\1\u0c6b\1\u0820"+ "\4\136\1\u0c6c\1\136\1\u0361\1\u0c6d\1\u0c6e\5\136\1\127"+ "\2\0\1\136\2\0\1\u0c6f\12\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\23\136\1\u0c70\4\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u0c71\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u0c72\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u01a9\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\136\1\u0c73\26\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0c74\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u0c75\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u0c76\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u0c77\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\27\136\1\u0c78\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0c79\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u0c7a\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u069a\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0c7b\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0c7c\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0c7d\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0c7e\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u0c7f\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0c80\16\136\1\u0c75\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0c81\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0c82\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\u0c83"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u06f0\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u0c84\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u0c85\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0c86\1\u0764\5\136\1\u09ae\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0c87\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u0c88\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u0c89\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0c8a\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u0c8b\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\3\136\1\u051c\4\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\24\136\1\u01d5\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u084d\5\136\1\u0349\1\136"+ "\1\u0540\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\1\127\1\u0c8c\4\127\1\0\2\127"+ "\1\u0c8c\1\127\4\u0c8c\1\127\1\0\1\127\1\0\3\127"+ "\1\0\1\127\1\u0c8c\14\0\4\127\3\u0c8c\5\127\2\u0c8c"+ "\3\127\2\u0c8c\4\127\1\u0c8c\1\127\2\0\1\127\2\0"+ "\10\127\1\u0c8c\2\127\1\0\1\127\3\u0c8c\1\127\3\u0c8c"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u0792\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u0c8d\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u0c8e\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\136\1\u0c13\2\136\1\u0c8f\1\u0c90"+ "\2\136\1\u0c91\1\u0c92\7\136\1\u0c93\5\136\1\u0c94\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u081f\11\136\1\u0c95"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u0c96\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0c97\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0c98\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0c99\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0c9a\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u0c9b\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0c9c\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0c9d\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0c9e\1\136"+ "\1\u0c9f\1\u0ca0\10\136\1\u0ca1\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u0ca2\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u0ca3\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u08cb\16\136\1\u0567\1\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\136\1\u0ca4\26\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u0ca5\1\136\1\u0ca6\3\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0c90\1\136"+ "\1\u0a05\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u0521\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u0ca7\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u051d\2\136\1\u0ca8\12\136\1\u051e\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u0631\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0ca9\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0caa\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u0cab\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0cac\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u0cad\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0cae\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\21\0\1\u0caf\43\0"+ "\1\u0caf\140\0\1\u0cb0\147\0\1\u0cb1\123\0\1\u04af\142\0"+ "\1\u0cb2\153\0\1\u071c\124\0\1\u071c\155\0\1\u0cb3\64\0"+ "\1\u0cb4\167\0\1\u071c\143\0\1\u0cb5\10\0\1\u0cb6\1\u0cb7"+ "\143\0\1\u0cb2\114\0\1\u0cb2\140\0\1\u0cb8\67\0\5\357"+ "\1\u0cb9\1\0\10\357\2\0\1\357\5\0\2\357\14\0"+ "\2\357\1\u0cb9\25\357\3\0\1\357\2\0\13\357\1\0"+ "\10\357\2\64\1\0\1\64\1\0\2\64\2\0\6\64"+ "\1\0\12\64\1\u0293\13\64\1\0\22\64\1\u0293\21\64"+ "\1\0\26\64\1\0\1\64\1\0\2\64\2\0\6\64"+ "\1\0\20\64\1\111\5\64\1\0\42\64\1\111\1\64"+ "\1\0\26\64\1\0\1\64\1\0\2\64\2\0\6\64"+ "\1\0\2\64\1\u0cba\23\64\1\0\13\64\1\u0cba\30\64"+ "\1\0\26\64\1\0\1\64\1\0\2\64\2\0\6\64"+ "\1\0\2\64\1\u02bc\23\64\1\0\13\64\1\u02bc\30\64"+ "\1\0\26\64\1\0\1\64\1\0\2\64\2\0\6\64"+ "\1\0\26\64\1\0\27\64\1\377\14\64\1\0\1\64"+ "\1\377\24\64\1\0\1\64\1\0\2\64\2\0\6\64"+ "\1\0\12\64\1\u0cbb\13\64\1\0\22\64\1\u0cbb\21\64"+ "\1\0\26\64\1\0\1\64\1\0\2\64\2\0\6\64"+ "\1\0\26\64\1\0\33\64\1\u0cbc\10\64\1\0\2\64"+ "\1\u0cbc\23\64\1\0\1\64\1\0\2\64\2\0\3\64"+ "\1\u0139\2\64\1\0\26\64\1\0\7\64\1\u0139\34\64"+ "\1\0\26\64\1\0\1\64\1\0\2\64\2\0\6\64"+ "\1\0\2\64\1\u0727\23\64\1\0\13\64\1\u0727\30\64"+ "\1\0\26\64\1\0\1\64\1\0\2\64\2\0\6\64"+ "\1\0\26\64\1\0\27\64\1\u02c0\14\64\1\0\1\64"+ "\1\u02c0\22\64\15\0\1\u0cbd\51\0\1\u0cbd\50\0\1\127"+ "\10\0\1\127\1\136\4\127\1\0\2\127\1\136\1\127"+ "\4\136\1\127\1\0\1\127\1\0\3\127\1\0\1\127"+ "\1\136\14\0\4\127\3\136\5\127\2\136\3\127\2\136"+ "\4\127\1\136\1\127\2\0\1\127\2\0\10\127\1\136"+ "\2\127\1\0\1\127\3\136\1\127\3\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u0cbe\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u02e3\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0cbf\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0cc0\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u0cc1\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u03c6\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u0cc2\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u0cc3\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u0770\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u02e6\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u04f7\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\15\0\1\u0cc4\51\0\1\u0cc4"+ "\65\0\1\u0cc5\51\0\1\u0cc5\50\0\1\127\10\0\1\u075c"+ "\5\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u0152\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\23\136\1\u0cc6\4\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u07ad\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u0cc7\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\5\136\1\u0cc8\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\1\u0cc9\5\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0cca\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\1\136\1\u0ccb\11\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0926\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\4\136\1\u0334\3\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u0ccc\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u080a\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u0ccd\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u0cce\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u0ccf\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0cd0\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u022f\12\136\1\u0a19\5\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0cd1\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0440\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u0cd2\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0772\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\11\136\1\u0cd3\16\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u0cd4\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0cd5\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u0a19\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\27\136\1\u0364\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u0cd6\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0cd7\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u0a16\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u0783\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u0cd8\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0cd9\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\27\136\1\u0cda\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u038b\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0cdb\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u0cdc\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0871\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u0cdd\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u0cde\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0585\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0cdf\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u0ce0"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u0ce1\12\136\1\u0ce2\1\u0ce3\4\136\1\u0ce4"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0ce5\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u0ce6\6\136"+ "\1\u0ce7\13\136\1\u0ce8\3\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\5\136\1\u0440\22\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u0ce9\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u0cea\5\136\1\u0ceb\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u01c1\5\136\1\u0cec\13\136\1\u0ced"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0cee"+ "\1\u0cef\17\136\1\u0cc6\4\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0cf0\13\136\1\u0b3c\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u0cf1\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u0cf2\1\136\1\u0cf3\15\136\1\u0cf4"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u07bf"+ "\3\136\1\u0cf5\6\136\1\u0cf6\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u0cf7\5\136\1\u0cf8\11\136\1\u0cf9\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0cfa\1\136"+ "\1\u0cfb\1\136\1\u0cfc\14\136\1\u022f\4\136\1\127\2\0"+ "\1\u022f\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u0cfd\1\136\1\u0cfe\5\136"+ "\1\u03fa\1\136\1\u0cff\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u0d00\6\136\1\u0d01\5\136\1\u0d02\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0d03\1\136"+ "\1\u0d04\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136"+ "\1\u0582\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u07d2"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0334\1\136"+ "\1\u0d05\13\136\1\u0d06\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0d07\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u0d08\11\136\1\u0d09\15\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0d0a\1\u0d0b\22\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0d0c\24\136\1\127\2\0"+ "\1\u0d0d\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0d0e\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u0d0f\1\136\1\u0d10\16\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0d11\5\136\1\u0d12"+ "\1\136\1\u0d13\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u0d14\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0d15\1\136\1\u0d16\13\136\1\u0328\1\u0d17\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0d18\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u0d19\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0d1a\3\136\1\u0d1b\2\136"+ "\1\u0d1c\15\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0d1d\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0d1e"+ "\5\136\1\u0d1f\1\136\1\u0d20\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u0d21\5\136\1\u0d22\11\136\1\u0d23\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u0d24\16\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u069a\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u0d25\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u05aa\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u0d26\1\u0d27"+ "\1\u0d28\1\u0d29\1\u0d2a\1\u0d2b\1\136\1\u0d2c\1\u0d2d\4\136"+ "\1\u0d2e\2\136\1\u0d2f\1\u0d30\1\136\1\u0d31\2\136\1\u0d32"+ "\1\127\2\0\1\136\2\0\1\u0d33\12\136\1\0\1\u062e"+ "\7\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u0d34\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u0d35\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\1\u0d36\7\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0d37\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0d38\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0d39\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u0d3a\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u0d3b\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u0d3c\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u0d3d\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u0d3e\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u0ab2\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\4\136"+ "\1\u0d3f\3\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u0d40\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\136\1\u0d41\26\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u0d42\5\136\1\u0d43\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u0d44\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\5\136\1\u0d45\13\136\1\u0d46\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0d47\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\136\1\u0d48\26\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u0d49\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u0d4a\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0d4b\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0d4c\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\136\1\u0d4d\26\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u053b\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0d4e\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u0d4f\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u0d50\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\24\136\1\u0d51\3\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u0664\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0d52\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u0d53\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\12\136\1\u0d54\15\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u0d55\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u0d56\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\26\136\1\u0d57\1\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u0d58\16\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0d59\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u07db\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\12\136\1\u0447\15\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\25\136\1\u0d5a\2\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u0838\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u0d5b\26\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0d5c\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0d5d\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u0d5e\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u038d\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\12\136"+ "\1\u01d5\15\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u0ae4\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136"+ "\1\u0d5f\22\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u03ef"+ "\1\136\1\u081f\23\136\1\u0b58\1\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\22\136\1\u0d60\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u0d61\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\136\1\u0d62\26\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u081f\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0a49\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u0d63\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0d64\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u0d65\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0d66\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u0387\16\136\1\127\2\0\1\136"+ "\2\0\1\u0d67\12\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\24\136\1\u0d68\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0a49\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\26\136\1\u0d69\1\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u0d6a\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0d6b\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u0d6c\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0d6d\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0d6e\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0d6f\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u0d70\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u0d71\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0d72\1\136\1\u0d73\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0d74\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u0d75\10\136"+ "\1\u0d76\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0d77"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0d78"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0d79"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0d7a"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u0d7b"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u0d7c\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u0d7d\14\136"+ "\1\u057d\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136"+ "\1\u0d7e\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0d7f\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u0d80\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\u0d81\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u0d82\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u0b36\26\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u0d83\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0d84\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0d85\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u0d86\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u0d87\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u0d88\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u0d89\12\136\1\u0ae7\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0d8a\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0d8b\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0d8c\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0d8d\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0d8e\3\136"+ "\1\u0615\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u0d8f\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u0516\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u0d90\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u07db\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u0d91\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u06a7"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\1\136\1\u0d92\6\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u0d93"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0d94"+ "\3\136\1\u0d95\15\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0d96\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u0d97\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\12\136"+ "\1\u0d98\15\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0d99\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u0d9a"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0d9b\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u035f\10\136"+ "\1\u0596\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0d9c\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u0d9c"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0d9d\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0d9e\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\1\u0d9f\12\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u03ef\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u0da0\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\136\1\u0262\26\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0372\25\136\1\127\2\0\1\136"+ "\2\0\12\136\1\u0372\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0da1\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u0da2\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u0da3\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u0da4\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\22\136\1\u0388\1\136\1\u01d5\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u0582\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u0da5\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0da6\1\136\1\u0da7\1\u0da8"+ "\11\136\1\u0533\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u0da9\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0daa\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136"+ "\1\u0bf5\3\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u0dab\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u0dac"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u0dad\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0dae\2\136\1\u0daf"+ "\1\136\1\u0db0\2\136\1\u0db1\1\u0db2\7\136\1\u0db3\1\u0db4"+ "\1\136\1\u0db5\1\u0db6\1\u0db7\1\136\1\127\2\0\1\136"+ "\2\0\1\u0db8\12\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0db9\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u0dba\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0dbb\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u0dbc\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u0dbd\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u0ae7\1\u0dbe\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0dbf\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0dc0\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u0dc1\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u0dc2\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u053c\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u0dc3\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\24\136\1\u0dc4\3\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0dc5\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\24\136\1\u0dc6\3\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u0585\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u0dc7\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\12\136\1\u0dc8\15\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\12\136\1\u0dc9\15\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u0dca\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u05da\16\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u0dcb\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u0dcc\4\136\1\u0dcd\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u0dce\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u0dcf\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u0dd0\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0dd1\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\2\136\1\u0dd2\5\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0dd3\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0dd4\24\136\1\127\2\0\1\u0dd5"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u0dd6\2\136\1\u0dd7\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0dd8\1\136\1\u0dd9\1\136"+ "\1\u0dda\11\136\1\u0328\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u0ddb\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0ddc\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u03b3\10\136\1\u0ddd\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u08bc\11\136\1\u0dde\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0ddf\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\7\136\1\u0de0\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u0de1\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u0de2\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0de3\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u0de4\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\u0de5"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u0de6\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0de7\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u03e8\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u0de8\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0de9\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u083a\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u0dea\16\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u0deb\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u0dec"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\24\136\1\u0ded\3\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u0856\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0dee\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u069a\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\12\136\1\u0def\15\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u06b4\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u0df0\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\24\136\1\u0df1\3\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u0df2\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u0df3\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u0df4\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u0df5\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u0df6\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\24\136\1\u0df7\3\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\136\1\u0464\26\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0df8\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\12\136\1\u0b1d\15\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u0349\3\136\1\u022f\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u0df9\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u0ab2\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0dfa\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0dfb\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0dfc\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u0a11\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u0dfd\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\25\136\1\u0dfe\2\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u0dff\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0e00\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\136\1\u0e01\26\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\25\136\1\u0e02\2\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u0769\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u0e03\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u090f\1\u0e04\1\u0e05\1\u0624\1\136\1\u0e06"+ "\5\136\1\u0e07\2\136\1\u0e08\1\u0e09\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\1\u062e\7\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u0e0a\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u0e0b\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u0e0c\14\136\1\u0e0d"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\1\u0e0e\7\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\1\u062e\7\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u0cda\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u0e0f\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0812\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0d41\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\24\136\1\u0e10\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0e11\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0484\4\136\1\u080b\7\136"+ "\1\u0361\1\u01d4\1\u06b9\5\136\1\127\2\0\1\136\2\0"+ "\1\u01d7\12\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u0e12\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u0e13\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\26\136\1\u0e14\1\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u0522\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0e15\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u0e16\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\u0e17\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u0e18"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0357"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u0e19"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u0e1a"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0e1b"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u0e1c"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u0e1d"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0e1e\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0e1f\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0e20\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0e21\11\136"+ "\1\u0e22\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u0e23\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u0e24\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u0e25\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u0e26\1\u0e27\1\u0e28\16\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\u0e29\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0e2a\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0e2b\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u0e2c\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u0e2d\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136"+ "\1\u0e2e\22\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u0e2f\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0e30\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0e31\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u0e32\26\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u0e33\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u08a8"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u0e34"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0328"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u0e35\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u0e36\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u0372\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u0e37"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0e38\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0e39\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u0e3a\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u0e3b\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0e3c\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u0e3d\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0e3e\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u0e3f\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u0b65\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u0b66\1\136\1\u035c\1\u0e40"+ "\1\u09a7\3\136\1\u035f\7\136\1\u0361\1\u0b68\6\136\1\127"+ "\2\0\1\136\2\0\1\u01d7\12\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u03f4\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u0c83\3\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0e41\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0e42\3\136"+ "\1\u03b3\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u0e43\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u0e44\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u0880\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u0e45"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u0e46\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u0e47\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u0903\1\136\1\u0e48\22\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u0e49\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0e4a\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\23\136\1\u0e4b\4\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u0e4c\7\136\1\u0b58\1\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u0e4d\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0543\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u0e4e\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u0e4f\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u03e3\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0e50\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\11\136\1\u099e\16\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u0e51\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u0e52\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u0e53\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0e54\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0e55\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u0b5a\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0b0a"+ "\10\136\1\u0e56\7\136\1\u0e57\4\136\1\u0567\1\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u080a\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u022f\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u0e58\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0e59\7\136\1\u084d"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0e5a\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0e5b\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0e5c\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\136\1\u0e5d\26\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u0e5e\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\11\136\1\u0e5f\16\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0e60\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\22\136\1\u0e61\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u036b\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u0e62\1\u0e63\1\u0e64\1\136"+ "\1\u0e65\3\136\1\u0e66\10\136\1\u0e67\2\136\1\u0e68\1\u0e69"+ "\2\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u0e6a"+ "\2\136\1\u0812\1\u0e6b\1\u0e6c\1\136\1\u0e6d\17\136\1\127"+ "\2\0\1\136\2\0\1\u0e6e\12\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0e6f\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u0e70\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u0cdc\10\136\1\u03ef"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u0e71"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0e72"+ "\4\136\1\u0e73\6\136\1\u0e74\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0e75\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u0e76\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\22\136\1\u0e77\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u0e78\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u0e79\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0e7a\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0e7b\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\26\136\1\u0372\1\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u0e7c\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u0e7d\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\1\u022f"+ "\12\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0e7e\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u0ba2\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u0e7f\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u053b\17\136\1\u0e80\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u0e81\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\25\136\1\u0e82\2\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\26\136\1\u0e78\1\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\136\1\u0e83\26\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\136\1\u0e84\26\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0e85\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u0e86\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u0e87\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u0e88\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0390"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0e89"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u0e8a"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0e8b"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0e8c\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0e8d\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0e8e\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u0e8f\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u0e90\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0525\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0e91\14\136"+ "\1\u0e92\1\u0da0\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u0e93\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u0e94\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0335\1\u0e95\2\136\1\u0e96\1\136\1\u0e97\1\u0e98"+ "\6\136\1\u0e99\1\u0e9a\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u0e9b\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0945\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u0e9c\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u0e9d\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0c10\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\11\136\1\u0e9e\16\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u0e9f\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u0ea0\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u0ea1\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u0ea2\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\24\136\1\u0440\3\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0ea3\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u0ea4\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\27\136\1\u0ea5\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u0ea6\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\12\136"+ "\1\u0ea7\15\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\1\u07db\12\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0ea8\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0196\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u0354\26\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0ea9\22\136"+ "\1\u0eaa\1\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u0eab"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136"+ "\1\u0eac\1\136\1\u0ead\1\u0eae\1\136\1\u0eaf\3\136\1\u0eb0"+ "\2\136\1\u0eb1\1\u0eb2\1\136\1\u0eb3\1\136\1\u0567\1\u0eb4"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u0eb5\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u0eb6\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u0386\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u0eb7\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u0eb8\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\136\1\u0be8\26\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\24\136\1\u0eb9\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u0eba\14\136\1\u0ebb"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u0ebc\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u057e"+ "\2\136\1\u06b6\3\136\1\u057e\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u0ebd\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0ebe\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0ebf\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0ec0\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0ec1\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\27\136\1\u0ec2\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u0ec3\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u0ec4\1\u0ec5\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u038b\4\136\1\u0ec6\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\24\136\1\u0ec7\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\1\u0ec8\12\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u063e\5\136\1\u0bf5\3\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u0ec9\22\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u0eca\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0ecb\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u0ecc\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u0ecd\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0ece\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u0ecf\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u0ed0\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u0ed1\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0ed2\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u0ed3\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\26\136\1\u0ed4\1\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0ed5\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u0ed6\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\136\1\u0585\26\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u0ed7\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u0ed8\1\u0ed9\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u0eda\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u0edb\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u0edc\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u0edd\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\24\136\1\u069a\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u0ede\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u0edf\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0ee0\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0ee1\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u0ee2\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0ee3\13\136\1\u0bce\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u08f2\24\136"+ "\1\127\2\0\1\u0ee4\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0ee5\2\136\1\u0dd7"+ "\1\u0ee6\13\136\1\u0ee7\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u01d8\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u0ee8\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0ee9\1\136\1\u0eea\4\136\1\u0eeb\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0eec\15\136\1\u08b6\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u0bde\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0eed\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u0eee\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u0eef\10\136"+ "\1\u0ef0\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u0ef1\11\136\1\u022f\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u0ef2\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u0ef3\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u0ef4\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u0ef5\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u0ef6"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u0ef7\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\23\136"+ "\1\u093e\4\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u0ef8\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0ef9"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u049c"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u0efa"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u0efb\5\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0efc\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0efd\24\136"+ "\1\127\2\0\1\u0645\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0efe\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u03b3\10\136"+ "\1\u0eff\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u0f00"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u0f01\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0f02"+ "\1\136\1\u0f03\1\136\1\u0f04\2\136\1\u0f05\7\136\1\u0f06"+ "\1\u0f07\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u0f08\16\136\1\u0f09\1\u0f0a\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u0a06\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u0f0b\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\23\136\1\u0f0c\4\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u0f0d\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u0f0e\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0f0f\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u0f10\3\136\1\u06b6\4\136\1\u0f11\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u0f12\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u0b78\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u079e\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u0543\7\136\1\u0f13\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u0f14\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u0f15\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u0f16\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0f17\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0f18\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0f19\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0f1a\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u0a7a\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u0334\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u0f1b\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0d15\3\136\1\u0364\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0f1c\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u08bc\13\136"+ "\1\u0cf7\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u0522\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u0aee"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u0f1d\12\136\1\u0f1e\5\136\1\u07da\1\127\2\0\1\136"+ "\2\0\13\136\1\0\1\u062e\7\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u0f1f\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0f20\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0582\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u0f21\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0f22\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0dc6\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u0f23\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u0f24\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u0612\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0f25\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u0f26\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\22\136\1\u022f\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0f27\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\22\136\1\u0dbe\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\11\136\1\u0838\16\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\11\136\1\u0f28\15\136\1\u0f29"+ "\1\127\2\0\1\136\2\0\12\136\1\u0f2a\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0f2b"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u0f2c\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u0f2d\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u0f2e\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0f2f\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u0f30\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u0f31\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u0f32\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u0f33\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u08a8\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u0575\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u0c4c\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0f34\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u0f35\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u0516\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u0349\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u0f36\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u0f37\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0f38\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0f39\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u0f3a\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0f3b\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u0cf7\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u0f3c\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\12\136\1\u0f3d\15\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\1\u0f3e\7\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0f3f\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u0f40\2\136\1\u0f41\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u0c5a\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0f3f\13\136\1\u0334\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u0f42\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\136\1\u0f43\17\136\1\u0596"+ "\3\136\1\u0f44\2\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0f45\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\5\136\1\u0f46\22\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u088e\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u0f47"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u0f48\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0f49"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0f4a"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\26\136\1\u0f4b"+ "\1\136\1\127\2\0\1\u0d0d\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0f4c"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u0f4d"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0f4e\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0f4f\13\136"+ "\1\u0f50\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0f51\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u0f52\3\136\1\u03b3\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0f53\1\136\1\u0f54\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0f55\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u0f56\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u0f57\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u0f58\1\u0f59\1\u0f5a\1\u0f5b\1\u0f5c"+ "\1\u0f5d\1\u0624\1\u0f5e\1\u0f5f\1\u0f60\4\136\1\u0f61\2\136"+ "\1\u0f62\1\u0f63\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\1\u062e\7\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0f64\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0f65\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\136\1\u0f66\26\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u0f67\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u0f68\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\136\1\u0f69\26\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u0f6a\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u0f6b\1\136\1\u0f6c\1\u0850\3\136\1\u03b2\1\136"+ "\1\u0851\7\136\1\u0ac4\6\136\1\127\2\0\1\136\2\0"+ "\1\u0569\12\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\22\136\1\u0f6d\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\5\136\1\u0f6e\22\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u0f6f\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u0f70\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u0f71\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\26\136\1\u0f72\1\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0f73\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u0f74\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u0f75\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u01b8\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0f76\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u0f77\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0f78\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\u036a\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u07e0\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u0f79\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u0f7a\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u0f7b\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\1\127\1\u0f7c\4\127\1\0\2\127"+ "\1\u0f7c\1\127\4\u0f7c\1\127\1\0\1\127\1\0\3\127"+ "\1\0\1\127\1\u0f7c\14\0\4\127\3\u0f7c\5\127\2\u0f7c"+ "\3\127\2\u0f7c\4\127\1\u0f7c\1\127\2\0\1\127\2\0"+ "\10\127\1\u0f7c\2\127\1\0\1\127\3\u0f7c\1\127\3\u0f7c"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u057e"+ "\1\136\1\u0f7d\3\136\1\u045a\1\u0f7e\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u0f7f\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0efd\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0f80\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0f81\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0f82\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0e42\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u0f83\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0f84\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0f85\11\136\1\u0c95\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0f86\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0f87\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0f88\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0f89\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u0f8a\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0f8b\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u053b\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\22\136\1\u0f8c\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0f8d\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u0f8e\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0f8f\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u0f90\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0f91\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0f92\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u0f93\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0f94\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u0f95\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u0f96\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0f97\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0f98\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u0f99\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\1\u0f9a"+ "\12\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\5\136\1\u0f9b\22\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\12\136\1\u036b\15\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\22\0\1\u0f9c\37\0\1\u0f9c\135\0"+ "\1\u0f9d\140\0\1\u0cb3\140\0\1\u0f9e\137\0\1\u071c\153\0"+ "\1\u0cb6\1\u0cb7\124\0\1\u0714\136\0\1\u0f9f\144\0\1\u0fa0"+ "\127\0\1\u0fa1\57\0\2\64\1\0\1\64\1\0\2\64"+ "\2\0\6\64\1\0\20\64\1\u02b8\5\64\1\0\42\64"+ "\1\u02b8\1\64\1\0\26\64\1\0\1\64\1\0\2\64"+ "\2\0\6\64\1\0\26\64\1\0\27\64\1\u0101\14\64"+ "\1\0\1\64\1\u0101\24\64\1\0\1\64\1\0\2\64"+ "\2\0\4\64\1\u0fa2\1\64\1\0\26\64\1\0\20\64"+ "\1\u0fa2\23\64\1\0\24\64\16\0\1\u0fa3\41\0\1\u0fa3"+ "\57\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u02e6\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u0fa4\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u03c6\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u0152\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u0fa5\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u01df\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\16\0\1\u0fa6\41\0\1\u0fa6\75\0\1\u0fa7\41\0"+ "\1\u0fa7\57\0\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u0ab2\16\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u0fa8\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\3\136\1\u0fa9\2\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\4\136\1\u0faa\1\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u0fab\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\1\136\1\u075c"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0fac\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u0fad"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0fae\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0faf\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u0871\26\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u0fb0\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u0fb1\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u0fb2\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u0540\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0fb3\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\25\136\1\u0fb4\2\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0a19\1\136\1\u0a16\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u0fb5\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u0fb6\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0334\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u0fb7\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0fb8\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u0fb9\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u0fba\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u053b\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\27\136\1\u0ce4\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u0fbb\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u0fbc\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u0f94\11\136\1\u0fbd\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0fbe\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u0fbf\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u094d\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u0fc0\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0fc1\1\136\1\u094d\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0fc2\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\23\136\1\u0fc3\4\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u0fc4\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u0fc5\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\24\136\1\u0fc6\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\5\136\1\u0cf3\22\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u0fc7\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u0fc8\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u0fc9\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u0fca\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0335\24\136\1\u0fcb\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u0fcc\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u0fcd\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0fce\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u0372\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\23\136\1\u0fcf\4\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u0e74\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0fd0\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0fd1\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\26\136\1\u0fd2\1\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u0fd3\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0335\1\136\1\u0fd4\1\u0fd5"+ "\1\136\1\u0fd6\1\u0fd7\10\136\1\u0fd8\5\136\1\u0fcb\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u0fd9\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0fda\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u0fdb\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u0fdc\1\136\1\u0fdd"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u0fde"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u0fdf"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u0fe0"+ "\22\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u0fe1"+ "\11\136\1\u06b9\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0fe2\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u0fe3\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u0484\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u0fe4\1\136\1\u0361\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u0fe5\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0def\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u0fe6\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0fe7\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0fe8\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u0fe9\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u0fea\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u0feb\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u06ed\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\27\136\1\u0fec\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u0fed\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0fee\3\136\1\u0fef\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u0ff0\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u0ff1\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\24\136\1\u0ff2\3\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0ff3\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0ff4\13\136\1\u038b\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0525\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u0ff5\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\24\136\1\u0ff6\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u0ff7\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\136\1\u0ff8\26\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u0ff9\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u0ffa\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\22\136\1\u0ffb\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0ffc\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0ffd\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0ffe\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u0fff\2\136\1\u1000\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0a20\13\136\1\u1001\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1002\24\136"+ "\1\127\2\0\1\u0927\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u1003\2\136\1\u1004"+ "\1\u1005\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136"+ "\1\u08b0\14\136\1\u1006\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1007\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1008\2\136\1\u1009\12\136\1\u08b6\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u100a\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u100b\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u03b3\10\136"+ "\1\u100c\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u100d\1\u100e\22\136\1\u01a9\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u100f\11\136\1\u1010\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u1011\1\u1012\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u1013\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u1014\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u1015\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u1016\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u1017\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1018\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1019\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\22\136\1\u101a\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\26\136\1\u101b\1\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u101c\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u101d\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\22\136\1\u101e\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u101f\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1020\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1021\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1022\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u1023\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u0684\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u1024\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u1025\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1026\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u1027\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\1\u1028\12\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u0a74"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1029"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0a6e"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u102a"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u102b"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u0372"+ "\26\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u102c"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u102d"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0471"+ "\13\136\1\u057d\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u102e\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0a55\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u07a5\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136"+ "\1\u102f\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1030"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u1031"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1032"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\12\136\1\u03ef"+ "\15\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u07db"+ "\6\136\1\u1033\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136"+ "\1\u1034\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136"+ "\1\u1035\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0774\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136"+ "\1\u1036\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1037\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u1038\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1039\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136"+ "\1\u103a\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u103b"+ "\22\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u045a"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u103c\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u103d\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u103e\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u08c5\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u103f\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1040"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u1041"+ "\1\u1042\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u1043\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u1044\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u1045\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1046\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\26\136"+ "\1\u1047\1\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u1048\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1049\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u104a\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u104b\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u104c\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u104d\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u0765\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0262"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u104e"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u104f"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u1050\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1051\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u1052\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u1053\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1054\20\136\1\u022f"+ "\2\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u1055"+ "\1\136\1\u1056\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1057"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1058\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u0ae7\1\u0dbe\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\5\136\1\u1059\22\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\5\136\1\u0338\2\136\1\u075e\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u0861\12\136\1\u0ae7\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u105a\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u105b\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u0372\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u105c\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u105d\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u105e\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\22\136\1\u105f\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\12\136\1\u1060\15\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u1061\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u1062\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u1063\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\136\1\u036b\26\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u1064\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u1065\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u1066\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u03a7\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1067\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u1068\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u1069\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u106a\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u106b\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u106c\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u045a\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u07bf\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u106d"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u05f2\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u057e\3\136\1\u0813\3\136\1\u0ac4\7\136\1\u106e\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u106f\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u0b9b\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u1070\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0771\4\136\1\u1071\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u1072\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1073\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1074\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0ab2\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u1075\15\136\1\u1076"+ "\3\136\1\u1077\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u1078\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1079\1\136\1\u0384\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u107a\6\136\1\u0841\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u0582\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u107b\2\136\1\u0b7e\1\136"+ "\1\u107c\1\u107d\15\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u03a7\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u0334\11\136\1\u053b\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\12\136\1\u107e\5\136\1\u107f\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u1080\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u1081\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1082\1\136\1\u053b\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1083\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1084\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1085\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u0c33\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u062a\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u1086\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u0ea9\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u0bc7\10\136\1\u0ae7"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0f94"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u1087\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u1088\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u03a2\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u1089\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u108a\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\11\136\1\u108b\16\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u108c\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u108d\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\12\136\1\u0ab2\15\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u108e\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u108f\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1090\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u1091\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u1092\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u1093\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u061b\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u0372\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\27\136\1\u07da\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u1094\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\6\136"+ "\1\u1095\1\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u0334\7\136\1\u057d\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1096\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u1097\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1098\24\136\1\127\2\0\1\136"+ "\2\0\13\136"; private static final String ZZ_TRANS_PACKED_3 = "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u05eb\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1099\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u109a\3\136\1\u0fef\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u109b\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u109c\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\u109d\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u109e\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u063e\5\136\1\u109f\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\1\136\1\u10a0\6\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\22\136\1\u10a1\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\10\136"+ "\1\u10a2\2\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u10a3\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u06b5\15\136\1\u10a4\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u10a5\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u065d\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u10a6\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u03a9\2\136\1\u08a8\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\6\136\1\u10a7\1\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\22\136\1\u10a8\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u10a9\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\11\136\1\u0871\16\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\1\u0871\12\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\136\1\u10aa\1\136\1\u10ab\1\136"+ "\1\u10ac\2\136\1\u10ad\10\136\1\u10ae\6\136\1\127\2\0"+ "\1\136\2\0\1\u10af\12\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\11\136\1\u10a7\16\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u06f0\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u10b0\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u10b1\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u10b2\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u10b3\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u10b4\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u10b5\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u10b6\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u10b7\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u10b8\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u10b9\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u10ba\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u05f7\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\5\136\1\u0e69\16\136\1\u10bb"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u10bc\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0372\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u10bd\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u0a7c\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u0917\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\136\1\u0e27\26\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\22\136\1\u06ed\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u10be\24\136\1\127\2\0\1\u10bf"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u10c0\2\136\1\u0dd7\1\u10c1\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u10c2\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u10c3\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u0be0\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u10c4\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u10c5\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u10c6\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u10c7\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u0b98\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u10c8\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u10c9"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u10ca"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u036f"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\25\136\1\u0c2f"+ "\2\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u10cb"+ "\1\136\1\u10cc\2\136\1\u10cd\1\u10ce\1\u10cf\10\136\1\u10d0"+ "\5\136\1\u07da\1\127\2\0\1\136\2\0\1\u01d7\12\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u10d1\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\5\136\1\u10d2\21\136\1\u10d3\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u10d4\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u10d5\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u10d6\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u10d7\11\136\1\u10d8\4\136\1\u10d9\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u10da\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u10db\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u10dc\5\136\1\u10dd\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u10de\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\25\136\1\u03a9\2\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u10df\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\5\136\1\u10e0\22\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\11\136\1\u10e1\16\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\1\u10e2\12\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\12\136\1\u0e28\15\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u10e3\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u10e4\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u10e5\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u10e6\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\24\136\1\u10e7\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0522\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\12\136\1\u10e8\15\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u0373\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u10e9\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u10ea\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u10eb\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u10dc\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\1\u0c83"+ "\12\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u10ec\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u10c7\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\5\136\1\u10ed\4\136\1\u10ee\15\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u10ef\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0764\5\136\1\u0522\4\136"+ "\1\u10f0\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u10f1\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u10f2\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u10f3\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136"+ "\1\u10f4\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u10f5\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136"+ "\1\u10f6\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u051f\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u0764\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\12\136\1\u10f7\15\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u10f8\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u10f9"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u10fa\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u10fb\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0357\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u10fc\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u10fd\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u10fe\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136"+ "\1\u10ff\3\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u0903\1\136\1\u0e48\22\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u1100\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1101\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u1102\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1103"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1104\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u1105"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u1106\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1107\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u1108\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u1109\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u0543\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u110a\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u110b\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u110c\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u110d\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u110e\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u02e9\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u110f\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u1110\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u022f\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1111\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u1112\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u1113\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1114"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u1115"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0575\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u1116\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1117\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0b1a\1\136\1\u1118"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1119"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u111a"+ "\1\136\1\u111b\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u111c\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\25\136\1\u111d\2\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u0242\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u111e\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u0854\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u111f\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1120"+ "\3\136\1\u111e\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u1121\1\136\1\u1122\1\136\1\u1123\1\136\1\u1124\1\136"+ "\1\u1125\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1126\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1127\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u1128\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136"+ "\1\u07e7\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1129\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u112a"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u112b"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u112c"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u112d\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u112e\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u112f\5\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u1130\17\136\1\u1131"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u1132\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u1133\1\136\1\u1134\1\136\1\u1135\1\136\1\u1136\1\136"+ "\1\u1137\7\136\1\u10dc\1\u0d98\1\136\1\u1138\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\1\u1139\12\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u113a\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u113b\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u0364\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u113c\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u113d\16\136\1\u03a9\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u113e\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u113f\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\12\136\1\u1140\15\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u1141\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u1142\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u1143\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\24\136\1\u1144\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u1145\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1146\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1147\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u1148\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u08c2\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u1149\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u114a"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u114b"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u114c"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0242"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u114d"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u114e"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u114f"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u1150"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1151"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1152"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u1153"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\12\136\1\u1154\15\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1155\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\23\136\1\u1156\4\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u1157\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u1158\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1159\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\22\136\1\u115a\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\136\1\u10e4\26\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u115b\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u10e4\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u115c\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\23\136\1\u115d\4\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\5\136\1\u115e\22\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\136\1\u115f\26\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\27\136\1\u1160\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1161\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u0244\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u0d09\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u1162\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1163"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u107b"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1164"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1165"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1166"+ "\14\136\1\u1167\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u100d\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1168\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u1169\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u116a\2\136\1\u116b\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u09af\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u116c\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u116d\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0903\15\136\1\u0ed7\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u116e\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u116f\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u0606\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1170\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1171\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u1172\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1173\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u1174\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1175\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u1176\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u0beb"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\26\136"+ "\1\u1177\1\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u1178\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u0e47\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u1179\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u117a\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\22\136\1\u117b\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u117c\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u03ef\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u117d\10\136\1\u0ed8"+ "\1\u117e\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\12\136"+ "\1\u117f\15\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136"+ "\1\u01c1\10\136\1\u022f\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u1180\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1181\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1182\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1183\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u1184\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\1\u1185\12\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u1186\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u0eee\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u0fbc\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1187\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u02e9\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0ed1\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u1188\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\136\1\u1189\1\u01b5\3\136\1\u118a\1\136\1\u080b\13\136"+ "\1\u102c\3\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u118b\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136"+ "\1\u1118\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u118c"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u118d"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u118e"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u118f\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0397\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1190\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1191\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1192\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u1193\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1194\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u106c\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1195\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u1196\3\136\1\u109f"+ "\13\136\1\u1197\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\u1198\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1199"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u119a"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u119b"+ "\6\136\1\u063e\5\136\1\u0bf5\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u119c\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u119d\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u119e\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\26\136\1\u119f\1\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u11a0\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\5\136\1\u01ce\1\136\1\u11a1\1\u11a2\10\136\1\u11a3"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u11a4"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u01ce"+ "\13\136\1\u0681\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u11a5"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\23\136"+ "\1\u11a6\4\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u0fbd\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0354\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u11a7\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u11a8\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136"+ "\1\u11a9\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u11aa\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u11ab\1\136\1\u11ac\1\u1059\1\u0861\2\136\1\u11ad\7\136"+ "\1\u11ae\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u11af\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u11b0\6\136\1\u11b1\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u11b2\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u11b3\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u053f\1\136\1\u11b4\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u11b5\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u11b6\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u11b7\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u11b8\2\136\1\u0d1c\15\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u0c18\3\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u11b9\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u11ba\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u11bb\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u11bc\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u11bd\3\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u11be\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u11bf\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u07c4\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u11c0\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u1028\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\12\136\1\u11c1\15\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u11c2\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u11c3\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\u11c4\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u11c5\6\136\1\u01b8\14\136\1\u11c6\1\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u11c7\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u086a\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\24\136\1\u11c8\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u11c9\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u03b3\10\136\1\u0408\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u11ca\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\27\136\1\u11cb\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u11cc\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u11cd\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u11ce\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u02e9\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\26\136\1\u0612\1\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u11cf\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\136\1\u0357\26\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u11d0\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u11d1\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\26\136\1\u11d2\1\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u11d3\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u11d4\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u11d5\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u11d6\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u11d7\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u093a\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u11d8\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u11d9\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u11da\1\136\1\u11db\5\136\1\u0567\1\136"+ "\1\127\2\0\1\u11dc\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\25\136\1\u11dd\2\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u11de\5\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u11df\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u11e0\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u11e1\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\23\136\1\u07dc\4\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u11e2\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u07ab\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u11e3\26\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u11e4\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u11e5\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u11e6\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u11e7\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u11e8\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u11e9\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u11ea\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u11eb\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u11ec\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u11ed\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\136\1\u11ee\2\136\1\u11ef\2\136\1\u11f0"+ "\10\136\1\u11f1\1\u11f2\1\u11f3\1\136\1\u11f4\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u11f5\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\24\136\1\u11f6\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u11f7\1\136\1\u0361\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u11f8\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u11f9\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u11fa\16\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u11fb\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u11fc\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u11fd\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\u11fe\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u11ff\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u1200\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u1201\20\136\1\u1202\4\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1203\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1204\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u1205\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u1206\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1207\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1073\3\136"+ "\1\u1208\15\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1209\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u0efd\4\136\1\u0d80\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u120a\2\136\1\u0dd7\1\u120b\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u120c\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u03a9\1\136\1\u120d\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u0772\20\136\1\u08b6\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u0bde\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u120e\3\136\1\u120f\10\136"+ "\1\u0408\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u100d\2\136\1\u1210\20\136\1\u1211\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1212\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\u1213\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1214"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u07fa\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u1215\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1216"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u0a66"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1217\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u10d5\3\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u1218\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u1219\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u121a\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u121b\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u121c\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u121d\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u121e\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u121f\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1220\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1221"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1222\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u1223"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\u1224\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u1225\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u1226\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u1227\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\1\127\1\u024e"+ "\4\127\1\0\2\127\1\u024e\1\127\4\u024e\1\127\1\0"+ "\1\127\1\0\3\127\1\0\1\127\1\u024e\14\0\4\127"+ "\3\u024e\5\127\2\u024e\3\127\2\u024e\4\127\1\u024e\1\127"+ "\2\0\1\127\2\0\10\127\1\u024e\2\127\1\0\1\127"+ "\3\u024e\1\127\3\u024e\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1228\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u053d\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u03ef\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u1229\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0372\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u122a\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u122b\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u122c\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\1\u122d\12\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\26\136\1\u122e\1\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u122f"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u1230\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1231\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u1232"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1233\1\u1234"+ "\2\136\1\u1235\3\136\1\u1236\1\u1237\10\136\1\u1238\5\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u1239\3\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u123a\5\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u123b\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u123c\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u123d\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u123e\2\136\1\u123f"+ "\4\136\1\u1240\11\136\1\u1241\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1242\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1243\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u1244\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1245\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u1246\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u1247\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\136\1\u1248\26\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u036f\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u0c0e\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u03a7\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\1\u035f\12\136\1\0"+ "\10\136\17\0\1\u1249\151\0\1\u124a\206\0\1\u071c\70\0"+ "\1\u124b\164\0\1\u124c\145\0\1\u124d\53\0\2\64\1\0"+ "\1\64\1\0\2\64\2\0\6\64\1\0\1\64\1\u124e"+ "\24\64\1\0\16\64\1\u124e\25\64\1\0\24\64\17\0"+ "\1\u124f\120\0\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u02e1\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u1250\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\17\0\1\u1251\137\0\1\u1252\120\0\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1253\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\1\136\1\u1254\11\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\15\136\1\u1255\12\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u06a9\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1256\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u1257\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1258\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u1259\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u0b5a\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u125a\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\5\136\1\u125b\22\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u07bf\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0cda\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u125c\16\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u0242\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u08c2\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1069\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u125d"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u125e\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u125f\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u1260\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136"+ "\1\u0fb8\22\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u1261\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136"+ "\1\u1262\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1263"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u1264"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u1265"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1266"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1267"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u1268"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1269"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u126a"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u126b\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0871\4\136"+ "\1\u126c\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136"+ "\1\u126d\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u126e"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\12\136\1\u126f"+ "\15\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1270\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1271\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u1272\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1273\5\136\1\u1274"+ "\1\u1275\15\136\1\u1276\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1277\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1278\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u1279\11\136\1\127\2\0\1\u127a\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u127b\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u0cf9\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u127c\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u127d\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\23\136\1\u0bef\4\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u127e\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u127f\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u1280\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\23\136\1\u1281\4\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u1282\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\12\136\1\u1283\15\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\7\136\1\u051c"+ "\1\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\7\136\1\u022f\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u0d14\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1284\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1285\1\136\1\u1286\13\136\1\u1287\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1288\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u1289\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\7\136\1\u128a\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u128b\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u128c\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u0575\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0384\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u128d\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u0d7a\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u128e\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u128f\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1290\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\5\136\1\u1291\1\u1285\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u036f\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u1292\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u1293\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1294\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u1295\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u1296\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1295\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1297\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u1298\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u0349\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u0495\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1299\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\23\136\1\u129a\4\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u086a\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u129b\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u129c\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\24\136\1\u129d\3\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u0917\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u129e\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u129f\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u12a0\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u12a1\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u12a2\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u0c24\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u12a3\1\u12a4\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u109f\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u12a5\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u12a6\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u05eb\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u063e\5\136\1\u12a7\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u12a8\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u12a9\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u12aa\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u12ab\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u11c7\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u12ac\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u12ad\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u12ae\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u12af\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u12b0\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u12b1\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u12b2\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u12b3\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u12b4\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u12b5\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u12b6\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u12b7\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u10b0\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u12b8\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u12b9\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\26\136\1\u0cd4\1\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u0995\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u12ba\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u12bb\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u12bc\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u0b03\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u12bd\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u0871\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u07d5\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u080b\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\5\136\1\u12be\22\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u08c1\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u12bf\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\27\136\1\u12c0\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\23\136\1\u12c1\4\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\1\136\1\u022f\4\136\1\u022f\1\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\27\136\1\u12c2\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\22\136\1\u102a\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\23\136\1\u12c3\4\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u12c4\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u03b2\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u0582\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u12c5\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\5\136"+ "\1\u022f\3\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\6\136\1\u022f\1\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0c33\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u12c6\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u12c7\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u022f\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\1\u12c8\7\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\u05a7\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\27\136\1\u12c9\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\u0340\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u12ca\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u0432\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u12cb\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u12cc\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u12cd\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u12ce\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136"+ "\1\u12cf\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u0f0e\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u0432\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u12cf\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u12d0\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u12d1\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\5\136\1\u12d2\22\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\136\1\u12d3\26\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u12d4\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u12d5\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u12d6\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u12d7\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u12d8\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u12d9"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u0835\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u12da\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\5\136\1\u0e4e\22\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u12db\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u12dc\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u12dd"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u085d\3\136"+ "\1\u085f\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u05aa\2\136\1\u0ae7\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u0837\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u12de\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\23\136"+ "\1\u12df\4\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u12e0\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\23\136"+ "\1\u12e1\4\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136"+ "\1\u12e2\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u12e3\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u12e4\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u12e5\4\136\1\u12e6\16\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u12e7\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\136\1\u12e8\26\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\24\136\1\u12e9\3\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u0e4e\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u12ea\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u12eb\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u12ec"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u12ed\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u12ee"+ "\1\136\1\u12ef\22\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u0c3e\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u08b6\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u0ae0\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u12f0\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u12f1\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u0da0\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\136\1\u0364\26\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\27\136\1\u12f2\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u12f3"+ "\3\136\1\u12f4\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u12f5\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u12f6\7\136\1\u12f7\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u12f8\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u12f9\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u12fa\3\136\1\u11c6\1\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u12fb\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u0fef\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u0b7e\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u12fc\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u053c\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u12fd\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u12fe\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\24\136\1\u12ff\3\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\5\136\1\u1300\22\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u1301\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1302\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\23\136\1\u1303\4\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u1304\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u1305\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u1306\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u1307\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u1308\1\u1309\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u130a\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u130b\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u130c\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\25\136\1\u130d\2\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u130e\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0262\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u0334\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u0e29\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u130f\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u1310\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1311"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1312\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u0349"+ "\1\136\1\u0540\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\1\136\1\u1262\6\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u1313\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u109d\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1314\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1315\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u1316\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u1317\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u1318\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u1319\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\11\136\1\u0632\16\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u131a\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u131b\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u0a29\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\4\136\1\u131c\4\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136"+ "\1\u131d\3\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u131e\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u1106\26\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u131f\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\5\136\1\u022f"+ "\2\136\1\127\10\0\6\136\1\0\10\136\1\u0387\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u07db"+ "\26\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1320"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1321"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1322\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1323\13\136"+ "\1\u1324\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u1325\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u1326\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u07db\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u1327"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u1328\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u119f\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\11\136\1\u1329\16\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u132a\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u132b\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u132c\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u132d\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u0b20\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u132e\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u132f\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1330\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1331\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1332\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1333\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1334\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1335\3\136\1\u1336\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\24\136\1\u1337\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u1338\1\136\1\u106d"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u1339\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u133a\1\u133b"+ "\1\136\1\u133c\1\u051d\3\136\1\u133d\5\136\1\u057d\2\136"+ "\1\u133e\1\u133f\1\136\1\u1340\3\136\1\127\2\0\1\136"+ "\2\0\1\u1341\12\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\136\1\u0e4e\26\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u038b\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u08c2\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u0ab2\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\26\136\1\u1342\1\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1343\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1344\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u1345\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u1346\5\136\1\u0d12\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u111a\1\136\1\u1347\5\136"+ "\1\u1348\15\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u1349\3\136\1\u134a\10\136\1\u0408\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u134b\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u057d\14\136\1\u134c\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u134d\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u07d8\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\1\u0569\12\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\26\136\1\u10e4\1\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\12\136\1\u02e7\10\136\1\u134e\4\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u134f\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u1350\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u1351\5\136\1\u1352\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u1353\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u083b\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u1354\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u10e2\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0e19\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u057d\14\136\1\u086a\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1355\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u0906\22\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u1356\16\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1357\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1358\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u1359\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u135a\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0ced\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u135b\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0373\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u135c\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u135d\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u135e\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u135f\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1360\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u054e\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u1361\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1362\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u1363\3\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1364\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u1365\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u1366\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1367\1\136"+ "\1\u05f2\5\136\1\u080b\1\u1368\4\136\1\u1369\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u136a\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u136b\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0a05\11\136\1\u136c\1\136"+ "\1\u0522\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u136d\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136"+ "\1\u136e\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u136f\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1370"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0cf7\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1371\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1372\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u0880\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1373\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0349\2\136"+ "\1\u1374\22\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u1375\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136"+ "\1\u1376\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u1377\2\136\1\u1378\1\136\1\u1379\1\u137a\1\u137b\7\136"+ "\1\u0361\1\u137c\1\u137d\5\136\1\127\2\0\1\136\2\0"+ "\1\u01d7\12\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u137e\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u137f\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1380\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1381\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u1382\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u1383\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1384\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u1385\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1386\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u1387"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u1388\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u1389\16\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u036b\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\25\136\1\u138a\2\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u138b\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u138c\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\23\136\1\u036b\4\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u0ff8\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u0765\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u138d\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u138e\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\5\136\1\u138f\22\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1390\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u1391\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\136\1\u1392\26\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\5\136\1\u1393\22\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1394\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\u1395"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u1396\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u1397\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\136\1\u1398\26\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u1399\4\136\1\u139a\3\136\1\u139b\12\136\1\u139c"+ "\1\136\1\u0844\1\u139d\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u139e\6\136\1\u139f\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u13a0\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u13a1\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\5\136\1\u13a2\22\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u13a3\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u13a4\3\136\1\u13a5\1\u13a6\1\136\1\u13a7"+ "\4\136\1\u0e52\1\136\1\u13a8\6\136\1\u13a9\1\127\2\0"+ "\1\136\2\0\1\u13aa\12\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u112b\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u13ab\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\25\136\1\u0372\2\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u13ac\1\136\1\u13ad\2\136\1\u13a2"+ "\1\136\1\u13ae\1\136\1\u13af\1\u13b0\6\136\1\u13b1\1\u13b2"+ "\3\136\1\u0844\1\u13b3\1\127\2\0\1\136\2\0\1\u13b4"+ "\12\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u13b5\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\136\1\u13b6\26\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u03a9\10\136\1\u086a\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u13b7\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u13b8\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u13b9\5\136\1\u135a\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u13ba\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u13bb\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u13bc\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u13bd\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u13be\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u13bf\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u13c0\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u13c1\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u13c2\16\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u0b6a\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u13c3\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136"+ "\1\u13c4\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u13c5"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u045a"+ "\1\u0684\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u13c6"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u13c7"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u13c8"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u10a9\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u03b2\12\136"+ "\1\u079e\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u13c9\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u13ca\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u13cb\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u03f4\14\136\1\u13cc\3\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u13cd\1\u08ef\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u13ce\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u13cf\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\4\136\1\u13d0\3\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u13d1\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\24\136\1\u13d2\3\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\1\136\1\u13d3\6\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u13d4\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u0945\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u13d5\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u13d6\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u13d7\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u13d8\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u13d9\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\23\136\1\u1357\4\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u0339\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u0a11\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u13da\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\1\u13db\7\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u13dc\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u13dd\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u13de\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\26\136\1\u13df\1\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u13e0\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u13e1\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u13e2\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\22\136\1\u0440\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u13e3\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\22\136\1\u13e4\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u13e5\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\12\136\1\u13e6\15\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u13e7\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u13e8\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\136\1\u13e9\2\136\1\u09bd\1\u13ea\2\136\1\u13eb"+ "\1\u13ec\6\136\1\u0361\1\u13ed\4\136\1\u13ee\1\136\1\127"+ "\2\0\1\u13ef\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u13f0\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\22\136\1\u13f1\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u13f2\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\12\136\1\u13f3\15\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u13f4\20\136\1\u10f5\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u13f5\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u13f6\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\1\u13f7\12\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u13f8\1\u0ed9\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u13f9\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u13fa\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u13fb\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u13fc\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u13fd\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u13fe\7\136\1\u117d\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u06ed\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\24\136\1\u13ff\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1400\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u1401\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u1402\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u1403\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u07db\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u1404\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u1405\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1406\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u1407\1\u0d10\16\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0edf\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1408\4\136"+ "\1\u1409\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u140a\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u140b\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u140c"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u140d\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u140e\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u140f\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u1410\26\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1411\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u1412\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u1413\3\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u1414\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0859\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u07d5\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u1415\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u1416\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u060c\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\24\136\1\u05aa\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u093e\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u1417\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1418\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0d15\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u0943\10\136\1\u1419\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\22\136\1\u141a\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\12\136\1\u141b\15\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u0ce1\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u0349\1\136\1\u0540"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0432"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\23\136\1\u141c"+ "\4\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u141d"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u141e"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u141f"+ "\6\136\1\u1420\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u1421\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u053f\1\136\1\u1422\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\u1423\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1424\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u1425\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u1426\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u1427\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1428\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u1429\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u142a\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u142b\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u142c\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u142d"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u142e\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u142f\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1430\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136"+ "\1\u1431\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u1432\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1433\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1434"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u10b0"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u1435"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u1436\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u1437"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u05da"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u1438\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0a1e\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\25\136\1\u0a64\2\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\24\136\1\u06c2\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1439\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\12\136\1\u143a\15\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u143b\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u143c\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u143d\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u143e\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\23\136\1\u143f\4\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u1440\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u1441\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u1442\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u0be8\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u1443\4\136\1\u057e\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u05ee\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1444\20\136\1\u08c1\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\25\136\1\u1445\2\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1446\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u1447\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1448\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u1449\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u144a\13\136\1\u144b\3\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0440\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u144c\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u0871\5\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u144d\10\136"+ "\1\u144e\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u086e\10\136\1\u144f\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u1450\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1451\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1452\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u1453\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\1\u1454"+ "\7\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0b98"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\26\136\1\u1455"+ "\1\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u1456\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1457\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\23\136\1\u1458\4\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u1459\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u145a\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u145b\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u145c\2\136\1\u06ed\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u145d\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\5\136\1\u06ed\22\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u145e\1\136\1\u06ed"+ "\21\136\1\u07bf\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u145f\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u1460\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u1461\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1462\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u1463\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u1464\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u1465\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1466\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1467\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u1468\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u07b3\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1469\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u146a\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u146b\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u146c\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u146d\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u11b9\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\25\136\1\u146e\2\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u146f"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136"+ "\1\u1470\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u0349"+ "\2\136\1\u1471\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u1472\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u1473\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1474\1\136\1\u0be4\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1475\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1476\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u1477\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1478\4\136\1\u1479\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u147a\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u0434\17\136\1\u038b\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u147b\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u147c\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u147d\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u147e\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u06b5\4\136\1\u147f\13\136"+ "\1\u03b0\3\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1480\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1481\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1482"+ "\2\136\1\u1483\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u0b05\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u0b06\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u1484\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u1485\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1262"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1486"+ "\17\136\1\u1487\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u119f\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u1488\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u1489\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u148a\6\136\1\127\2\0\1\136"; private static final String ZZ_TRANS_PACKED_4 = "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u091a\1\u0812\1\u148b\1\u0bfe\11\136"+ "\1\u148c\1\u148d\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u148e\1\u1234\1\136\1\u10e6\1\u148f\1\u0631\1\u07cd\1\136"+ "\1\u1490\1\u0da6\4\136\1\u1491\1\136\1\u0540\1\u1492\1\u1493"+ "\1\136\1\u0483\3\136\1\127\2\0\1\u07d5\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1494"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1495\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136"+ "\1\u049c\3\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u1496\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\26\136"+ "\1\u0b58\1\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136"+ "\1\u0e0d\3\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136"+ "\1\u1497\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1498\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u0432\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u0d6b\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\25\136\1\u1499\2\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u149a"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u149b\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u149c\14\136\1\u149d\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u149e\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u149f\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u14a0\3\136\1\u14a1\1\u14a2\4\136\1\u14a3"+ "\1\136\1\u0533\1\u14a4\1\u14a5\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u14a6\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u0cd3\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u14a7\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u14a8\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u14a9\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u14aa\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u14a8\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u14ab\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u14ac\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u14ad\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\25\136\1\u14ae\2\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u14af\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u14b0\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u14b1\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u14b2\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u14b3\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\23\136\1\u14b4\4\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u14b5"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u14b6\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u022f\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u14b7\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u14b8\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u14b9\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\65\0\1\u14ba\132\0\1\u14bb\144\0\1\u0f9e\146\0"+ "\1\u14bc\43\0\2\64\1\0\1\64\1\0\2\64\2\0"+ "\6\64\1\0\26\64\1\0\15\64\1\u0101\6\64\1\u0101"+ "\17\64\1\0\24\64\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\12\136\1\u0cc3"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u14bd\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\17\136\1\u075c\10\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\1\136\1\u075f\4\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u14be\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u14bf\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u14c0\16\136\1\u0596\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u14c1\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u14c2\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u0be4\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u14c3\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u14c4\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\12\136\1\u07d5\15\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u14c5\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u0782\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u0cbe\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u084d\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u0850\3\136\1\u03b2\1\136\1\u0851\16\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u14c6\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u14c7\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u14c8\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0c49\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u14c9\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u14ca\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u0da9\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u038b\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u14cb\1\136\1\u14cc\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u08c1\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\12\136\1\u14cd\15\136\1\127"+ "\2\0\1\136\2\0\1\u0569\12\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u14ce\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u14cf\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u14d0\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u14d1\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0364\11\136\1\u14d2"+ "\15\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u14d3"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u14d4\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u03a6\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u14d5\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u14d6\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u14d7\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u14d8\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u14d9\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u14da\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u14db\16\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u14dc\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u14dd\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u14de\20\136"+ "\1\u14df\3\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u14e0\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u14e1\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\1\u14e2\7\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u02e9"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u14e3\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u14e4\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u0ac4\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\24\136\1\u14e5\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\1\136\1\u14e6\6\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u0d4f\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\12\136\1\u14e7\15\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u14e8\13\136\1\u14e9"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u14ea"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u07db\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\1\u14eb\7\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u14ec\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\24\136\1\u14e9\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u14ed\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u14ee\20\136\1\u13d2\3\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u14e5\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u14ef\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u14f0\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u14f1\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u14f2\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\2\136\1\u14f3\5\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\1\u14f4\7\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u14f5\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u14f6\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u05aa\2\136\1\u13d2\3\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u14f7\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u14f8\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u14f9\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u14fa\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\26\136\1\u14fb\1\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u14fc\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u14fd\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\24\136\1\u14fe\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u0b26\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u14ff\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u1500\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u1501\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\27\136\1\u1502\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u1503\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u1504\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1505\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1506\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u1507\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u1508\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\27\136\1\u1509\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u150a\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u01a9\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u150b\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u150c\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u123a\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u150d\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u150e"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u150f\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u1510\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1511\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u0a0f"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1512"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u1513\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\11\136\1\u01b8\4\136\1\u057d"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\23\136\1\u1514"+ "\4\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1515"+ "\7\136\1\u1516\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u1517\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u08c2\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u1518\16\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u1519\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u022f\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u151a\1\u151b\3\136\1\u11a2\1\136\1\u151c\5\136\1\u1487"+ "\1\u151d\5\136\1\u0eb4\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u12cf\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u151e\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u10a8\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u151f\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1520\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u13c1"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u1521"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1522\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u03b3\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u1523\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u1524\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\5\136\1\u0372\22\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\12\136\1\u0d1c\15\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1525\5\136\1\u1526"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u1527"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u056b\2\136"+ "\1\u1528\2\136\1\u1529\1\u152a\10\136\1\u152b\1\u152c\6\136"+ "\1\127\2\0\1\136\2\0\1\u152d\12\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u152e"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u152f"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1530"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u036c\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u1531\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u0da3\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u1532\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0372\20\136\1\u07db\4\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u1533\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1534\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u1535\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u1536\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0da3\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u1537\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1538\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u1539\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u153a\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u153b\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u153c\13\136\1\u153d\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u153e\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u153f\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u1540\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u1541\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u1542\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1543\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u1544\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\1\u0dcf\7\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\12\136\1\u107d\15\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\5\136\1\u1545\22\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1546\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u0b5a\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0871\4\136\1\u022f\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\5\136\1\u03ef\22\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u1547\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u1548\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\27\136\1\u10fe\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\5\136\1\u1549\22\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u154a\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\136\1\u154b\26\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u06e0\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u022f\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u0ab2\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\25\136\1\u154c\2\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u0fb3\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u154d\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u154e\13\136\1\u154f\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u1550\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u032d\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u0dcf\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1551\1\136\1\u1552\3\136\1\u1553"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u1554"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u08a8"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u0631"+ "\22\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1555"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1556"+ "\1\136\1\u1557\11\136\1\u0c3e\1\136\1\u049c\3\136\1\u1558"+ "\1\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1559"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u155a"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u155b"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u155c"+ "\14\136\1\u0c3e\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u0dd0"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u155d\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u155e\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u155f"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u049c"+ "\22\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u06b5"+ "\2\136\1\u047e\13\136\1\u0eda\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1560\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u1561\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u086a\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u109f\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1562"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1563\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u1564\26\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u1565\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1566\4\136\1\u08d2\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u1567\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\11\136\1\u1568\4\136\1\u1569\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u156a\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u156b\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u156c\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u156d\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\27\136\1\u139d\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\27\136\1\u0ecd\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u156e\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u0838\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u0ac6\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u156f\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1570\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u1571\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u1572\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u1573\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u1574\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\25\136\1\u1575\2\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1576\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1577"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u1578\26\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u1579\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u157a\11\136\1\u022f\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u157b\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u157c\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u0942\1\136\1\u157d\1\136\1\u157e\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u157f\11\136"+ "\1\u0ad2\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1580\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u1581\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u1582\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1583\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1584\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u0334\12\136\1\u1585\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u1586\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u1587\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u1588\4\136\1\u08d2\6\136\1\u1589\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u158a\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u158b\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u158c\13\136\1\u038b\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u158d\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u0efc\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u158e\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\24\136\1\u158f\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u05ce\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u0a24\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u1590\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u07b3\6\136\1\u1591\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u1592\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1593\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u1594\1\u1595"+ "\1\u1596\11\136\1\u1597\2\136\1\u1598\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1599\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u0533\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\26\136\1\u159a\1\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u0384\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u159b\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u0a75\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u159c\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u159d\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u159e\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u159f\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u15a0\16\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0c2f\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u15a1"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u15a2\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u15a3\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u0440"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u15a4\1\136"+ "\1\u05f2\5\136\1\u080b\1\u1368\4\136\1\u1369\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u15a5\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u15a6\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u0582\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u06d4\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u15a7\2\136\1\u15a8"+ "\11\136\1\u0533\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u15a9\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u15aa\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u0cdb\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u0434\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u15ab\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u15ac\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u0769\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u0f0e\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u11bb\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u1036\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u15ad\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u0ab2\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0ac8\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u15ae\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\27\136\1\u01b8\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u06b4"+ "\17\136\1\u15af\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u15b0\1\136\1\u15b1\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u15b2\3\136\1\u03b3\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u15b3\1\u15b4\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u15b5\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\12\136\1\u0cdb\15\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u0bc7\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u11a2\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u15b6\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u15b7\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u15b8\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\5\136\1\u15b9\13\136\1\u15ba"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u15bb"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u15bc"+ "\26\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u15bd\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u15be\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u15bf\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u15c0\1\0\1\u0522\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u15c1\1\136"+ "\1\u1328\1\u15c2\2\136\1\u0815\1\u0522\1\u15c3\7\136\1\u15c4"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u0522\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u0522"+ "\2\136\1\u15c2\3\136\1\u0522\1\u15c5\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u15c6\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u07c8\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u15c7\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0582\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u015f\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u15c8\3\136\1\u15c9\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u15ca\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u15cb\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u15cc\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u15cd\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u15ce\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\24\136\1\u15cf\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u15d0\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u15d1\13\136\1\u15d2\5\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u15d3\5\136\1\u15d4"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u15d5\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u15d6\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u15d7\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\22\136\1\u15d8\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u15d9\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u086a\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\12\136\1\u1385\15\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\12\136\1\u0d95\15\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u15da\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u15db\11\136\1\u15dc"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u15dd"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u15de\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u15df\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u15e0\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\136\1\u10d5\26\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u15e1\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u15e2\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u15e3\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u15d1\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u15e4\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\12\136\1\u15e5\15\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u15e6\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u15e7\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u15e8\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u15e9\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\27\136\1\u15ea\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u15eb\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u15ec\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u15ed\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\27\136\1\u15ee\1\127\2\0\1\u0440\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u15ef"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u15f0"+ "\1\u15f1\1\u15f2\2\136\1\u0338\3\136\1\u15f3\7\136\1\u15f4"+ "\2\136\1\u15f5\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\4\136\1\u0a38\3\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u15f6\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u15f7\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u15f8\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u15f9\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1128\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u15fa\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u15fb\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u15fc\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u15fd\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\27\136\1\u15fe\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u0c21"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u15ff"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u05ee\11\136"+ "\1\u0533\1\136\1\u0efb\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0a69\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u036b\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u1600\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\12\136\1\u1601\15\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\27\136\1\u1602\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1603\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1604\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u1605\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u03fa\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u1606\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\25\136\1\u1607\2\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\1\136"+ "\1\u0345\6\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1608\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u1609\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u160a\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u160b\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u160c\16\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u160d\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u160e"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u160f"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u101b"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u1610\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1611\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\23\136\1\u0b26\4\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\25\136\1\u1612\2\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u1613\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u1614\5\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u1615\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u1616\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1617\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1618\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u1619\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u03bb\3\136\1\u015f\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u161a\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u161b\21\136"+ "\1\u161c\2\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u161d\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u161e\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\10\136\1\u161f\2\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u1620\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1621\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u117d"+ "\10\136\1\u1622\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1623"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u1624\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136"+ "\1\u1450\3\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u1625\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u1626\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u0eee"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u1627\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u117b\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136"+ "\1\u1628\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1629"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u162a"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u07bf"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u112e"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u162b"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u162c"+ "\22\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\26\136\1\u0567"+ "\1\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u1091"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u162d\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u162e\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u1367\1\136\1\u162f"+ "\5\136\1\u1630\1\u1631\4\136\1\u057d\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u1632\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u1633\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1634\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u1635\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\23\136\1\u1636\4\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1637\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u0a1f\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u1638\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\12\136\1\u1639\15\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u163a\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u163b\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u163c\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u163d\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u163e\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u163f\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0cdb\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u1640\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u1641\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u1642\7\136\1\u0eda\1\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u1643\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u0871\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u1644\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1645\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u1646\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\u1647\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1648\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1649\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u164a\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u164b\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u080a\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u164c\3\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u164d\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u164e\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u164f\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1650\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u1651\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u1652\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u1653\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u1654\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u1655\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1656\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u1657\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u1658\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u1659\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u165a\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u0b66\23\136\1\u165b\3\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u165c\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u165d\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u0325\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\23\136\1\u1230"+ "\4\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u049c"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\12\136\1\u165e"+ "\15\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u165f\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u01a9\26\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u143d\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u108d\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u1660\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u1661\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u1662\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\25\136\1\u1663\2\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u1664\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u038b\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1665\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1666\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1667\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1668\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\1\u1669"+ "\12\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u166a\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u166b\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u166c\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\5\136\1\u166d\22\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\1\u166e\12\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u166f\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u1670\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1671"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1672"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u1673"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1674"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u1675\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0f3f\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u1676\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u1677\1\u1678\1\u1679\1\u167a"+ "\1\136\1\u07da\1\136\1\u167b\1\u1678\1\u167c\7\136\1\u167d"+ "\1\u167e\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u167f\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u1680"+ "\26\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u0575"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u03a9"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1681"+ "\13\136\1\u1682\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u1683\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u1684\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1685\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u1686\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u1687\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1688\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1689"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136"+ "\1\u168a\3\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u168b\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\12\136"+ "\1\u168c\15\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u168d\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u168e\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1503"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u168f\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u168a\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1690\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u1691\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u1692\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1693\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\136\1\u1694\26\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u1695\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1696\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1697\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1698\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u1699\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u169a\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u169b\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u169c\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u169d"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0600\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u169e\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u169f\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u057d\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\1\u062e\7\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u16a0\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u11bb\3\136\1\u16a1\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u16a2\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u16a3\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u16a4\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u16a5\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u0222\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u16a6\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u16a7\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u16a8\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u16a9\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u16aa\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u16ab"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u16ac\2\136"+ "\1\u16ad\1\u05bd\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\5\136\1\u16ae\22\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u03b3\10\136\1\u0be0\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u03ef\3\136\1\u0482\1\136\1\u053b"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\1\u06f1\7\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u06ed\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u16af\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u03fa\13\136"+ "\1\u03ef\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u16b0\15\136\1\u053b\3\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u06f1\5\136\1\u16b1\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0a05\1\136\1\u16b2\1\136\1\u16b3"+ "\1\u16b4\10\136\1\u16b5\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u16b6\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u134f\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u16b7\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u16b8\2\136\1\u0615\1\u16b9\7\136\1\u0533"+ "\6\136\1\u10c7\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u16ba\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u16bb\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u16bc\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u16bd\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u16be"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u0516\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u16bf\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u16c0\6\136\1\u16c1"+ "\11\136\1\127\2\0\1\u16c2\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u16c3"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u16c4"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u16c5"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\12\136\1\u16c6"+ "\15\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u16c7"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u16c8\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u16c9\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u12e1\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u16ca\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u12e1\1\u16cb\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u16cc\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u16cd\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\26\136\1\u11c1\1\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u16ce\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u16cf\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u03dd\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u16d0\25\136\1\u16d1\1\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\136\1\u16d2\26\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u16d3\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\5\136\1\u0da3\22\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u16d4\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u16d5\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u16d6\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u16d7\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u16d8\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0f99\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\56\0"+ "\1\u16d9\3\0\1\u16da\156\0\1\u16db\116\0\1\u16dc\57\0"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u16dd"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u16de\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u16df\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u16e0\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u1385\5\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u16e1\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u16e2\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u16e3\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u05ce\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u16e4\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u16e5\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0e2f\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u16e6\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u16e7\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u16e8\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u16e9\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u07bb\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\27\136\1\u16ea\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u16eb\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u16ec\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\136\1\u127f\26\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u16ed\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\23\136"+ "\1\u0364\4\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\u0eda\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u16ee\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u16ef\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u16f0\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u16f1\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u112b\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u16f2\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\23\136\1\u112b\4\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u16f3\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u16f4\1\u16f5"+ "\1\u16f6\1\136\1\u16f7\1\136\1\u16f8\10\136\1\u16f9\1\u16fa"+ "\1\136\1\u03b0\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u16fb\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u16fc\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u0440\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u0e45\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u16fd\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u16fe"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u16ff\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1700\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\1\136\1\u1701\6\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1702\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0335\5\136"+ "\1\u1703\1\136\1\u1704\14\136\1\u0eb4\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u14e3\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u0c0e\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u1705\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1706\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u1707\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1708\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u1709\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u170a\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\5\136\1\u1291\22\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\12\136\1\u170b\15\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u170c\2\136\1\u0e0d\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u170d\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\3\136\1\u022f\4\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u170e\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\5\136\1\u170f\22\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\27\136\1\u1710\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136"+ "\1\u01a9\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1711\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\12\136\1\u1712"+ "\15\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1713"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1714\3\136"+ "\1\u12b5\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136"+ "\1\u01a9\3\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136"+ "\1\u0e48\3\136\1\u1715\16\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u1716\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0956\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u1717\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\5\136\1\u1718\22\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1719"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u171a\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u171b"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u171c"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u171d"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u171e"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u171f\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u1720\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1721\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1722\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1723\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u0c24\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\24\136\1\u1724\1\136\1\u11c1\1\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u1725\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1726\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\1\u1727\7\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u1728\16\136\1\u1729\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u172a\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u172b\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u172c\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u172d\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u172e\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0471\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u172f\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1730\13\136\1\u0412\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1731\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1732\1\136"+ "\1\u06f2\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u1733\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u13c1\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u10a8\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u151d\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1734\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u10a8"+ "\26\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u1522"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u0327"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1735\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\12\136\1\u1736\15\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u149e\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1737\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u1738\5\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u1739\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u173a\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u173b\1\u173c\10\136"+ "\1\u173d\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u173e\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136"+ "\1\u173f\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u1106\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1740"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1741"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1742"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u1743"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u1744"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u1745\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u12c9\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u1484\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u1746\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u1747\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u10a9\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u1419\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1748\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\1\u0387\12\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1749\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\136\1\u174a\26\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u174b\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u036b\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u01a9\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u056b\10\136\1\u174c\12\136\1\u174d"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u174e"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u174f"+ "\22\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1750"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u1751"+ "\26\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1752"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u1753\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0196\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u154c\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1754\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u1755\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u1756\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u1757\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u1758\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1759\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u175a\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u175b\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u0ffc\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u175c\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u175d\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u175e\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u175f\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u1760\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u1761\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1762\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1763\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1764"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u1765\1\u05cc\1\136\1\u0861\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1766\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u1767\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\12\136\1\u1768"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u1769\6\136\1\u176a\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u176b\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u176c\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u176d\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u176e\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\25\136\1\u176f"+ "\2\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\23\136\1\u1770"+ "\4\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1771"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u1772"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1773"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u0bf5\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u1774\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u1775\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1776\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u1401\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u1777\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u1778\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\22\136\1\u1779\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\12\136\1\u177a\15\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u177b\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\24\136\1\u177c\3\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\5\136\1\u0e48\22\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u177d\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u177e\4\136\1\u057e\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u177f\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1780\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\136\1\u1781\26\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1782\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\26\136\1\u156b\1\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u1783\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u0fde\10\136\1\u05aa\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\22\136\1\u1784\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u1785\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1786\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u1787\1\u1788\6\136"+ "\1\u0432\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\26\136"+ "\1\u1789\1\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0432\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u03b2\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u178a\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u0432\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u088e\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u178b\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u178c\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u0a9a\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u178d\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u178e\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\27\136\1\u077c\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u178f\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u1790\1\u1791\5\136\1\u1792\1\u1793\4\136\1\u1794\11\136"+ "\1\127\2\0\1\136\2\0\1\u1795\12\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1796"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1797\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u07bf\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u1798\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u1799\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u0ba2\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u179a\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u08dd\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u0631\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u0335\1\u08d2\1\136\1\u13a2\1\136\1\u10fe"+ "\1\136\1\u179b\15\136\1\u179c\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\25\136\1\u0c52\2\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u179d\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u179e\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u179f\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0a05\3\136\1\u17a0\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u07aa\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u075e\16\136\1\u17a1\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u17a2\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u17a3\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u17a4\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0924\13\136\1\u0b9b\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0771\3\136"+ "\1\u02e9\1\u1071\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u17a5\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0b7e\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u17a6\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u17a7\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u17a8\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136"+ "\1\u17a9\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u17aa\26\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u17ab\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0da1\4\136\1\u17ac\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u17ad\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u17ae\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u17af\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u17b0\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u0357\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u17b1\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u0a64\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u17b2\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u17b3\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u17b4\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u0522"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\1\u17b5\12\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u17b6\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u0440\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u17b7\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u0334\2\136\1\u17b8\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u0522\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u0522\26\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0334\1\u17b9\7\136"+ "\1\u0522\16\136\1\127\2\0\1\136\2\0\1\u17ba\12\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\1\u0334\12\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u0522\26\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136"+ "\1\u0522\3\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u17bb\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\u17bc\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u17bd\1\136\1\u17be"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u17bf"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1381"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u17bf"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u17c0"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u17c1"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u17c2"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u17c3"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u17c4\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u17c5\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\4\136\1\u17c5\3\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u17c6\22\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u17c7\3\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u0372\1\u17c8"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u17c9\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u17ca\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u17cb\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u17cc\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u17cd\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\5\136\1\u03f4\22\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0e45\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u17ce\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\27\136\1\u03f4\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\5\136\1\u17cf\22\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\u17d0\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u17d1\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u17d2\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u17d3\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u132d\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u17d4\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u17d5\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\23\136\1\u17d6\4\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u17d7\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u17d8\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\23\136\1\u17d9\4\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u17da\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u17db\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u17dc\10\136\1\u13a0\16\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\24\136\1\u17dd\3\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u01c1\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u17de\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u03fa\3\136\1\u17df\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u17e0\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u17e1\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u17dc\10\136\1\u17e2\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u17e3\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u17e4\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u17e5\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u17e6\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\23\136\1\u17e7\4\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u0c33\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u0c25\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u17e8\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u17e9"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u17ea"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u17eb"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\23\136\1\u17ec"+ "\4\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u17ed"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u17ee"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u17ef"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u17f0"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u064e\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u17f1\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u12f3\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u17f2\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u17f3\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u17f4\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u17f5\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u17f6\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u17f7\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u0c93\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u17f8\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u17f9\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u17fa\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u17fb\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u13fe\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u05f2\5\136\1\u080b\5\136\1\u057d\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u17fc\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u17fd\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\27\136\1\u17fe\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u17ff\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1800\14\136\1\u1801\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u1802\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u078f\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\5\136\1\u1803\3\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u1804\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u15a4\1\136\1\u1805\5\136\1\u1630"+ "\1\u1631\4\136\1\u057d\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u0eee\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u0da6\2\136\1\u15a8\11\136\1\u0533\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1806\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1401\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1807\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u125f\6\136\1\u063e\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\23\136\1\u1114\4\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u1452\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u054b\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u1808\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u05bd\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u1809\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u180a\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\23\136\1\u180b\4\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u07b3\20\136\1\u06ee\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u180c\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u05c5\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\24\136\1\u180d\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\27\136\1\u180e\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u180f\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u022f\1\u1810\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1811\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1812\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\136\1\u1813\26\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1814\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u1815\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u1816\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1817\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u1818\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u1637\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u1819\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\136\1\u0a7a\26\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u1432\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u181a\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\12\136\1\u181b\15\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u181c\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u0fb4\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u181d\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u181e\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u181f\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1820\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1821\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1822\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1823"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1824"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1825"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u1826"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1827"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u1828"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1653"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u1829"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u182a"+ "\16\136\1\u182b\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u17d1\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u182c\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u182d\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u0575\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u182e\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u182f\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1830"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1831\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1832\15\136\1\u1833\4\136\1\u1834\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u084d\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u1835\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1836\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0b56\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1837\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u1838\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1444\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u054b\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1839\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u183a"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u173f\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u183b\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0c90\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u183c\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136"+ "\1\u1401\22\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u183d\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136"+ "\1\u183e\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u14a7"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u183f\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1840\23\136"+ "\1\127\2\0"; private static final String ZZ_TRANS_PACKED_5 = "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1841\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0dcf\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u1842\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u07bf\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1843\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u0d08\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u1844\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u1845\17\136\1\u0525\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u1846\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u0e42\14\136\1\u1847\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u1848\3\136\1\u0d03"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\12\136\1\u1849"+ "\14\136\1\u184a\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u184b\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u184c\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u184d"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u184e\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u184f\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1850\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u1851\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u184f\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u1852"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1853\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\26\136\1\u1854\1\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1855\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u1856\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1857\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u1503\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1858\1\136\1\u1859\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u185a\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u185b\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u148a\4\136"+ "\1\u1854\1\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136"+ "\1\u185c\22\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u185d\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u185e\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136"+ "\1\u185f\22\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u1860\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u079b\1\u1861\1\u1862\6\136\1\u1863\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u1864\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1865\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\22\136\1\u1866\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\12\136\1\u1867\15\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1868\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u1869\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u186a\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u0c1c\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u186b\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u186c\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u186d\5\136\1\u186e\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u186f\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u1870\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1871\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\11\136\1\u0ac4\16\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u16a7\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1872\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u11bb\13\136\1\u0f36\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u109f\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1873\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1874\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\5\136\1\u1875\22\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1876\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u022f\5\136\1\u03ef\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1877\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u1878\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u1879\12\136\1\u187a"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u187b"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u187c"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u187d"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u187e"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u187f"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0b0f"+ "\12\136\1\u142f\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1880\12\136\1\u1881\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u1882\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u1883\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1884\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1885\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1886\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\11\136\1\u1887\16\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1888\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u1889\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u188a\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u188b\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u188c\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u188d\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u188e\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\5\136\1\u188f\22\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u1890\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1891"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u1892\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\26\136"+ "\1\u1893\1\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u1894\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u0ff9\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u1895\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1896\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1897\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u1898\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1899"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u189a\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0484\1\136"+ "\1\u189b\10\136\1\u057d\1\136\1\u0361\1\u189c\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u189d\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u189e\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u189f\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u18a0\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\74\0\1\u0cb3"+ "\123\0\1\u070f\146\0\1\u0cb3\50\0\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u18a1\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\1\u18a2\7\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1525\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u18a3\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u0345\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u18a4\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u18a5\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\27\136\1\u0606\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u051d\15\136\1\u18a6\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u18a7\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u18a8\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u18a9\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\27\136\1\u0c4f\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u18aa\1\u0a2f\1\136\1\u1595\2\136\1\u18ab"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u18ac"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u18ad\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u18ae\22\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u18af\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u18b0\16\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0e3a\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u14d9\5\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u0e74\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u112b\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0fc4\2\136"+ "\1\u18b1\22\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u18b2\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u18b3\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\u18b4\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u022f\4\136"+ "\1\u18b5\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u18b6\1\136\1\u03ef\1\u18b7\22\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u18b8\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u18b9\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u18ba\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u18bb\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u18bc\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u18bd\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u18be\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u18bf\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u18c0\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u18c1\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u18c2\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u18c3\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u0d8b\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u0f94\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u18c4\26\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u056b"+ "\7\136\1\u022f\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u0684\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u18c5\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u18c6\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\u18c7\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u18c8"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u03ef"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u18c9"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0764"+ "\1\u1713\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\1\u062e\7\136\1\127\10\0\6\136\1\0\10\136\1\u18ca"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\26\136"+ "\1\u18cb\1\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u18cc\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u18cd\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u18ce\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u18cf\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\23\136"+ "\1\u0c24\4\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u18d0"+ "\1\u057e\2\136\1\u0830\1\136\1\u047e\11\136\1\u0361\1\u18d1"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u18d2"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u18d3\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136"+ "\1\u18d4\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u12e1\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136"+ "\1\u18d4\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u18d5\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u18d6\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u18d7\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u18d8\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u18d9\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u18da\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u18db\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u18dc\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u18dd"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136"+ "\1\u18de\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u18df"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u18e0\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\23\136\1\u0522\4\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u18e1\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u18e2\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u06d4\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\22\136\1\u0540\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\24\136\1\u18e3\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\24\136\1\u18e4\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u18e5\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u0e0c\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u18e6\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\24\136\1\u18e7\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u18e8\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u18e9\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u18ea\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u18eb\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u1738\13\136\1\u18ec\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u18ed\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u18ee\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u18ef\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u18f0\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u18f1\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u18f2\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u18f3\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u18f4\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\27\136\1\u18f5\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u18f6\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0a11\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u18f7\12\136\1\u18f8\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u18f9\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\11\136\1\u0786\16\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u18fa\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\136\1\u080e\26\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u18fb\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u18fc\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\1\136\1\u18fd\6\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u18fe\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u022f\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u18ff\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1900\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1901\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1902\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u1903\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1904\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1905\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u1906\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1907\16\136\1\u11dd\2\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1908\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u1909\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u190a\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\25\136\1\u190b\2\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u190c\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\136\1\u190d\26\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u190e\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u190f\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\11\136\1\u1910\16\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u1911\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u1912\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u1913\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1914\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1915\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u1186\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\27\136\1\u1916\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u1917\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1918\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1556\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u1919\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u191a\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136"+ "\1\u191b\3\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u191c\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u191d\2\136\1\u191e\1\136\1\u10fe\11\136\1\u153b\2\136"+ "\1\u062d\3\136\1\127\2\0\1\136\2\0\1\u191f\12\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u1920\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1921\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u1679\24\136\1\u1922\1\127\2\0\1\136\2\0"+ "\1\u1923\12\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1924\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1925\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1926\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\11\136\1\u1927\16\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u18d3\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u1928\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u1929\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u0b5a\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u0582\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u192a"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u192b\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0da6"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u192c\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u192d\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u192e\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u192f\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u1930\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u1931\3\136\1\u1932\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u1933\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\12\136\1\u1934\15\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u1935\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1936\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u11a2\7\136\1\u0c3e\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u1937\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u114e\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\5\136\1\u1374\22\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1679\13\136\1\u1938"+ "\1\136\1\u0c3e\6\136\1\u1939\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u193a\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u193b\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u193c\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u193d\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u193e\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u193f\13\136\1\u1940\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u1941\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0cdf\1\136\1\u1942\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1943\3\136"+ "\1\u0a0f\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1944\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u1945\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u1946\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u1947\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u1948\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u1949\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u11e7\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u194a\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u194b"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\12\136\1\u149e"+ "\15\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u0fb8"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u194c\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0d15\1\136"+ "\1\u03aa\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\23\136"+ "\1\u194d\4\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u15a5\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u0242\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u03b2\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u065b\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0f0e\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u110b\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u194e\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u194f\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u1950\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1951\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1952\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u1953\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\1\u1954\12\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1953\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1955\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u1956\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u1957\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u1958\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u1959\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\12\136\1\u195a\15\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\23\136\1\u195b\4\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u0d12\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\136\1\u0522\14\136\1\u07e0\1\136\1\u195c\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u0334\2\136\1\u053b\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u0522\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u07e0\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u195d\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u0fb5\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\136\1\u195e\26\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u195f\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u1960\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u1961\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\136\1\u1962\26\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u1963\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u1964\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1965\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u1183\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\5\136\1\u0871\22\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u07d8\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1966\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1967\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1968\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u10b9\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u1969\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u196a\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\25\136\1\u196b\2\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u196c\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u196d\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u0a11\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u196e\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u196f\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u1970\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u196f\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1971"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u1972\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u0c9d\6\136\1\127\2\0\1\136\2\0\1\u0569\12\136"+ "\1\0\4\136\1\u1973\3\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\22\136\1\u0d98\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1328\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\u0cda\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u0a66\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1974\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\5\136\1\u01c1\22\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u1975\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1976"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u1977"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u17df"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1978"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0de4"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0e2f"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u1979"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u197a\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u06e6\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u197b\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u197c\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u197d\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u197e\5\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u197d\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u197f\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u1980\1\u1981"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\4\136\1\u1982\3\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u1983"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u1984\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\12\136\1\u1985\15\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u1986\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u1987\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u0e52\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u1988\3\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1989\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u0eab\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0484\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u198a\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u198b\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u198c\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u198d\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u198e\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\26\136\1\u198f\1\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\23\136\1\u1990\4\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u1991\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1992\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\4\136\1\u1993\4\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u11e4\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\23\136\1\u1994\4\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1995\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u1996\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0da3\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u1997\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u1998\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u1999\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u199a\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u199b\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u199c\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u0354\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u199d\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u05f2\4\136\1\u03b2\1\u086e\1\u1631"+ "\4\136\1\u1369\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u13fe\2\136\1\u0da6\2\136\1\u0546\11\136\1\u0533\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u199e\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u199f\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u19a0\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u19a1\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\23\136\1\u199e\4\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u19a2\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u19a3\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\22\136\1\u19a4\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u19a5\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u19a6\1\u19a7\1\136\1\u19a8\1\u0812\1\136"+ "\1\u19a9\1\136\1\u19aa\10\136\1\u01d4\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u19ab\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u19ac\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u19ad\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u19ae\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u19af\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\23\136\1\u19b0\4\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\27\136\1\u19b1\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u19b2\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u14c5\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u19b3\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u19b4\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u06a9\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u19b5\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u19b6\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u19b7"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u19b8"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u1432"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u19b9"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u19ba"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1679"+ "\3\136\1\u19bb\1\136\1\u11a2\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u19bc\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u19bd\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u19bd\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u19be\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u19bf\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u19c0\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u09a8\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u19c1\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u19c2\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u0da0\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u19c3\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u19c4\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u19c5"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u19c6\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u07aa\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\27\136\1\u19c7\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u19c8\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u19c9\6\136\1\u0bb3\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u19ca\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u19cb\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u19cc\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u0ac6\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u086a\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u063e\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u106d\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u19cd\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u19ce\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u19cf\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u19d0\20\136\1\u19d1\3\136\1\u19d2\1\136\1\u184a"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u19d3\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u19d4\1\u19d5\6\136"+ "\1\u19d6\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\23\136"+ "\1\u0432\4\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u19d7\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u19d8"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u19d9"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u19da"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u19db"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u19dc\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u0b0a\5\136\1\u19dd"+ "\1\136\1\u19de\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u18d2\14\136\1\u19df\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\26\136\1\u1432\1\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u19e0\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u19e1\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u19e2\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u19e3\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\5\136\1\u19da\22\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u0a14\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\5\136\1\u19e4\22\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u129c\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u19e5\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u19e6\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u19e7\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u129c\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0aa0\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u19e8"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u19e9\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u19ea"+ "\2\136\1\u0e48\3\136\1\u19eb\10\136\1\u19ec\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\12\136\1\u19ed\15\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0b26\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u19ee\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u19ef\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u19f0\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u19f1\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u19f2\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u19f3\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u19f4\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u11bb\14\136\1\u10c7\3\136\1\u19f5\1\u19f6"+ "\1\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u19f7"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u051f"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u19f8\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u19f9\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u19fa\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u19fb\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\22\136\1\u19fc\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u19fd\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u19fe\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u19ff\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\24\136\1\u1a00\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u1a01\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\u1a02"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\12\136\1\u1a03\15\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\22\136\1\u1a04\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u065d\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1a05\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u1a06\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1a07\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u1a08\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u18cb\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1a09\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1a0a\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1a0b\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u1a0c\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u1a0d\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1a0e\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u1a0f\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u1a10\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\136\1\u1377\3\136\1\u0c90\2\136\1\u1377\10\136"+ "\1\u1a11\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136"+ "\1\u1a12\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1a13\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1a14\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1a15"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u1a16\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u1a17\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\25\136\1\u0ef3\2\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u1a18\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u1a19\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u1a1a\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u03b3\10\136\1\u1a1b\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u1a1c\5\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1a1d\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\u1a1e\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u1a1f\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u1a20\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u1a21\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u1379\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u1a22\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1a23\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u1a24\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u1a25\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u1a26\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0cf0\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u0cff\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1a27\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u07db\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\5\136\1\u08d2\22\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\25\136\1\u1a28\2\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\12\136\1\u1245\15\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u1a29\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1a2a\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u1a2b\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1a2c\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u1a2d\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u1a2e\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u1a2f\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u1a30\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1a31\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u1a32\5\136\1\u1a33\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\136\1\u1a34\26\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u1a35\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u1a36\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\27\136\1\u1a37\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u1a38\16\136\1\127\2\0\1\136\2\0\1\u1a39"+ "\12\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\26\136\1\u1a3a\1\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1a3b\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u11df\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u0fcb\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1a3c\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1a3d\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u0440\12\136\1\u1a3e\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u1a3f\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u1a40\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u1a41\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0da6\2\136\1\u1907\11\136\1\u0533"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1a42"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1a43"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1a44"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u1a45\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u1a46\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u07c8\5\136\1\u0c83"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0e42"+ "\2\136\1\u0932\1\u03b3\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\26\136\1\u0684\1\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\11\136\1\u07e7\16\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1a47\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\27\136\1\u1a48\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1a49\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u1a4a"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0a08"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\u1a4b\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u0872\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u1a4c\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1a4d\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\5\136\1\u09ff\13\136\1\u144e"+ "\4\136\1\u11c1\1\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1a4e"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u1a4f\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\23\136"+ "\1\u1a50\4\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u1a51\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136"+ "\1\u1a52\3\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1a53\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u1a54\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u1a55\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u1a56\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136"+ "\1\u1960\22\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1a57\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\25\136"+ "\1\u119e\2\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1a58\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1a59"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u1a5a\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u18ed\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u1a5b\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u1a5c\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1a5d\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u1a5e\16\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1a5f\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u0338\16\136"+ "\1\u0c33\3\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u1a60"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1a61\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u03fa\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u0334\3\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u1a62\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u1a63\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u1a64\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u1a65\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\26\136\1\u1a66\1\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u1a67\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u1a68\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u1a69\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u1a6a\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u1a6b\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u1907\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1a6c\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1a6d\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\26\136\1\u0db7\1\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u1907\16\136\1\u11dd\2\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u1071\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1a6e\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\26\136\1\u1a6f\1\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u1a70\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1a71\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\5\136\1\u1a72\22\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u1a73\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u1a74\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u1a75\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u1a76\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u07fd\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1a77\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u1a78\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\7\136\1\u1a79"+ "\1\127\10\0\6\136\1\0\10\136\1\u1a7a\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u1a7b\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1a7c\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\5\136\1\u1a7d\22\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1a7e\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u1a7f\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u1a80\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u1a81\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u1a82\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u1a83\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1a84\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1a85\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1a86\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u1a87\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1a88\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1a89\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1a8a\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\u1a8b\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1a8c\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u119f\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\5\136\1\u1a8d\22\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u0546\7\136\1\u057d\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u15a7\2\136\1\u0546\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u1a8e\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u1a8f\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\136\1\u1a90\26\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1a91\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u1a92\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u0a21\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u1a93\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u1a94\10\136\1\u1a92"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1a95"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u1a96"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1a97"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u1a98"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u1a99"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u1a9a"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0875"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1a9b"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1a9c"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u0354"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\25\136\1\u0a11"+ "\2\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1a9d"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1a9e"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u1a9f"+ "\26\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1aa0"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1aa1"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\u1aa2\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u1aa3\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u1666\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u1aa4\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1aa5\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\26\136\1\u1aa6\1\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u0440\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u1aa7\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\27\136\1\u17a1\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1aa8\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u1aa9\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u0a66\10\136\1\u0da0\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u1aaa\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u17a9\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u1aab\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1aac\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1aad\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1aae\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u1aaf\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u1ab0\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u1ab1\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u1506\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u1ab2\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u1ab3\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u1ab4\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u1ab5\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u1ab6\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136"+ "\1\u1ab7\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u03fa"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\12\136\1\u19a0"+ "\15\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1ab8"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u080b"+ "\5\136\1\u057d\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u1ab9\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u13af\14\136\1\u0844\1\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1438\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u0a66\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u1131\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u1aba\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u03f4\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u1abb\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1abc\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1abd\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\12\136\1\u1abe\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1abf\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1ac0"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u0e69"+ "\2\136\1\u15d9\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u1ac1\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u0262\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\136\1\u1ac2\26\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u03ef\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u1ac3\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\12\136\1\u1ac4\15\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1ac5\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u051e\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u022f\5\136\1\u07db\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u1ac6\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u17f1\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1ac7\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\27\136\1\u1ac8\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u1ac9\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u1aca\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u0645\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\27\136\1\u1acb\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1557\1\136\1\u1acc\10\136\1\u0864\5\136\1\u1acd"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u1ace\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u1acf\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1ad0\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u10a9\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u1ad1\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1ad2\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1ad3\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u1ad4\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u0f34\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u1ad5\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u1ad6\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1ad7\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\7\136\1\u1ad8"+ "\1\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1ad9\3\136\1\u01dc\5\136\1\u08dd\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1ada\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u1adb\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\1\u06e1\7\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1809\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\12\136\1\u1adc\15\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\11\136\1\u1029\16\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1add\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u1ade\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u1adf\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u0373\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u1ae0\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\25\136\1\u1ae1\2\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u17a4\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u1ae2\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u1ae3\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u1ae4\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136"+ "\1\u01ce\22\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u101e\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u0411\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u1ae5\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1ae6\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1ae7\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136"+ "\1\u1ae8\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1ae9\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u1aea\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\23\136"+ "\1\u1aeb\4\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u1aec\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1825\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u18e4"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1765"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u1aed\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u1aee\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u1aef\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u10f3\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\24\136\1\u1af0\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u1af1\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1af2\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\12\136\1\u0372\15\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\12\136\1\u1af3\15\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1114\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\27\136\1\u0a1b\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u1af4\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u0540\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u1af5\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\136\1\u1af6\26\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\27\136\1\u0f29\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u0334\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u1af7\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u1af8\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u1af9\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u1afa\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u1afb\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u03fa\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1afc\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\1\u022f\7\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u1afd\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\22\136\1\u1262\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1afe\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u1aff\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u1b00\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1b01\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\26\136\1\u1b02\1\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u1b03\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1b04\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u1b05\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u1b06\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1b07\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1b08\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u1b09\15\136\1\u079e\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1b0a\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1b0b\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1b0c\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u0522\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u1b0d\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\22\136\1\u1b0e\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1b0f\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u1b10\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u07b8\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u1b11\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u18d2\14\136\1\u1b0d\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\23\136\1\u1b12\4\136\1\127\2\0\1\136"+ "\2\0\1\u035f\12\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1b13\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u1b14\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u0995\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u0d42\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1b15\2\136\1\u1b16\1\136\1\u03b2"+ "\1\u035f\5\136\1\u057d\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u0da6\1\136\1\u1b17\1\u0da8\1\u1b18\10\136"+ "\1\u0533\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u1b19\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u1b1a\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136"+ "\1\u07db\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1b1b"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u1b1c"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u1b1d"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u1b1e"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u0e8f"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1b1f"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u1b20\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1b21\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1b22\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u1b23\5\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0bfe\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u1b24\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\12\136\1\u0c24\15\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u1b25\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1b26\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1b27\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u15c4\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1b28\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u1b29\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1b2a\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1b2b\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1b2c\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1b2d"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\u1b2e\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1ac5\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1b2f\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1b30\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u1b31\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1b32\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1889\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1b33\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1b34\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1b35\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u1b36\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u1b37\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u1b38\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1b39\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u1b3a\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1b3b\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\12\136"+ "\1\u1b3c\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0384\3\136\1\u0680\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u0da3\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u1b3d\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u1b3e\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u0d4d\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\24\136\1\u1b3f\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u1b40\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u1b41\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u1b42\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1b43\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u1b44\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u06b4\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u1b45\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u1b46\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1b47\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u08d2\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1b48\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u17d1\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u0d6b\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u1b49\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u1b4a\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u1b4b\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u1b4c\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u1b4d\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u015f\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1b4e\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u1b4f\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u1b50\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\12\136\1\u0cda"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u1b51\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1b52\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1b53\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u1b54\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u1b55\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1b56\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u1b57\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u10e5\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u1b58\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u17a3"+ "\22\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u1b59"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u03b3"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u0bc9"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1af6"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\25\136\1\u18ce"+ "\2\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u121d"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u1b5a\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0a72\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u057e\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u0b26\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u1b5b\22\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\23\136\1\u129c\4\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u1b5c\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1b5d\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u1b5e\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u1b5f\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\12\136\1\u1b60\15\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u1b61\20\136\1\u0882\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1b62\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1b63\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u022f\7\136\1\u1b64"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u0871"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\1\u1b65\7\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u10b5\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u05fa\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u1b66\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u1b67\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u1b68\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\12\136\1\u1b69\15\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1b6a\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\27\136\1\u1b6b\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u18ed\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u1b6c\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u18ed\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1b6d\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\27\136\1\u1b6e\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\5\136\1\u1b6f\22\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u0cda\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0b98\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u05f2\13\136\1\u057d\2\136\1\u0596\6\136"+ "\1\127\2\0\1\136\2\0\1\u0569\12\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u07db\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u1a25\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\11\136\1\u1b70\16\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\12\136\1\u1b71\15\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1b72\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u1907\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u1b73\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\25\136\1\u1b74\2\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u1b75\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1b76\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u1b77\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1b78\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1663\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u1b79\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u1b7a\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u1b7b\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u1b7c\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u0827\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1b7d\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\7\136\1\u1b7e\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u049c\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u1b7f\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\5\136\1\u1a7d\2\136\1\u0be4\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1b80\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1b81\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1b82\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u1b83\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u13c1\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u1b84\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u1b85\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u1b86\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1b87\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1b88\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u178f\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u1b89\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1b8a\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u1b8b"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1b8c"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1b8d"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1b8e\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1b8f\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u0fb3\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u1931\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\136\1\u1b90\26\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u1b91\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1b92\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u1b93\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1b94\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1114\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1b95\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\25\136\1\u036b\2\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u1b96\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u1b97\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1b98\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1b99\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u0e58\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u1b9a\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u1b9b\26\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1b9c\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\26\136"+ "\1\u10e2\1\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u10e2\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1b9d\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u1b9e\7\136\1\u17de\6\136\1\u1b9f\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0349\5\136\1\u1b9e\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1ba0\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\24\136\1\u0c9d\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1245\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1ba1\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u1ba2\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u1ba3\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1ba4\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0335\1\u1ba5\1\u0cf1\2\136"+ "\1\u10fe\1\136\1\u0dfe\7\136\1\u1ba6\5\136\1\u06f0\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u1ba7\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1ba8\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1ba9\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u1baa\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u0dc6\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u102c\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\11\136\1\u07db\16\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1bab\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u1b6e\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\11\136\1\u0cda\16\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u126e\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0a21\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\12\136\1\u03f4\15\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u0854\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u1bac\3\136\1\u1bad\1\136\1\u1bae\10\136\1\u1baf"+ "\3\136\1\u1bb0\2\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u1bb1\5\136\1\u0851\12\136\1\u10e7\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1bb2\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0"; private static final String ZZ_TRANS_PACKED_6 = "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1bb3"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u1bb4"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u046f"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1bb5"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u1bb6\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u0574\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\12\136\1\u07c0\15\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u1bb7\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\23\136\1\u1bb8\4\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u1bb9\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u1bba\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\4\136\1\u022f\3\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u07b3\3\136\1\u1ae6\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u1bbb\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u17f1\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1ad0\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u0a6c\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u0e52\3\136\1\u06ed"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1bbc"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\1\u1bbd\12\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u1bbe\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1bbf\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u1bc0\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1bc1\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u1bc2\2\136"+ "\1\u1ad9\11\136\1\u08dd\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1bc3\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\u1bc4\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0484"+ "\1\u1ad9\1\u0c90\3\136\1\u0786\7\136\1\u1bc5\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1aaf\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u128b\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u1bc6\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u0a7c\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u1bc7\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\26\136\1\u1bc8\1\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1bc9\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u07db\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u1bca\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1bcb\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u03ef\4\136\1\u1bcc\22\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1bcd\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\24\136\1\u1bce\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\22\136\1\u141c\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u08d2\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1bcf\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u19b0\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u1bd0\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u1bd1\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u1bd2\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1bd3\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u1bd4\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u1bd5\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\12\136\1\u1bd6\15\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u1bd7\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u0579\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1bd8\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1bd9\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u1bda\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u1bdb\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u1bdc\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u165a\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u1bdd\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u1bde\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u0546\13\136\1\u0dbe\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\12\136\1\u1114\15\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u1bdf\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u1be0\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u102a\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\11\136\1\u1be1\16\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\23\136\1\u1b02\4\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u1be2\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1be3\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u1be4\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u1be5\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u1be6\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u0482"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1be7\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\23\136\1\u1b12"+ "\4\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1be8"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u1be9"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1bea"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1beb"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u1bec\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0cd4\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u1bed\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1bee\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u0a16\14\136\1\u01b3"+ "\4\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u0de9"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1bef\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1bf0\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u1376\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u1bf1\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u0606\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\12\136\1\u1bf2\15\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1bf3\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1bf4\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1bf5\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\24\136\1\u1bf6\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u1245\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u1bf7\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u1369\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u1bf8\2\136\1\u1bf9\22\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u1bfa\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u1028\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1bfb\13\136"+ "\1\u1bfc\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u1bfd"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u1028\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u1bfc\5\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u1bfe\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u1bff\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\12\136\1\u1c00\15\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\24\136\1\u1c01\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u057d\7\136\1\u0567"+ "\1\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u1c02"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u1c03"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u1c04"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1c05"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u1c06"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u1c07"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1c08\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u1c09\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u121d\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u1c0a\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1c0b\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u1c0c\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1c0d\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\24\136\1\u1c0e\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1c0f\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1c10\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u1c11\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u1c12\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u1c13\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\27\136\1\u1c14\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1c15\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u1c16\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u038b\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1c17\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u1c18\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1c19\17\136\1\u1c1a\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1c1b\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\24\136\1\u1c1c\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u1c1d\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u1c1e\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1c1f\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u1c20\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u03ee\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1c21\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u1c22\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u1b6e\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\136\1\u0771\26\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u0a1d\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\u0ab2\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u1c23\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u1c24\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u0baf\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1c25\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u0888\13\136\1\u088a\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u1376\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\23\136\1\u1c26\4\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\5\136\1\u1c27\22\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1c28\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u1c29\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u0769\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u1c2a\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1c2b\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1c2c\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u1bd1\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u0632\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0388"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u1c2d"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u1c2e"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1c2f\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\1\u0b6b\12\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u1c30\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1c31\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1c32\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u0cda\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u1c33\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1c34\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u1c35\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u1c36\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1549\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1c37\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u1c38\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1c39\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u1c3a\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1c3b\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1c3c\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u1c3d\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u1c3e\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1c3f\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u1c40\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\10\136\1\u1c41\2\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136"+ "\1\u1c42\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u156f\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\2\136\1\u05ab"+ "\5\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136"+ "\1\u07d5\22\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u1c43\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u1c44\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u101e\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136"+ "\1\u1c45\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u1c46\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u1c47\2\136\1\u1c48\2\136\1\u1c49\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0df4\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\136\1\u182f\1\136\1\u1c4a\1\u1c4b"+ "\1\136\1\u10cd\1\136\1\u1c4c\10\136\1\u1c4d\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1c4e\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1c4f\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1c50\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u1c51\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u09b0\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u1c52\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u1c53\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u1c54\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\26\136\1\u1c55\1\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1c56\2\136\1\u1c57\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u01d4\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\27\136\1\u08ef\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u1c58\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u1c59\1\136\1\u1b66\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\5\136\1\u0906\1\136\1\u1c5a\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u1c5b\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1c5c\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\5\136\1\u1c5d\22\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u19db\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u1c5e\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1c5f\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u1c60\4\136\1\u11a2"+ "\16\136\1\u1c61\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u1c62\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1c63\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u1c64\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u0cf0\13\136"+ "\1\u1c65\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\12\136"+ "\1\u1838\15\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u0bce\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u1c66\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u12d0\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u15bf"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1c67\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u1c68\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u0533\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1c69\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1c6a\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u038b\3\136\1\u1c6b\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u1c6c\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1c6d\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u17d6\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\23\136\1\u1c6e\4\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\5\136\1\u1c6f\2\136\1\u15d9\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u1c70\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\1\u1c71\7\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u17f1\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u1980\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\22\136\1\u1c72\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1c73\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1c74\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\27\136\1\u1c75\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u1c76\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1c77"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1bc0\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1c78\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1c79\3\136\1\u01dc\11\136\1\u11f3\3\136\1\u13ee\1\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u1c7a\16\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\12\136\1\u1c7b\15\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u0b9b\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1c7c\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u1c7d\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\23\136\1\u07db\4\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u1c7e\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u022f\10\136\1\u1ae3"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u1c7f"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u0864"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u1c80"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u0917\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u1c81\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u18e4\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u1c82\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u05f2\2\136\1\u1c83"+ "\22\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u0a7a"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u1c84"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u1c85"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\2\136\1\u09b2\5\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\26\136\1\u19f6"+ "\1\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u1c86"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\23\136\1\u1c87"+ "\4\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u057c\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\12\136\1\u1c88\15\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u1c89\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\25\136\1\u1b02\2\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\1\136\1\u03a2\6\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\12\136\1\u1c8a\15\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1c8b\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\27\136\1\u1c8c\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1c8d\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\5\136\1\u1c8e\22\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\136\1\u1c8f\26\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u19d4\1\u1c90\6\136\1\u19d6\7\136\1\u0361\1\u01d4\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u1c91\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u1c92\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1c93\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u1c94\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u1b80\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u0b6a\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u01a9\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u108f\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u1c95\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u1c96\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1c97\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1c98\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\12\136\1\u1704\15\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u1c99\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u1c9a\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u19ea\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u1c9b\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u1c9c\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1c9d"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u1c9e\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u1c9f\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u1ca0\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u1ca1\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u1ca2\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u1ca3\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1a02\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u1ca4\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1ca5\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1ca6\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136"+ "\1\u1ca7\3\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u1ca8\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u1ca9\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u1caa\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1cab\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u0762\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1cac"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1cad"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1cae"+ "\2\136\1\u1caf\12\136\1\u1cb0\1\u1cb1\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1cb2\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1cb3\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u119e\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u1cb4\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1cb5\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\136\1\u12e1\26\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u1cb6\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u1cb7\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1cb8\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u1cb9\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\22\136\1\u1cba\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\u1cbb\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u1cbc\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u1cbd\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u1cbe\6\136\1\u075e\1\u0772\16\136\1\127\2\0\1\u1cbf"+ "\2\0\1\u08cf\12\136\1\0\4\136\1\u0a38\3\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u1cc0\16\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\26\136\1\u1cc1\1\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1cc2\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u1cc3\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0579\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u1cc4\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1cc5\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u17e7\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u1cc6\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u1cc7\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u1cc8\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u1a74\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1cc9\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u1cca\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\136\1\u1ccb\26\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\1\u1ccc"+ "\12\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u0a0f\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u1ccd\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u1cce\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u1ccf\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u1cd0\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u1cd1\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1cd2\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u1cd3\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u174f\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\23\136\1\u1cd4\4\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1cd5\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u1cd6\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u1cd7\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1cd8\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u1cd9\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u1cda\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u1cdb\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u17a4\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\4\136\1\u022f\4\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u1cdc\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1cdd\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u1cde\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u101e\16\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u1cdf\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1ce0\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\11\136\1\u0d10\16\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u1ce1\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1ce2\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u1ce3\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1ce4\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u1ce5\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u1ce6\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\136\1\u1ce7\6\136\1\u1ce8"+ "\10\136\1\u0c93\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u1ce9\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u1cea\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1ceb\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u1cec\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\25\136\1\u1ced\2\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1cee\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u119f\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\u1cef\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1cf0\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\25\136\1\u1cf1\2\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u1346\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u1cf2\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1cf3\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u036c\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u1cf4\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1cf5\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u1cf6\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0606\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u1cf7\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1cf8\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\5\136\1\u13a2\3\136\1\u03b2\15\136\1\u1276\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\5\136\1\u13a2\3\136\1\u03b2"+ "\10\136\1\u07bf\4\136\1\u1276\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\u1cf9\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u0bc9\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0364\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u125e\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0d4b\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\23\136"+ "\1\u1cfa\4\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u1cfb\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u1cfc\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u1274\10\136\1\u10dc\1\u0d98\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1cfd\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u1cfe\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u1cff\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\23\136\1\u1d00"+ "\4\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\1\u1d01\12\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u1d02\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\7\136\1\u1d03\20\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\26\136\1\u1d04\1\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1c79\15\136\1\u11f3"+ "\5\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1d05"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u145f"+ "\11\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u1d06"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1d07"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1d08"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u1d09"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u1d0a\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u0d09\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\26\136\1\u1d0b\1\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u1d0c\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\136\1\u1d0d\26\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u1d0e\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u1bd5\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1d0f\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u1d10\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u1d11\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1d12\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u056e\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1d13\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u0b0a\3\136\1\u0384\15\136\1\u1d14\5\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u1d15\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u19d0\5\136\1\u1d16"+ "\1\136\1\u1d17\13\136\1\u1d18\1\u19d2\1\136\1\u184a\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1d19\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u1d1a\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1d1b\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1d1c\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u0861\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u1bac\1\u1d1d\1\u0384\1\136"+ "\1\u0e6c\1\136\1\u0680\10\136\1\u1d1e\1\u1d1f\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1d20\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\136\1\u1d21\26\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0e0f\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u0b0a\1\u1d22\1\136\1\u1d23"+ "\4\136\1\u1d24\1\u0851\16\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u1d25\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\12\136\1\u1d26\15\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u1a96\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1d27"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u1d28\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u0787\4\136\1\u047e\13\136\1\u1d29\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u1d2a\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u1d2b\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1d2c\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1d2d\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u1d2e\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u1d2f\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1d30\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1d31\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u1d32\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1d33\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u1d34\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u1d35\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u1d36\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1d37\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1d38\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1d39\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1d3a\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136"+ "\1\u1d3b\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u0e42\2\136\1\u1b3e\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u0d03\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u1d3c\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\26\136\1\u1d3d\1\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1d3e\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1d3f\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u17e7\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u1d40\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1777"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1d41\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1d42\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0b22\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136"+ "\1\u171c\3\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136"+ "\1\u1d43\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u01c1"+ "\21\136\1\u1d44\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u0582\15\136\1\u0582\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u1d45\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1c1f\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u1cc1\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u1d46\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1d47\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1d48\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u1d49\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u1ae2\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u0426\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1d4a\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1d4b\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u1d4c\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u119e\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u1d4d\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\25\136\1\u1d4e\2\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u1d4f\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u022f\7\136\1\u0792\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\24\136\1\u1d50\3\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u1d51\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u1d52\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u0e32\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u11e7\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\23\136\1\u1d53\4\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1d54\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1d55"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u1d56\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1d57\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u12c9\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136"+ "\1\u1d58\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u0d61\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u1d59"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\1\u1d5a\12\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u1a90\22\136"+ "\1\u0e0d\3\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0d10\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u1d5b\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u1d5c\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u05fa\12\136\1\u1d5d\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u0684\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u1d5e\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1d5f\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1d60\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u1d61\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1d62\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1d63"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1d64\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1d65"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1d66"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u10c8"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u1d67"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u0eda"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\1\u1d68\7\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u10e2\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\24\136\1\u1d69\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u0440\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\5\136\1\u1d6a\22\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u1d6b\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\1\u032f\12\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u0d5f\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u1160\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u17dc\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u1d6c\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1d6d\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1d6e\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1d6f\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1d70\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u1d71\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u1d72\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1d73\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u1d74\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u1d75\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\23\136\1\u0ed1\4\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1d76\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u0917\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u141c\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\136\1\u1d77\26\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u1d78\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u1d79\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u1d7a\2\136\1\u047e\12\136\1\u10f5\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1d7b\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1d7c\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1d7d\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u1114\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u085a\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u1d7e\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u1d7f\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u1d80\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u1d81\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u1a21\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1d82\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u1d83\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u1d84\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1d85\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u1d86\1\u0872\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1d87\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u1d88\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1d89\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1d8a\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u10a9\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1d8b\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u1d8c\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u1d8d\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1d8e\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u1c9b\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1d8f\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u1d90\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u1d91\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1d92\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\21\136\1\u1d93\6\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1d94\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\22\136\1\u1d95\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u0a7c\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u1d96\11\136\1\u1d97\5\136\1\u1d98"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u1d99\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\10\136\1\u1d9a\17\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1d9b\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u1d9c\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1d9d\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1d9e\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1bcf\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\1\u18a2\7\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\136\1\u1d9f\26\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u1da0\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\12\136\1\u1da1\15\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u1da2\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\24\136\1\u1da3\3\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u1da4\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u1da5\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u1da6\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1da7\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\1\136"+ "\1\u1da8\6\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u0684\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u14d5\3\136\1\u1da9\15\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1daa\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1dab\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u0d94\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u1dac\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\136\1\u1dad\1\136\1\u1bde\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u1dae\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u0495\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1daf\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u1ccc\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1db0\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u1db1\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1db2\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u1db3"+ "\3\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u1db4"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1db5"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u0783\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u1db6\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u0da0\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u0fe8\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1db7\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\26\136\1\u1db8\1\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u1db9\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\22\136\1\u112e\5\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u1dba\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1dbb\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1dbc\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u177e\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\136\1\u1a90\6\136\1\u0cdc"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\12\136\1\u0c0a"+ "\7\136\1\u1dbd\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1dbe\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1dbf\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u129c\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u0a21\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u1dc0"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1dc1\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u1dc2\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\22\136\1\u1a25\5\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u1dc3\20\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1dc4\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u03fa\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u1dc5\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u0d41\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u0f34\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1dc6\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\11\136\1\u1dc7\16\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1dc8\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\25\136\1\u1dc9\2\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\136\1\u0ab2\26\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1d0d\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u1dca\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\136\1\u0782\26\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1dcb\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\u03bf\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u1dcc\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u1dcd\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u1dce\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\136\1\u1dcf\26\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\11\136\1\u1dd0\16\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u1dd1\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u1dd2\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1dd3"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136"+ "\1\u0cd4\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u1dd4\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1dd5\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u044f\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1dd6\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\12\136"+ "\1\u07db\15\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1dd7\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u0850\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1dd8\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u1dd9\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1dda"+ "\27\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u1ddb"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u1ddc"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1ddd\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u1290\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u1dde\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1ddf\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u1de0\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u1de1\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u1de2\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\23\136\1\u1de3\4\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1de4\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u1de5\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1de6\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\136\1\u1de7\26\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\22\136\1\u1de8\5\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1de9\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u1dea\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1deb"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u1dec\7\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u07db\3\136\1\u0dcf\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u07c2\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u1ded\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u1dee\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1def\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u1df0\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\11\136\1\u0942\16\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\1\u06ed\12\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1df1\3\136\1\u0d54\15\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u1df2\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\5\136\1\u1df3\22\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u07bf\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u1bd1\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1df4\6\136\1\u1df5\15\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\24\136\1\u1df6\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u1cd3\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\27\136\1\u1df7\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\27\136\1\u0ed7\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\10\136\1\u1df8\17\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1df9\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1cd8\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\6\136\1\u0b05\21\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\7\136\1\u1dfa\20\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u07e0\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1dfb\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1dfc\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u0fb2\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u0cda\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1dfd"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136"+ "\1\u1dfe\21\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136"+ "\1\u1dff\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u1e00\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\23\136"+ "\1\u1e01\4\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1e02\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u0f34\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\u1e03"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u1e04\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1e05\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u1e06\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136"+ "\1\u1e07\16\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u1e08\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u057d\3\136\1\u1e09\1\136\1\u0e0d\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\12\136\1\u1e0a\15\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\12\136\1\u1e0b\15\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\25\136\1\u1e0c\2\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u1e0d\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u1e0e\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1e0f\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u1e10\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u1e11\1\136\1\u1d17\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\u1e12\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1e13\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1e14\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1d23\5\136\1\u0851\16\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u1e15\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\6\136\1\u1e16\21\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\24\136\1\u1e17\3\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1e18\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u1e19\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u1c60\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u1e1a\1\u1e1b\1\u1e1c\1\u1e1d\4\136"+ "\1\u1e1b\1\136\1\u1e1e\15\136\1\127\2\0\1\u1e1f\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1e20\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u1e21\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u1e22\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u1e23\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u1e24\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u1e25\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\16\136\1\u1e26\11\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1e27\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1e28\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u1e29\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u1e2a\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u1e2b\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136"+ "\1\u1e2c\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1e2d"+ "\3\136\1\u1032\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u1e2e\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u1ae6\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1e2f\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u1e30\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\22\136\1\u1e31\5\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1e32\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1e33\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1e34\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1931\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\23\136\1\u1e35\4\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u1e36\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u1e37\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1e38\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136"+ "\1\u062a\1\136\1\u1dbd\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\11\136\1\u1715\6\136\1\u0c3e\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\11\136\1\u1715\16\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u1bab\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0338\16\136\1\u1e39\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1e3a\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u1983\1\u1980"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u123a"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\27\136\1\u1e3b"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\1\u1e3c\27\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1e3d\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\11\136\1\u1e3e\16\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u1e3f\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1e40\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1e41\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1e42\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u108f\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1e43\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1e44\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u1e45\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u1114\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\12\136\1\u0a72\15\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u1e46\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1e47\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\136\1\u1d4d\26\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u1e48\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u1bab\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u0a21\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1e49\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u1bfc\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u06a8\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u1e4a\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1e4b\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u1e4c\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1e4d\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u1e4e\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u1e4f\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u080e\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1e50\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u1e51\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1e52"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1e53"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u1e54"+ "\6\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1e55"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1e56\27\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\21\136\1\u1e57\6\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1e58\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1e59\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u1e5a\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u1e5b\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\20\136\1\u1e5c\7\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1e5d\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u0543\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u1e5e\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u0a8d\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\21\136\1\u0ab2\6\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u1e5f\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u1e60\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1e61\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u1e62\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u1e63\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1e64\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u0841\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\12\136\1\u14cd\15\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\7\136\1\u0fb3\20\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\26\136\1\u0357\1\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u1385\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1e65\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1a3e\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1e66\24\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\5\136\1\u10fe\22\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1e67\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u1e68\15\136\1\u05aa\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u1e69\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\3\136\1\u1e6a\24\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\136\1\u1e6b\26\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1e6c\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u1e6d\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u1e6e\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\11\136\1\u1e6f\16\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\2\136\1\u1e70\25\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u1e71\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\136\1\u1e72\22\136\1\u1e73\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u1e74\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u1e75\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1e76\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\24\136\1\u1e77\3\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1b4e\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u1e78\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1d36\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u1e79\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u1e7a\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u119f\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1e7b\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1e7c\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1e7d\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\22\136"+ "\1\u1e7e\5\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u1d3e\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136"+ "\1\u057e\17\136\1\u1e7f\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u1e80\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\22\136\1\u1e81\5\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\3\136\1\u1e82\3\136\1\u045a\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u1a72\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\u1e83\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u1e84\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u1e85\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\u05ce\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1e86"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136\1\u1e87"+ "\20\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1e88"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1e89"+ "\25\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u1e8a"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u0c55"+ "\3\136\1\u1e8b\1\u1e8c\1\u1e8d\3\136\1\127\2\0\1\136"+ "\2\0\1\u1e8e\12\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\3\136\1\u1e8f\24\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u1e90\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u1e91\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\10\136\1\u1e92\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\16\136\1\u1e93\11\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\1\u1e94\27\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u1e95\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\10\136"+ "\1\u1e96\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u1e97\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u1e98\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\16\136\1\u1e50\11\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u1e99\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u1e9a\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u1e9b\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\6\136\1\u119f\21\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u1e9c\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u1e9d\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1e9e\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u1b12\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1e9f"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\7\136"+ "\1\u1ea0\20\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136"+ "\1\u1ea1\23\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u1e32\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u1ea2\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\26\136"+ "\1\u1ea3\1\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1ea4\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\1\136\1\u1ea5"+ "\26\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\12\136\1\u1ea6"+ "\15\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1ea7"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u1ea8\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1ea9\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1eaa\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u1eab\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1eac\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1ead\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u06f0\21\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1eae\24\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u13af\16\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u1eaf\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u1eb0\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\26\136\1\u1eb1\1\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1eb2\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u1eb3\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u18e2\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\30\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\23\136\1\u1d36\4\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\23\136\1\u1eb4\4\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u1eb5\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u1eb6\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\20\136\1\u1eb7\7\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u1eb8\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\21\136\1\u1eb9\6\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\4\136\1\u1eba\23\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\136\1\u1ebb\26\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\23\136\1\u1ebc\4\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\6\136\1\u1ebd\21\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\5\136\1\u0338\14\136\1\u0da0\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u1ebe\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\24\136\1\u1e0f\3\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\22\136\1\u1ebf\5\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\25\136\1\u19d2\1\136\1\u184a\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u194a\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u1ec0\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u1ec1\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1ec2\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\6\136\1\u1ec3\21\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u1ec4\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\5\136\1\u1ec5\22\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u1ec6\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\4\136\1\u1e70\23\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\u1ec7\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\27\136\1\u1ec8\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1ec9"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u1eca\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1ecb"+ "\23\136\1\u1da3\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u1ecc\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u1ecd\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\12\136\1\u0cd4\15\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u1ece\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1ecf\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u112e\16\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u17fd\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u1ed0\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1ed1"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u194a\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1ed2\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\25\136"+ "\1\u194a\2\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\24\136"+ "\1\u1503\3\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1ed3\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u1ed4"+ "\7\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1ed5"+ "\23\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u1ed6"+ "\17\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\6\136\1\u1ed7"+ "\21\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136\1\u1ed8"+ "\24\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\u1ed9\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\16\136\1\u1eda\11\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\11\136\1\u1edb\16\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\3\136\1\u1edc\24\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1edd\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\u053b\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\1\u1ede\27\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\25\136\1\u1edf\2\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\12\136\1\u1ee0\15\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\10\136\1\u1ee1\17\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u1ee2\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\3\136\1\u1ee3\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u1ee4\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u1ee5\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1ee6\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\21\136\1\u1329\6\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u1ee7\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1ee8\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u062a\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\1\u1ee9"+ "\2\136\1\u0f7d\24\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u1eea\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\4\136\1\u1eeb\23\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\7\136\1\u1eec\20\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\2\136\1\u1eed\25\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\24\136\1\u1eee\3\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\10\136\1\u1eef"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\30\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\2\136"+ "\1\u1ef0\25\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\25\136"+ "\1\u1ef1\2\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\5\136"+ "\1\u119f\22\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\3\136"+ "\1\u1ef2\24\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\21\136"+ "\1\u1ef3\6\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\16\136"+ "\1\u1ef4\11\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\12\136"+ "\1\u1ef5\15\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\23\136"+ "\1\u1ef6\4\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\23\136"+ "\1\u1ef7\4\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\23\136"+ "\1\u1ef8\4\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1ef9\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u1efa"+ "\16\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u1efb\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1efc\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\20\136\1\u1efd\7\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\2\136\1\u1efe\25\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\10\136\1\u1eff\17\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\24\136\1\u1f00\3\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\10\136\1\u1f01\1\0\1\136\1\0"+ "\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\10\136\1\u1f02\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\7\136\1\u1f03\20\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\2\136\1\u1f04\25\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\12\136\1\u1f05\15\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u1f06\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u14f7\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\10\136\1\u1f07\17\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\1\u1f08\27\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\2\136\1\u0fb7\25\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\10\136\1\u119d\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\30\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\10\136\1\u1f09\17\136\1\127\2\0\1\136\2\0"+ "\13\136\1\0\10\136\1\127\10\0\6\136\1\0\11\136"+ "\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136"+ "\14\0\24\136\1\u12be\3\136\1\127\2\0\1\136\2\0"+ "\1\u12be\12\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\4\136\1\u1f0a\23\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\20\136\1\u1f0b\7\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\11\136\1\u1f0c\16\136\1\127\2\0\1\136"+ "\2\0\13\136\1\0\10\136\1\127\10\0\6\136\1\0"+ "\11\136\1\0\1\u1f0d\1\0\1\127\1\u0146\1\136\1\0"+ "\2\136\14\0\30\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\11\136\1\u1f0e\16\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\20\136\1\u1f0f\7\136\1\127\2\0\1\136\2\0\13\136"+ "\1\0\10\136\1\127\10\0\6\136\1\0\11\136\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\1\u1f10\27\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\10\136"+ "\1\u1f11\17\136\1\127\2\0\1\136\2\0\13\136\1\0"+ "\10\136\1\127\10\0\6\136\1\0\10\136\1\u1f12\1\0"+ "\1\136\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0"+ "\30\136\1\127\2\0\1\136\2\0\13\136\1\0\10\136"+ "\1\127\10\0\6\136\1\0\10\136\1\u1f13\1\0\1\136"+ "\1\0\1\127\1\u0146\1\136\1\0\2\136\14\0\30\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\11\136\1\u0c83\16\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\4\136\1\u1f14\23\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\16\136\1\u0e4e\11\136"+ "\1\127\2\0\1\136\2\0\13\136\1\0\10\136\1\127"+ "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ "\1\u0146\1\136\1\0\2\136\14\0\30\136\1\127\2\0"+ "\1\136\2\0\12\136\1\u0ab2\1\0\10\136\1\127\10\0"; private static final String ZZ_TRANS_PACKED_7 = "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\12\136\1\u1f15\15\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\u1cdb\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\22\136\1\u0da0\5\136\1\127"+ "\2\0\1\u03bf\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\5\136\1\u09ff\22\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\21\136\1\u1f16\6\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\4\136\1\u057e\23\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\2\136\1\u1f17\25\136\1\127"+ "\2\0\1\136\2\0\13\136\1\0\10\136\1\127\10\0"+ "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146"+ "\1\136\1\0\2\136\14\0\1\u1f18\27\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\20\136\1\u1f19\7\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136\1\127\10\0\6\136"+ "\1\0\11\136\1\0\1\136\1\0\1\127\1\u0146\1\136"+ "\1\0\2\136\14\0\16\136\1\u1f1a\11\136\1\127\2\0"+ "\1\136\2\0\13\136\1\0\10\136"; private static int [] zzUnpackTrans() { int [] result = new int[746112]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); offset = zzUnpackTrans(ZZ_TRANS_PACKED_1, offset, result); offset = zzUnpackTrans(ZZ_TRANS_PACKED_2, offset, result); offset = zzUnpackTrans(ZZ_TRANS_PACKED_3, offset, result); offset = zzUnpackTrans(ZZ_TRANS_PACKED_4, offset, result); offset = zzUnpackTrans(ZZ_TRANS_PACKED_5, offset, result); offset = zzUnpackTrans(ZZ_TRANS_PACKED_6, offset, result); offset = zzUnpackTrans(ZZ_TRANS_PACKED_7, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\5\0\2\1\1\0\2\1\1\0\2\1\13\0\1\1"+ "\3\0\2\1\1\11\4\1\1\11\5\1\2\11\3\1"+ "\1\11\1\1\3\11\1\1\1\11\26\1\1\11\1\1"+ "\1\11\1\1\7\11\1\1\1\11\2\1\2\11\10\1"+ "\1\11\3\1\1\11\21\1\1\11\2\1\1\11\2\1"+ "\1\11\1\1\1\11\1\1\1\11\2\1\1\11\6\1"+ "\1\11\4\1\1\11\1\1\1\11\40\1\1\11\5\1"+ "\1\11\2\1\2\11\3\1\1\11\1\1\3\11\1\1"+ "\1\11\5\1\4\11\4\1\4\11\1\1\1\11\6\1"+ "\7\11\6\1\1\11\5\0\105\1\1\11\2\0\1\1"+ "\1\0\1\11\1\0\76\1\1\11\3\1\1\0\1\11"+ "\11\0\13\1\1\11\307\1\2\11\1\1\1\11\1\0"+ "\1\11\1\1\15\0\1\1\1\11\5\0\1\1\1\0"+ "\1\11\3\1\2\0\1\11\4\0\101\1\3\0\1\1"+ "\1\0\3\1\1\0\67\1\16\0\u0185\1\25\0\2\1"+ "\1\11\3\0\45\1\3\0\1\11\43\1\2\0\1\11"+ "\4\0\1\1\3\0\u01fb\1\17\0\1\11\4\0\2\1"+ "\1\11\2\0\25\1\1\11\1\0\1\11\25\1\2\11"+ "\6\0\u0278\1\16\0\14\1\1\0\14\1\2\0\u02b3\1"+ "\12\0\4\1\1\0\6\1\2\0\u02d6\1\6\0\1\1"+ "\1\0\2\1\2\0\u02a1\1\1\11\4\0\1\1\1\11"+ "\1\1\2\11\u0267\1\3\0\u021c\1\3\0\1\11\u083e\1"; private static int [] zzUnpackAttribute() { int [] result = new int[7962]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Type specific to PHPTokenMaker denoting a line ending with an unclosed * double-quote attribute. */ private static final int INTERNAL_ATTR_DOUBLE = -1; /** * Type specific to PHPTokenMaker denoting a line ending with an unclosed * single-quote attribute. */ private static final int INTERNAL_ATTR_SINGLE = -2; /** * Token type specific to PHPTokenMaker; this signals that the user has * ended a line with an unclosed HTML tag; thus a new line is beginning * still inside of the tag. */ private static final int INTERNAL_INTAG = -3; /** * Token type specific to PHPTokenMaker; this signals that the user has * ended a line with an unclosed <script> tag. */ private static final int INTERNAL_INTAG_SCRIPT = -4; /** * Token type specifying we're in a double-qouted attribute in a * script tag. */ private static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -5; /** * Token type specifying we're in a single-qouted attribute in a * script tag. */ private static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -6; /** * Token type specifying that the user has * ended a line with an unclosed <style> tag. */ private static final int INTERNAL_INTAG_STYLE = -7; /** * Token type specifying we're in a double-qouted attribute in a * style tag. */ private static final int INTERNAL_ATTR_DOUBLE_QUOTE_STYLE = -8; /** * Token type specifying we're in a single-qouted attribute in a * style tag. */ private static final int INTERNAL_ATTR_SINGLE_QUOTE_STYLE = -9; /** * Token type specifying we're in JavaScript. */ private static final int INTERNAL_IN_JS = -10; /** * Token type specifying we're in a JavaScript multiline comment. */ private static final int INTERNAL_IN_JS_MLC = -11; /** * Token type specifying we're in an invalid multi-line JS string. */ private static final int INTERNAL_IN_JS_STRING_INVALID = -12; /** * Token type specifying we're in a valid multi-line JS string. */ private static final int INTERNAL_IN_JS_STRING_VALID = -13; /** * Token type specifying we're in an invalid multi-line JS single-quoted string. */ private static final int INTERNAL_IN_JS_CHAR_INVALID = -14; /** * Token type specifying we're in a valid multi-line JS single-quoted string. */ private static final int INTERNAL_IN_JS_CHAR_VALID = -15; /** * Internal type denoting a line ending in CSS. */ private static final int INTERNAL_CSS = -16; /** * Internal type denoting a line ending in a CSS property. */ private static final int INTERNAL_CSS_PROPERTY = -17; /** * Internal type denoting a line ending in a CSS property value. */ private static final int INTERNAL_CSS_VALUE = -18; /** * Internal type denoting line ending in a CSS double-quote string. * The state to return to is embedded in the actual end token type. */ private static final int INTERNAL_CSS_STRING = -(1<<11); /** * Internal type denoting line ending in a CSS single-quote string. * The state to return to is embedded in the actual end token type. */ private static final int INTERNAL_CSS_CHAR = -(2<<11); /** * Internal type denoting line ending in a CSS multi-line comment. * The state to return to is embedded in the actual end token type. */ private static final int INTERNAL_CSS_MLC = -(3<<11); /** * Token type specifying we're in PHP. This particular field is public so * that we can hack and key off of it for code completion. */ public static final int INTERNAL_IN_PHP = -(4<<11); /** * Token type specifying we're in a PHP multiline comment. */ private static final int INTERNAL_IN_PHP_MLC = -(5<<11); /** * Token type specifying we're in a PHP multiline string. */ private static final int INTERNAL_IN_PHP_STRING = -(6<<11); /** * Token type specifying we're in a PHP multiline char. */ private static final int INTERNAL_IN_PHP_CHAR = -(7<<11); /** * The state previous CSS-related state we were in before going into a CSS * string, multi-line comment, etc. */ private int cssPrevState; /** * Whether closing markup tags are automatically completed for PHP. */ private static boolean completeCloseTags; /** * The state PHP was started in (YYINITIAL, INTERNAL_IN_JS, etc.). */ private int phpInState; /** * The language index we were in when PHP was started. */ private int phpInLangIndex; /** * When in the JS_STRING state, whether the current string is valid. */ private boolean validJSString; /** * Language state set on HTML tokens. Must be 0. */ private static final int LANG_INDEX_DEFAULT = 0; /** * Language state set on JavaScript tokens. */ private static final int LANG_INDEX_JS = 1; /** * Language state set on CSS tokens. */ private static final int LANG_INDEX_CSS = 2; /** * Language state set on PHP. */ private static final int LANG_INDEX_PHP = 3; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public PHPTokenMaker() { super(); } /** * Adds the token specified to the current linked list of tokens as an * "end token;" that is, at zzMarkedPos. * * @param tokenType The token's type. */ private void addEndToken(int tokenType) { addToken(zzMarkedPos,zzMarkedPos, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds an end token that encodes the information necessary to return * to the pre-PHP state and language index. * * @param endTokenState The PHP-related end-token state. */ private void addPhpEndToken(int endTokenState) { addEndToken(endTokenState - phpInState - (phpInLangIndex<<16)); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override protected OccurrenceMarker createOccurrenceMarker() { return new HtmlOccurrenceMarker(); } /** * Sets whether markup close tags should be completed. You might not want * this to be the case, since some tags in standard HTML aren't usually * closed. * * @return Whether closing markup tags are completed. * @see #setCompleteCloseTags(boolean) */ @Override public boolean getCompleteCloseTags() { return completeCloseTags; } @Override public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { return languageIndex==LANG_INDEX_CSS || languageIndex==LANG_INDEX_JS || languageIndex==LANG_INDEX_PHP; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { switch (languageIndex) { case LANG_INDEX_JS: case LANG_INDEX_PHP: return new String[] { "//", null }; case LANG_INDEX_CSS: return new String[] { "/*", "*/" }; default: return new String[] { "" }; } } /** * {@inheritDoc} */ @Override public boolean getMarkOccurrencesOfTokenType(int type) { return type==Token.FUNCTION || type==Token.VARIABLE || type==Token.MARKUP_TAG_NAME; } /** * Overridden to handle newlines in JS and CSS differently than those in * markup. */ @Override public boolean getShouldIndentNextLineAfter(Token token) { int languageIndex = token==null ? 0 : token.getLanguageIndex(); if (getCurlyBracesDenoteCodeBlocks(languageIndex)) { if (token!=null && token.length()==1) { char ch = token.charAt(0); return ch=='{' || ch=='('; } } return false; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; phpInState = YYINITIAL; // Shouldn't be necessary cssPrevState = CSS; // Shouldn't be necessary int languageIndex = LANG_INDEX_DEFAULT; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.MARKUP_COMMENT: state = COMMENT; break; case Token.VARIABLE: state = DTD; break; case INTERNAL_INTAG: state = INTAG; break; case INTERNAL_INTAG_SCRIPT: state = INTAG_SCRIPT; break; case INTERNAL_INTAG_STYLE: state = INTAG_STYLE; break; case INTERNAL_ATTR_DOUBLE: state = INATTR_DOUBLE; break; case INTERNAL_ATTR_SINGLE: state = INATTR_SINGLE; break; case INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT: state = INATTR_DOUBLE_SCRIPT; break; case INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT: state = INATTR_SINGLE_SCRIPT; break; case INTERNAL_ATTR_DOUBLE_QUOTE_STYLE: state = INATTR_DOUBLE_STYLE; break; case INTERNAL_ATTR_SINGLE_QUOTE_STYLE: state = INATTR_SINGLE_STYLE; break; case INTERNAL_IN_JS: state = JAVASCRIPT; languageIndex = LANG_INDEX_JS; break; case INTERNAL_IN_JS_MLC: state = JS_MLC; languageIndex = LANG_INDEX_JS; break; case INTERNAL_IN_JS_STRING_INVALID: state = JS_STRING; languageIndex = LANG_INDEX_JS; validJSString = false; break; case INTERNAL_IN_JS_STRING_VALID: state = JS_STRING; languageIndex = LANG_INDEX_JS; validJSString = true; break; case INTERNAL_IN_JS_CHAR_INVALID: state = JS_CHAR; languageIndex = LANG_INDEX_JS; validJSString = false; break; case INTERNAL_IN_JS_CHAR_VALID: state = JS_CHAR; languageIndex = LANG_INDEX_JS; validJSString = true; break; case INTERNAL_CSS: state = CSS; languageIndex = LANG_INDEX_CSS; break; case INTERNAL_CSS_PROPERTY: state = CSS_PROPERTY; languageIndex = LANG_INDEX_CSS; break; case INTERNAL_CSS_VALUE: state = CSS_VALUE; languageIndex = LANG_INDEX_CSS; break; default: if (initialTokenType<-1024) { // INTERNAL_IN_PHPxxx - phpInState int main = -(-initialTokenType & 0x0000ff00); switch (main) { default: // Should never happen case INTERNAL_IN_PHP: state = PHP; languageIndex = LANG_INDEX_PHP; phpInState = -initialTokenType&0xff; phpInLangIndex = (-initialTokenType&0x00ff0000)>>16; break; case INTERNAL_IN_PHP_MLC: state = PHP_MLC; languageIndex = LANG_INDEX_PHP; phpInState = -initialTokenType&0xff; phpInLangIndex = (-initialTokenType&0x00ff0000)>>16; break; case INTERNAL_IN_PHP_STRING: state = PHP_STRING; languageIndex = LANG_INDEX_PHP; phpInState = -initialTokenType&0xff; phpInLangIndex = (-initialTokenType&0x00ff0000)>>16; break; case INTERNAL_IN_PHP_CHAR: state = PHP_CHAR; languageIndex = LANG_INDEX_PHP; phpInState = -initialTokenType&0xff; phpInLangIndex = (-initialTokenType&0x00ff0000)>>16; break; case INTERNAL_CSS_STRING: state = CSS_STRING; languageIndex = LANG_INDEX_CSS; cssPrevState = -initialTokenType&0xff; break; case INTERNAL_CSS_CHAR: state = CSS_CHAR_LITERAL; languageIndex = LANG_INDEX_CSS; cssPrevState = -initialTokenType&0xff; break; case INTERNAL_CSS_MLC: state = CSS_C_STYLE_COMMENT; languageIndex = LANG_INDEX_CSS; cssPrevState = -initialTokenType&0xff; break; } } else { state = YYINITIAL; } break; } setLanguageIndex(languageIndex); start = text.offset; s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Sets whether markup close tags should be completed. You might not want * this to be the case, since some tags in standard HTML aren't usually * closed. * * @param complete Whether closing markup tags are completed. * @see #getCompleteCloseTags() */ public static void setCompleteCloseTags(boolean complete) { completeCloseTags = complete; } /** * Overridden to remember the language index we're leaving. */ @Override protected void yybegin(int state, int languageIndex) { phpInLangIndex = getLanguageIndex(); yybegin(state); setLanguageIndex(languageIndex); } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public PHPTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public PHPTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 206) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 99: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } case 122: break; case 65: { addToken(Token.OPERATOR); yybegin(CSS_VALUE); } case 123: break; case 84: { addToken(Token.ERROR_NUMBER_FORMAT); } case 124: break; case 73: { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; } case 125: break; case 23: { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_SCRIPT); } case 126: break; case 9: { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.MARKUP_DTD); } case 127: break; case 60: { addToken(Token.SEPARATOR); yybegin(CSS_PROPERTY); } case 128: break; case 4: { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(INTAG); } case 129: break; case 114: { addToken(Token.RESERVED_WORD_2); } case 130: break; case 102: { addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(cssPrevState); } case 131: break; case 100: { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } case 132: break; case 36: { /* Line ending in '\' => continue to next line. */ if (validJSString) { addToken(start,zzStartRead, Token.LITERAL_CHAR); addEndToken(INTERNAL_IN_JS_CHAR_VALID); } else { addToken(start,zzStartRead, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS_CHAR_INVALID); } return firstToken; } case 133: break; case 5: { addToken(Token.WHITESPACE); } case 134: break; case 116: { addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-6,zzMarkedPos-1, Token.MARKUP_TAG_NAME); start = zzMarkedPos; yybegin(INTAG_SCRIPT); } case 135: break; case 101: { addToken(Token.REGEX); } case 136: break; case 41: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } case 137: break; case 120: { int temp = zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); yybegin(YYINITIAL, LANG_INDEX_DEFAULT); addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } case 138: break; case 96: { addToken(Token.FUNCTION); } case 139: break; case 38: { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } case 140: break; case 56: { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } case 141: break; case 25: { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_STYLE); } case 142: break; case 88: { /* Skip all escaped chars. */ } case 143: break; case 81: { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } case 144: break; case 28: { yybegin(INTAG_STYLE); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } case 145: break; case 111: { if(JavaScriptTokenMaker.isJavaScriptCompatible("1.6")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } case 146: break; case 106: { if(JavaScriptTokenMaker.isJavaScriptCompatible("1.7")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } case 147: break; case 44: { start = zzMarkedPos-1; yybegin(PHP_STRING); } case 148: break; case 66: { /*System.out.println("css_value: " + yytext());*/ addToken(Token.IDENTIFIER); } case 149: break; case 91: { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE); validJSString = true; addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } case 150: break; case 16: { /* A non-recognized HTML tag name */ yypushback(yylength()); yybegin(INTAG); } case 151: break; case 26: { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(CSS, LANG_INDEX_CSS); } case 152: break; case 74: { addToken(start,zzStartRead, Token.LITERAL_CHAR); yybegin(cssPrevState); } case 153: break; case 87: { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR); validJSString = true; addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } case 154: break; case 79: { addToken(Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } case 155: break; case 27: { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_STYLE); } case 156: break; case 19: { /* Allowing "start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } case 181: break; case 113: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } case 182: break; case 93: { start = zzMarkedPos-2; yybegin(PHP_MLC); } case 183: break; case 52: { /* Skip escaped single quotes only, but this should still work. */ } case 184: break; case 64: { addToken(Token.SEPARATOR); yybegin(CSS); } case 185: break; case 119: { yybegin(YYINITIAL); int temp = zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } case 186: break; case 31: { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); } case 187: break; case 72: { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(cssPrevState); } case 188: break; case 62: { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; } case 189: break; case 43: { addPhpEndToken(INTERNAL_IN_PHP); return firstToken; } case 190: break; case 37: { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } case 191: break; case 97: { int count = yylength(); addToken(zzStartRead,zzStartRead, Token.FUNCTION); zzMarkedPos -= (count-1); //yypushback(count-1); } case 192: break; case 34: { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); } case 193: break; case 24: { addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); yybegin(INTAG_SCRIPT); } case 194: break; case 83: { start = zzMarkedPos-2; yybegin(JS_MLC); } case 195: break; case 86: { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } case 196: break; case 70: { int temp = zzMarkedPos - 2; addToken(zzStartRead, temp, Token.FUNCTION); addToken(zzMarkedPos-1, zzMarkedPos-1, Token.SEPARATOR); zzStartRead = zzCurrentPos = zzMarkedPos; } case 197: break; case 48: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addPhpEndToken(INTERNAL_IN_PHP_STRING); return firstToken; } case 198: break; case 121: { addToken(Token.ANNOTATION); } case 199: break; case 98: { yybegin(PHP); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } case 200: break; case 49: { yybegin(PHP); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } case 201: break; case 29: { addToken(Token.ERROR_IDENTIFIER); } case 202: break; case 67: { addEndToken(INTERNAL_CSS_VALUE); return firstToken; } case 203: break; case 108: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addHyperlinkToken(temp,zzMarkedPos-1, Token.MARKUP_COMMENT); start = zzMarkedPos; } case 204: break; case 6: { addToken(Token.MARKUP_ENTITY_REFERENCE); } case 205: break; case 110: { addToken(Token.LITERAL_BOOLEAN); } case 206: break; case 17: { /* Shouldn't happen */ yypushback(1); yybegin(INTAG); } case 207: break; case 3: { addNullToken(); return firstToken; } case 208: break; case 55: { addEndToken(INTERNAL_CSS); return firstToken; } case 209: break; case 118: { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } case 210: break; case 59: { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } case 211: break; case 78: { addToken(Token.MARKUP_TAG_DELIMITER); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } case 212: break; case 63: { addToken(Token.RESERVED_WORD); } case 213: break; case 11: { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE); } case 214: break; case 45: { addToken(Token.COMMENT_EOL); addPhpEndToken(INTERNAL_IN_PHP); return firstToken; } case 215: break; case 13: { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } case 216: break; case 57: { addToken(Token.DATA_TYPE); } case 217: break; case 51: { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addPhpEndToken(INTERNAL_IN_PHP_CHAR); return firstToken; } case 218: break; case 53: { yybegin(PHP); addToken(start,zzStartRead, Token.LITERAL_CHAR); } case 219: break; case 33: { addToken(Token.SEPARATOR); } case 220: break; case 103: { int count = yylength(); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); zzMarkedPos -= (count-2); //yypushback(count-2); yybegin(INTAG_CHECK_TAG_NAME); } case 221: break; case 71: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; } case 222: break; case 69: { /* End of a function */ addToken(Token.SEPARATOR); } case 223: break; case 18: { addToken(Token.MARKUP_TAG_NAME); } case 224: break; case 10: { addToken(Token.MARKUP_TAG_ATTRIBUTE); } case 225: break; case 46: { start = zzMarkedPos-1; yybegin(PHP_CHAR); } case 226: break; case 95: { yybegin(phpInState, phpInLangIndex); addToken(Token.MARKUP_TAG_DELIMITER); start = zzMarkedPos; } case 227: break; case 82: { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); } case 228: break; case 40: { /* Line ending in '\' => continue to next line. */ if (validJSString) { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_IN_JS_STRING_VALID); } else { addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS_STRING_INVALID); } return firstToken; } case 229: break; case 85: { addToken(Token.LITERAL_NUMBER_FLOAT); } case 230: break; case 15: { start = zzMarkedPos-1; yybegin(INATTR_SINGLE); } case 231: break; case 105: { boolean highlightedAsRegex = false; if (firstToken==null) { addToken(Token.REGEX); highlightedAsRegex = true; } else { // If this is *likely* to be a regex, based on // the previous token, highlight it as such. Token t = firstToken.getLastNonCommentNonWhitespaceToken(); if (RSyntaxUtilities.regexCanFollowInJavaScript(t)) { addToken(Token.REGEX); highlightedAsRegex = true; } } // If it doesn't *appear* to be a regex, highlight it as // individual tokens. if (!highlightedAsRegex) { int temp = zzStartRead + 1; addToken(zzStartRead, zzStartRead, Token.OPERATOR); zzStartRead = zzCurrentPos = zzMarkedPos = temp; } } case 232: break; case 75: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; } case 233: break; case 12: { addToken(Token.MARKUP_TAG_DELIMITER); } case 234: break; case 32: { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } case 235: break; case 77: { start = zzMarkedPos-2; yybegin(DTD); } case 236: break; case 20: { addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); yybegin(INTAG); } case 237: break; case 47: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addPhpEndToken(INTERNAL_IN_PHP_MLC); return firstToken; } case 238: break; case 21: { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_SCRIPT); } case 239: break; case 42: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } case 240: break; case 58: { /* Unknown pseudo class */ addToken(Token.DATA_TYPE); } case 241: break; case 1: { } case 242: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case PHP: { addPhpEndToken(INTERNAL_IN_PHP); return firstToken; } case 7963: break; case INATTR_SINGLE_SCRIPT: { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); return firstToken; } case 7964: break; case JS_CHAR: { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; } case 7965: break; case CSS_STRING: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; } case 7966: break; case JS_MLC: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } case 7967: break; case CSS_CHAR_LITERAL: { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; } case 7968: break; case INTAG_SCRIPT: { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_SCRIPT); return firstToken; } case 7969: break; case CSS_PROPERTY: { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; } case 7970: break; case CSS_C_STYLE_COMMENT: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; } case 7971: break; case PHP_MLC: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addPhpEndToken(INTERNAL_IN_PHP_MLC); return firstToken; } case 7972: break; case CSS: { addEndToken(INTERNAL_CSS); return firstToken; } case 7973: break; case CSS_VALUE: { addEndToken(INTERNAL_CSS_VALUE); return firstToken; } case 7974: break; case COMMENT: { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; } case 7975: break; case INATTR_DOUBLE_SCRIPT: { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); return firstToken; } case 7976: break; case PHP_STRING: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addPhpEndToken(INTERNAL_IN_PHP_STRING); return firstToken; } case 7977: break; case JAVASCRIPT: { addEndToken(INTERNAL_IN_JS); return firstToken; } case 7978: break; case INTAG: { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } case 7979: break; case INTAG_CHECK_TAG_NAME: { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } case 7980: break; case INATTR_SINGLE_STYLE: { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_STYLE); return firstToken; } case 7981: break; case DTD: { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } case 7982: break; case PHP_CHAR: { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addPhpEndToken(INTERNAL_IN_PHP_CHAR); return firstToken; } case 7983: break; case JS_EOL_COMMENT: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } case 7984: break; case INATTR_DOUBLE_STYLE: { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_STYLE); return firstToken; } case 7985: break; case INATTR_SINGLE: { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; } case 7986: break; case YYINITIAL: { addNullToken(); return firstToken; } case 7987: break; case INATTR_DOUBLE: { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; } case 7988: break; case JS_STRING: { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } case 7989: break; case INTAG_STYLE: { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_STYLE); return firstToken; } case 7990: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PerlTokenMaker.flex000066400000000000000000000614661257417003700315100ustar00rootroot00000000000000/* * 01/26/2008 * * PerlTokenMaker.java - Scanner for Perl * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for Perl.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated PerlTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.5 * */ %% %public %class PerlTokenMaker %extends AbstractJFlexCTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Token type specific to PerlTokenMaker; this signals that we are inside * an unquoted/double quoted/backtick EOF heredoc. */ public static final int INTERNAL_HEREDOC_EOF_UNQUOTED = -1; /** * Token type specific to PerlTokenMaker; this signals that we are inside * an single quoted EOF heredoc. */ public static final int INTERNAL_HEREDOC_EOF_SINGLE_QUOTED = -2; /** * Token type specific to PerlTokenMaker; this signals that we are inside * an unquoted/double quoted/backtick EOT heredoc. */ public static final int INTERNAL_HEREDOC_EOT_UNQUOTED = -3; /** * Token type specific to PerlTokenMaker; this signals that we are inside * an single quoted EOT heredoc. */ public static final int INTERNAL_HEREDOC_EOT_SINGLE_QUOTED = -4; /** * Token type specific to PerlTokenMaker; this signals we are in a POD * block. */ public static final int INTERNAL_POD = -5; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public PerlTokenMaker() { } /** * Adds the token specified to the current linked list of tokens as an * "end token;" that is, at zzMarkedPos. * * @param tokenType The token's type. */ private void addEndToken(int tokenType) { addToken(zzMarkedPos,zzMarkedPos, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "#", null }; } /** * {@inheritDoc} */ public boolean getMarkOccurrencesOfTokenType(int type) { return super.getMarkOccurrencesOfTokenType(type) || type==Token.VARIABLE; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.LITERAL_STRING_DOUBLE_QUOTE: state = STRING; start = text.offset; break; case Token.LITERAL_CHAR: state = CHAR_LITERAL; start = text.offset; break; case Token.LITERAL_BACKQUOTE: state = BACKTICKS; start = text.offset; break; case INTERNAL_HEREDOC_EOF_UNQUOTED: state = HEREDOC_EOF_UNQUOTED; start = text.offset; break; case INTERNAL_HEREDOC_EOF_SINGLE_QUOTED: state = HEREDOC_EOF_SINGLE_QUOTED; start = text.offset; break; case INTERNAL_HEREDOC_EOT_UNQUOTED: state = HEREDOC_EOT_UNQUOTED; start = text.offset; break; case INTERNAL_HEREDOC_EOT_SINGLE_QUOTED: state = HEREDOC_EOT_SINGLE_QUOTED; start = text.offset; break; case INTERNAL_POD: state = POD; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Returns whether a regular expression token can follow the specified * token. * * @param t The token to check, which may be null. * @return Whether a regular expression token may follow this one. */ private static final boolean regexCanFollow(Token t) { char ch; // We basically try to mimic Eclipse's JS editor's behavior here. return t==null || //t.isOperator() || (t.length()==1 && ( (ch=t.charAt(0))=='=' || ch=='(' || ch==',' || ch=='?' || ch==':' || ch=='[' || ch=='!' || ch=='&' )) || /* Operators "==", "===", "!=", "!==", etc. */ (t.getType()==Token.OPERATOR && ((ch=t.charAt(t.length()-1))=='=' || ch=='~')); } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} Letter = [A-Za-z] NonzeroDigit = [1-9] Digit = ("0"|{NonzeroDigit}) HexDigit = ({Digit}|[A-Fa-f]) OctalDigit = ([0-7]) /*Escape = ("\\"(([btnfr\"'\\])|([0123]{OctalDigit}?{OctalDigit}?)|({OctalDigit}{OctalDigit}?)))*/ NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\'\`]|"#"|"\\") IdentifierStart = ({Letter}|"_") IdentifierPart = ({IdentifierStart}|{Digit}) LineTerminator = (\n) WhiteSpace = ([ \t\f]) LineCommentBegin = "#" IntegerHelper1 = (({NonzeroDigit}{Digit}*)|"0") IntegerHelper2 = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) IntegerLiteral = ({IntegerHelper1}[lL]?) HexLiteral = ({IntegerHelper2}[lL]?) FloatHelper1 = ([fFdD]?) FloatHelper2 = ([eE][+-]?{Digit}+{FloatHelper1}) FloatLiteral1 = ({Digit}+"."({FloatHelper1}|{FloatHelper2}|{Digit}+({FloatHelper1}|{FloatHelper2}))) FloatLiteral2 = ("."{Digit}+({FloatHelper1}|{FloatHelper2})) FloatLiteral3 = ({Digit}+{FloatHelper2}) FloatLiteral = ({FloatLiteral1}|{FloatLiteral2}|{FloatLiteral3}|({Digit}+[fFdD])) ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+) Separator = ([\(\)\{\}\[\]]) Separator2 = ([\;:,.]) VariableStart = ([\$\@\%)]"$"?) BracedVariable = ({VariableStart}\{{Identifier}\}) UnbracedVariable = ({VariableStart}{Identifier}) BracedShellVariable = ([\$]\{[\&\`\'\+\*\.\/\|\,\\\"\;\#\%\=\-\~\^\:\?\!\@\$\<\>\)\(\[\]\)\}]) UnbracedShellVariable = ([\$][\&\`\'\+\*\.\/\|\,\\\"\;\#\%\=\-\~\^\:\?\!\@\$\<\>\)\(\[\]\)]) MatchVariable = ([\$]{Digit}) Variable = ({BracedVariable}|{UnbracedVariable}|{BracedShellVariable}|{UnbracedShellVariable}|{MatchVariable}) Regex = ("/"([^\*\\/]|\\.)([^/\\]|\\.)*"/"[msixpogcadlu]*) NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"|"|"&&"|">>>"|"->") AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") BindingOperator = ("=~"|"!~") FunnyOperator = (([\*][\'\"])|([\&][\'\"])) Operator = ({NonAssignmentOperator}|{AssignmentOperator}|{BindingOperator}|{FunnyOperator}) PodCommandsExceptCut = ("="("pod"|"head1"|"head2"|"head3"|"head4"|"over"|"item"|"back"|"begin"|"end"|"for"|"encoding")) Identifier = ({IdentifierStart}{IdentifierPart}*) ErrorIdentifier = ({NonSeparator}+) %state STRING %state CHAR_LITERAL %state BACKTICKS %state HEREDOC_EOF_UNQUOTED %state HEREDOC_EOF_SINGLE_QUOTED %state HEREDOC_EOT_UNQUOTED %state HEREDOC_EOT_SINGLE_QUOTED %state POD %% { /* Keywords */ "and" | "cmp" | "continue" | "do" | "else" | "elsif" | "eq" | "esac" | "for" | "foreach" | "ge" | "if" | "last" | "le" | "ne" | "next" | "not" | "or" | "redo" | "sub" | "unless" | "until" | "while" | "xor" { addToken(Token.RESERVED_WORD); } /* Standard Functions */ "abs" | "accept" | "alarm" | "atan2" | "bind" | "binmode" | "bless" | "caller" | "chdir" | "chmod" | "chomp" | "chop" | "chown" | "chr" | "chroot" | "close" | "closedir" | "connect" | "cos" | "crypt" | "dbmclose" | "dbmopen" | "defined" | "delete" | "die" | "dump" | "each" | "endgrent" | "endhostent" | "endnetent" | "endprotoent" | "endpwent" | "endservent" | "eof" | "eval" | "exec" | "exists" | "exit" | "exp" | "fcntl" | "fileno" | "flock" | "fork" | "formline" | "getc" | "getgrent" | "getgrgid" | "getgrnam" | "gethostbyaddr" | "gethostbyname" | "gethostent" | "getlogin" | "getnetbyaddr" | "getnetbyname" | "getnetent" | "getpeername" | "getpgrp" | "getppid" | "getpriority" | "getprotobyname" | "getprotobynumber" | "getprotoent" | "getpwent" | "getpwnam" | "getpwuid" | "getservbyname" | "getservbyport" | "getservent" | "getsockname" | "getsockopt" | "glob" | "gmtime" | "goto" | "grep" | "hex" | "index" | "int" | "ioctl" | "join" | "keys" | "kill" | "last" | "lc" | "lcfirst" | "length" | "link" | "listen" | "local" | "localtime" | "log" | "lstat" | "map" | "mkdir" | "msgctl" | "msgget" | "msgrcv" | "msgsnd" | "my" | "next" | "no" | "oct" | "open" | "opendir" | "ord" | "our" | "pack" | "package" | "pipe" | "pop" | "pos" | "print" | "printf" | "prototype" | "push" | "quotemeta" | "rand" | "read" | "readdir" | "readline" | "readlink" | "readpipe" | "recv" | "redo" | "ref" | "rename" | "require" | "reset" | "return" | "reverse" | "rewinddir" | "rindex" | "rmdir" | "scalar" | "seek" | "seekdir" | "select" | "semctl" | "semget" | "semop" | "send" | "sethostent" | "setgrent" | "setnetent" | "setpgrp" | "setpriority" | "setprotoent" | "setpwent" | "setservent" | "setsockopt" | "shift" | "shmctl" | "shmget" | "shmread" | "shmwrite" | "shutdown" | "sin" | "sleep" | "socket" | "socketpair" | "sort" | "splice" | "split" | "sprintf" | "sqrt" | "srand" | "stat" | "study" | "sub" | "substr" | "symlink" | "syscall" | "sysopen" | "sysread" | "sysseek" | "system" | "syswrite" | "tell" | "telldir" | "tie" | "tied" | "time" | "times" | "truncate" | "uc" | "ucfirst" | "umask" | "undef" | "unlink" | "unpack" | "unshift" | "untie" | "use" | "utime" | "values" | "vec" | "wait" | "waitpid" | "wantarray" | "warn" | "write" { addToken(Token.FUNCTION); } } { {LineTerminator} { addNullToken(); return firstToken; } {Identifier} { addToken(Token.IDENTIFIER); } {WhiteSpace}+ { addToken(Token.WHITESPACE); } {Variable} { addToken(Token.VARIABLE); } /* String/Character literals. */ \" { start = zzMarkedPos-1; yybegin(STRING); } \' { start = zzMarkedPos-1; yybegin(CHAR_LITERAL); } \` { start = zzMarkedPos-1; yybegin(BACKTICKS); } /* Comment literals. */ {LineCommentBegin}"!".* { addToken(Token.PREPROCESSOR); addNullToken(); return firstToken; } {LineCommentBegin}.* { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; } /* Easily identifiable regexes of the form "/.../". This is not foolproof. */ {Regex} { boolean highlightedAsRegex = false; if (firstToken==null) { addToken(Token.REGEX); highlightedAsRegex = true; } else { // If this is *likely* to be a regex, based on // the previous token, highlight it as such. Token t = firstToken.getLastNonCommentNonWhitespaceToken(); if (regexCanFollow(t)) { addToken(Token.REGEX); highlightedAsRegex = true; } } // If it doesn't *appear* to be a regex, highlight it as // individual tokens. if (!highlightedAsRegex) { int temp = zzStartRead + 1; addToken(zzStartRead, zzStartRead, Token.OPERATOR); zzStartRead = zzCurrentPos = zzMarkedPos = temp; } } /* More regexes (m/.../, s!...!!, etc.). This is nowhere near */ /* exhaustive, but is rather just the common ones. */ m"/"[^/]*"/"[msixpodualgc]* { addToken(Token.REGEX); } m"!"[^!]*"!"[msixpodualgc]* { addToken(Token.REGEX); } m"|"[^\|]*"|"[msixpodualgc]* { addToken(Token.REGEX); } m\\[^\\]*\\[msixpodualgc]* { addToken(Token.REGEX); } s"/"[^/]*"/"[^/]*"/"[msixpodualgcer]* { addToken(Token.REGEX); } s"!"[^!]*"!"[^!]*"!"[msixpodualgcer]* { addToken(Token.REGEX); } s"|"[^\|]*"|"[^\|]*"|"[msixpodualgcer]* { addToken(Token.REGEX); } (tr|y)"/"[^/]*"/"[^/]*"/"[cdsr]* { addToken(Token.REGEX); } (tr|y)"!"[^!]*"!"[^!]*"!"[cdsr]* { addToken(Token.REGEX); } (tr|y)"|"[^\|]*"|"[^\|]*"|"[cdsr]* { addToken(Token.REGEX); } (tr|y)\\[^\\]*\\[^\\]*\\[cdsr]* { addToken(Token.REGEX); } qr"/"[^/]*"/"[msixpodual]* { addToken(Token.REGEX); } qr"!"[^/]*"!"[msixpodual]* { addToken(Token.REGEX); } qr"|"[^/]*"|"[msixpodual]* { addToken(Token.REGEX); } qr\\[^/]*\\[msixpodual]* { addToken(Token.REGEX); } /* "Here-document" syntax. This is only implemented for the common */ /* cases. */ "<> { addNullToken(); return firstToken; } /* Catch any other (unhandled) characters and flag them as bad. */ . { addToken(Token.ERROR_IDENTIFIER); } } { [^\n\\\$\@\%\"]+ {} \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } \\.? { /* Skip escaped chars. */ } {Variable} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } {VariableStart} {} \" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } } { [^\n\\\']+ {} \\.? { /* Skip escaped single quotes only, but this should still work. */ } \n { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } \' { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); } <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } } { [^\n\\\$\@\%\`]+ {} \n { addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; } \\.? { /* Skip escaped chars. */ } {Variable} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } {VariableStart} {} \` { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); } <> { addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; } } { /* NOTE: The closing "EOF" is supposed to be on a line by itself - */ /* no surrounding whitespace or other chars. However, the way */ /* we're hacking the JFLex scanning, something like ^"EOF"$ doesn't */ /* work. Fortunately we don't need the start- and end-line anchors */ /* since the production after "EOF" will match any line containing */ /* EOF and any other chars. */ /* NOTE2: This case is used for unquoted <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_UNQUOTED); return firstToken; } } { /* NOTE: The closing "EOF" is supposed to be on a line by itself - */ /* no surrounding whitespace or other chars. However, the way */ /* we're hacking the JFLex scanning, something like ^"EOF"$ doesn't */ /* work. Fortunately we don't need the start- and end-line anchors */ /* since the production after "EOF" will match any line containing */ /* EOF and any other chars. */ "EOF" { if (start==zzStartRead) { addToken(Token.PREPROCESSOR); addNullToken(); return firstToken; } } [^\n\\]+ {} \n { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); return firstToken; } \\.? { /* Skip escaped chars. */ } <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); return firstToken; } } { /* NOTE: The closing "EOT" is supposed to be on a line by itself - */ /* no surrounding whitespace or other chars. However, the way */ /* we're hacking the JFLex scanning, something like ^"EOT"$ doesn't */ /* work. Fortunately we don't need the start- and end-line anchors */ /* since the production after "EOT" will match any line containing */ /* EOF and any other chars. */ /* NOTE2: This case is used for unquoted <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_UNQUOTED); return firstToken; } } { /* NOTE: The closing "EOT" is supposed to be on a line by itself - */ /* no surrounding whitespace or other chars. However, the way */ /* we're hacking the JFLex scanning, something like ^"EOT"$ doesn't */ /* work. Fortunately we don't need the start- and end-line anchors */ /* since the production after "EOT" will match any line containing */ /* EOT and any other chars. */ "EOT" { if (start==zzStartRead) { addToken(Token.PREPROCESSOR); addNullToken(); return firstToken; } } [^\n\\]+ {} \n { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); return firstToken; } \\.? { /* Skip escaped chars. */ } <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); return firstToken; } } { [^\n\=]+ {} "=cut" { if (start==zzStartRead) { addToken(Token.COMMENT_DOCUMENTATION); yybegin(YYINITIAL); } } {PodCommandsExceptCut} { if (start==zzStartRead) { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } } = {} \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_POD); return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PerlTokenMaker.java000066400000000000000000002547271257417003700314770ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 3/11/12 12:58 AM */ /* * 01/26/2008 * * PerlTokenMaker.java - Scanner for Perl * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for Perl.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated PerlTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.5 * */ public class PerlTokenMaker extends AbstractJFlexCTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int HEREDOC_EOF_SINGLE_QUOTED = 5; public static final int HEREDOC_EOT_SINGLE_QUOTED = 7; public static final int HEREDOC_EOT_UNQUOTED = 6; public static final int STRING = 1; public static final int BACKTICKS = 3; public static final int YYINITIAL = 0; public static final int HEREDOC_EOF_UNQUOTED = 4; public static final int CHAR_LITERAL = 2; public static final int POD = 8; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\12\1\11\1\0\1\12\1\6\22\0\1\12\1\46\1\102"+ "\1\7\1\26\1\24\1\50\1\53\1\21\1\25\1\33\1\41\1\22"+ "\1\17\1\20\1\32\1\3\1\61\1\62\1\61\1\61\3\5\2\2"+ "\1\22\1\22\1\42\1\43\1\45\1\47\1\23\3\4\1\15\1\16"+ "\1\104\5\1\1\14\2\1\1\103\4\1\1\105\3\1\1\13\2\1"+ "\1\21\1\10\1\21\1\44\1\1\1\31\1\60\1\70\1\35\1\40"+ "\1\57\1\74\1\72\1\56\1\65\1\101\1\71\1\37\1\67\1\73"+ "\1\55\1\54\1\76\1\64\1\34\1\66\1\75\1\63\1\77\1\36"+ "\1\100\1\1\1\27\1\52\1\30\1\51\uff81\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\11\0\1\1\1\2\2\3\1\1\1\4\1\5\1\6"+ "\1\7\1\2\1\10\1\2\1\1\1\7\1\10\1\1"+ "\1\11\2\7\5\2\10\7\1\12\24\2\1\13\1\14"+ "\1\15\1\16\3\14\1\17\1\14\1\20\1\21\1\22"+ "\1\14\1\23\3\14\1\24\1\14\1\25\5\14\1\26"+ "\1\14\1\27\1\14\1\30\2\14\1\31\1\14\1\32"+ "\1\3\1\33\1\32\1\33\1\32\1\34\1\32\1\4"+ "\1\35\1\36\1\1\1\0\1\36\1\0\3\36\3\0"+ "\1\7\1\0\2\2\2\0\22\2\1\37\1\2\1\40"+ "\2\2\1\40\4\2\10\0\1\7\7\2\1\40\31\2"+ "\1\1\1\0\1\2\2\0\1\2\1\37\6\2\1\40"+ "\2\2\1\37\1\40\14\2\1\1\3\0\1\2\1\15"+ "\1\41\1\14\1\0\2\41\1\0\1\20\1\42\1\14"+ "\1\0\2\42\1\0\1\14\1\43\1\14\1\0\2\43"+ "\1\0\3\14\10\0\1\33\1\0\2\34\1\0\1\44"+ "\1\0\1\2\2\0\14\2\1\40\6\2\1\37\15\2"+ "\15\0\33\2\1\37\1\2\1\0\2\45\7\2\1\40"+ "\10\2\1\1\3\0\5\2\1\0\1\1\5\0\1\46"+ "\1\0\1\46\11\0\1\45\10\2\1\37\26\2\4\0"+ "\1\47\5\0\1\37\11\2\1\37\5\2\1\37\17\2"+ "\1\0\4\45\2\2\1\37\1\2\1\0\2\45\1\50"+ "\1\51\5\0\16\2\1\37\2\2\1\52\1\53\6\0"+ "\2\2\1\37\25\2\1\45\2\2\3\0\1\37\7\2"+ "\7\0\14\2\1\0\4\2\1\54\1\55\1\0\10\2"+ "\1\0\1\2\1\0\4\2\1\0\12\2"; private static int [] zzUnpackAction() { int [] result = new int[601]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\106\0\214\0\322\0\u0118\0\u015e\0\u01a4\0\u01ea"+ "\0\u0230\0\u0276\0\u02bc\0\u0302\0\u0348\0\u038e\0\u03d4\0\u038e"+ "\0\u041a\0\u0460\0\u04a6\0\u038e\0\u038e\0\u04ec\0\u0532\0\u0578"+ "\0\u05be\0\u038e\0\u0604\0\u064a\0\u0690\0\u06d6\0\u071c\0\u0762"+ "\0\u07a8\0\u07ee\0\u0834\0\u087a\0\u08c0\0\u0906\0\u094c\0\u038e"+ "\0\u0992\0\u038e\0\u09d8\0\u0a1e\0\u0a64\0\u0aaa\0\u0af0\0\u0b36"+ "\0\u0b7c\0\u0bc2\0\u0c08\0\u0c4e\0\u0c94\0\u0cda\0\u0d20\0\u0d66"+ "\0\u0dac\0\u0df2\0\u0e38\0\u0e7e\0\u0ec4\0\u0f0a\0\u038e\0\u0f50"+ "\0\u0f96\0\u038e\0\u0fdc\0\u1022\0\u1068\0\u038e\0\u10ae\0\u10f4"+ "\0\u038e\0\u038e\0\u113a\0\u038e\0\u1180\0\u11c6\0\u120c\0\u038e"+ "\0\u1252\0\u038e\0\u1298\0\u12de\0\u1324\0\u136a\0\u13b0\0\u038e"+ "\0\u13f6\0\u038e\0\u143c\0\u038e\0\u1482\0\u14c8\0\u038e\0\u150e"+ "\0\u1554\0\u1554\0\u1554\0\u159a\0\u15e0\0\u1626\0\u166c\0\u16b2"+ "\0\u16f8\0\u173e\0\u1784\0\u17ca\0\u1810\0\u1856\0\u189c\0\u0276"+ "\0\u038e\0\u17ca\0\u18e2\0\u1928\0\u196e\0\u1928\0\u19b4\0\u19fa"+ "\0\u1a40\0\u1a86\0\u1acc\0\u1b12\0\u1b58\0\u1b9e\0\u1be4\0\u1c2a"+ "\0\u1c70\0\u1cb6\0\u1cfc\0\u1d42\0\u1d88\0\u1dce\0\u1e14\0\u1e5a"+ "\0\u1ea0\0\u1ee6\0\u1f2c\0\u1f72\0\u1fb8\0\u1ffe\0\u2044\0\u208a"+ "\0\u20d0\0\u2116\0\u02bc\0\u215c\0\u21a2\0\u21e8\0\u222e\0\u2274"+ "\0\u22ba\0\u2300\0\u2346\0\u238c\0\u23d2\0\u2418\0\u245e\0\u24a4"+ "\0\u24ea\0\u2530\0\u2576\0\u25bc\0\u2602\0\u2648\0\u268e\0\u26d4"+ "\0\u271a\0\u2760\0\u27a6\0\u27ec\0\u2832\0\u2878\0\u28be\0\u2904"+ "\0\u294a\0\u2990\0\u29d6\0\u2a1c\0\u2a62\0\u2aa8\0\u2aee\0\u2b34"+ "\0\u2b7a\0\u2bc0\0\u2c06\0\u2c4c\0\u2c92\0\u2cd8\0\u2d1e\0\u2d64"+ "\0\u2daa\0\u2df0\0\u2e36\0\u2e7c\0\u2ec2\0\u2f08\0\u2f4e\0\u02bc"+ "\0\u2f94\0\u2fda\0\u3020\0\u3066\0\u30ac\0\u30f2\0\u3138\0\u317e"+ "\0\u31c4\0\u320a\0\u3250\0\u3296\0\u32dc\0\u3322\0\u3368\0\u33ae"+ "\0\u33f4\0\u343a\0\u3480\0\u34c6\0\u350c\0\u3552\0\u3598\0\u35de"+ "\0\u3624\0\u366a\0\u36b0\0\u36f6\0\u038e\0\u373c\0\u3782\0\u37c8"+ "\0\u038e\0\u3782\0\u380e\0\u038e\0\u3854\0\u389a\0\u38e0\0\u038e"+ "\0\u389a\0\u3926\0\u396c\0\u39b2\0\u39f8\0\u3a3e\0\u038e\0\u39f8"+ "\0\u3a84\0\u3aca\0\u3b10\0\u3b56\0\u3b9c\0\u3be2\0\u3c28\0\u3c6e"+ "\0\u3cb4\0\u3cfa\0\u3d40\0\u3d86\0\u3dcc\0\u3e12\0\u1554\0\u3e58"+ "\0\u3e9e\0\u3ee4\0\u3f2a\0\u3f70\0\u3fb6\0\u3ffc\0\u4042\0\u4088"+ "\0\u40ce\0\u4114\0\u415a\0\u41a0\0\u41e6\0\u422c\0\u4272\0\u42b8"+ "\0\u26d4\0\u42fe\0\u4344\0\u438a\0\u43d0\0\u4416\0\u445c\0\u44a2"+ "\0\u44e8\0\u452e\0\u4574\0\u45ba\0\u4600\0\u4646\0\u468c\0\u46d2"+ "\0\u4718\0\u320a\0\u475e\0\u47a4\0\u47ea\0\u4830\0\u4876\0\u48bc"+ "\0\u4902\0\u4948\0\u498e\0\u49d4\0\u4a1a\0\u4a60\0\u4aa6\0\u4aec"+ "\0\u4b32\0\u4b78\0\u4bbe\0\u4c04\0\u4c4a\0\u4c90\0\u4cd6\0\u4d1c"+ "\0\u4d62\0\u4da8\0\u4dee\0\u4e34\0\u4e7a\0\u4ec0\0\u4f06\0\u4f4c"+ "\0\u4f92\0\u4fd8\0\u501e\0\u5064\0\u50aa\0\u50f0\0\u5136\0\u517c"+ "\0\u51c2\0\u5208\0\u524e\0\u5294\0\u52da\0\u5320\0\u5366\0\u26d4"+ "\0\u53ac\0\u53f2\0\u5438\0\u547e\0\u54c4\0\u550a\0\u5550\0\u5596"+ "\0\u55dc\0\u5622\0\u5668\0\u56ae\0\u56f4\0\u573a\0\u5780\0\u57c6"+ "\0\u580c\0\u5852\0\u5898\0\u58de\0\u5924\0\u596a\0\u59b0\0\u59f6"+ "\0\u5a3c\0\u5a82\0\u5ac8\0\u5b0e\0\u5b54\0\u5b9a\0\u5be0\0\u5c26"+ "\0\u5c6c\0\u5cb2\0\u5cf8\0\u5d3e\0\u1252\0\u5d84\0\u13b0\0\u5dca"+ "\0\u5e10\0\u5e56\0\u5e9c\0\u5ee2\0\u5f28\0\u5f6e\0\u5fb4\0\u5ffa"+ "\0\u6040\0\u6086\0\u60cc\0\u6112\0\u6158\0\u619e\0\u61e4\0\u622a"+ "\0\u6270\0\u2c4c\0\u62b6\0\u62fc\0\u6342\0\u6388\0\u63ce\0\u6414"+ "\0\u645a\0\u64a0\0\u64e6\0\u652c\0\u6572\0\u65b8\0\u65fe\0\u6644"+ "\0\u668a\0\u66d0\0\u6716\0\u675c\0\u67a2\0\u67e8\0\u682e\0\u6874"+ "\0\u68ba\0\u6900\0\u6946\0\u698c\0\u038e\0\u69d2\0\u6a18\0\u6a5e"+ "\0\u6aa4\0\u6aea\0\u6b30\0\u6b76\0\u6bbc\0\u6c02\0\u6c48\0\u6c8e"+ "\0\u6cd4\0\u6d1a\0\u6d60\0\u6da6\0\u6dec\0\u6e32\0\u6e78\0\u6ebe"+ "\0\u6f04\0\u6f4a\0\u2a62\0\u6f90\0\u6fd6\0\u701c\0\u7062\0\u70a8"+ "\0\u70ee\0\u7134\0\u717a\0\u71c0\0\u7206\0\u724c\0\u7292\0\u72d8"+ "\0\u731e\0\u7364\0\u73aa\0\u73f0\0\u7436\0\u747c\0\u74c2\0\u7508"+ "\0\u754e\0\u7594\0\u75da\0\u7620\0\u7666\0\u76ac\0\u038e\0\u038e"+ "\0\u76f2\0\u7738\0\u777e\0\u77c4\0\u780a\0\u7850\0\u7896\0\u78dc"+ "\0\u7922\0\u7968\0\u79ae\0\u79f4\0\u7a3a\0\u7a80\0\u7ac6\0\u7b0c"+ "\0\u7b52\0\u7b98\0\u7bde\0\u31c4\0\u7c24\0\u7c6a\0\u038e\0\u038e"+ "\0\u7cb0\0\u7cf6\0\u7d3c\0\u7d82\0\u7dc8\0\u7e0e\0\u7e54\0\u7e9a"+ "\0\u2878\0\u7ee0\0\u7f26\0\u7f6c\0\u7fb2\0\u7ff8\0\u803e\0\u8084"+ "\0\u80ca\0\u8110\0\u8156\0\u819c\0\u81e2\0\u8228\0\u826e\0\u82b4"+ "\0\u82fa\0\u8340\0\u8386\0\u83cc\0\u8412\0\u8458\0\u849e\0\u84e4"+ "\0\u852a\0\u8570\0\u85b6\0\u85fc\0\u8642\0\u8688\0\u86ce\0\u8714"+ "\0\u875a\0\u87a0\0\u87e6\0\u882c\0\u8872\0\u88b8\0\u88fe\0\u8944"+ "\0\u898a\0\u89d0\0\u8a16\0\u8a5c\0\u8aa2\0\u8ae8\0\u8b2e\0\u8b74"+ "\0\u8bba\0\u8c00\0\u8c46\0\u8c8c\0\u8cd2\0\u8d18\0\u8d5e\0\u8da4"+ "\0\u8dea\0\u8e30\0\u8e76\0\u8ebc\0\u038e\0\u038e\0\u8f02\0\u8f48"+ "\0\u8f8e\0\u8fd4\0\u901a\0\u9060\0\u90a6\0\u90ec\0\u9132\0\u9178"+ "\0\u91be\0\u9204\0\u924a\0\u9290\0\u92d6\0\u931c\0\u9362\0\u93a8"+ "\0\u93ee\0\u9434\0\u947a\0\u94c0\0\u9506\0\u954c\0\u9592\0\u95d8"+ "\0\u961e"; private static int [] zzUnpackRowMap() { int [] result = new int[601]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\12\1\13\1\14\1\15\1\13\1\14\1\16\1\17"+ "\1\12\1\20\1\21\4\13\1\22\1\23\1\24\1\25"+ "\1\26\1\27\1\30\1\31\2\24\1\32\1\33\1\34"+ "\1\35\1\36\1\37\1\40\1\41\1\42\1\43\1\44"+ "\1\45\1\46\1\47\1\50\1\51\1\50\1\45\1\52"+ "\1\53\1\54\1\55\1\56\1\57\2\14\1\60\1\61"+ "\1\62\1\63\1\64\1\65\1\66\1\67\1\70\1\71"+ "\1\72\1\73\1\74\1\75\1\76\1\77\3\13\10\100"+ "\1\101\1\102\11\100\2\103\1\104\1\105\53\100\1\106"+ "\3\100\10\107\1\110\1\111\41\107\1\112\32\107\10\113"+ "\1\101\1\114\11\113\2\115\1\116\1\117\2\113\1\120"+ "\54\113\10\121\1\101\1\122\4\121\1\123\4\121\2\124"+ "\1\125\1\126\57\121\10\127\1\101\1\130\4\127\1\131"+ "\67\127\10\121\1\101\1\132\4\121\1\133\4\121\2\124"+ "\1\125\1\126\57\121\10\127\1\101\1\134\4\127\1\135"+ "\67\127\11\136\1\137\31\136\1\140\42\136\6\12\1\0"+ "\2\12\2\0\4\12\4\0\1\12\2\0\1\12\5\0"+ "\5\12\13\0\26\12\1\0\4\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\26\13\1\0\3\13\2\141\2\14\1\141\1\14"+ "\1\0\2\141\2\0\1\141\1\142\1\143\1\144\1\0"+ "\1\145\2\0\1\141\2\0\1\141\5\0\3\141\1\142"+ "\1\143\13\0\3\141\1\144\1\141\2\14\11\141\1\143"+ "\5\141\1\0\1\141\1\143\3\141\1\146\1\147\1\141"+ "\1\147\1\0\2\141\2\0\1\150\1\142\1\143\1\144"+ "\1\0\1\145\2\0\1\141\2\0\1\141\5\0\2\141"+ "\1\150\1\142\1\143\13\0\3\141\1\144\1\141\2\147"+ "\11\141\1\143\5\141\1\0\1\141\1\143\1\141\106\0"+ "\11\151\1\0\34\151\1\152\37\151\12\0\1\21\112\0"+ "\1\50\23\0\1\50\1\0\1\50\42\0\2\145\1\0"+ "\1\145\53\0\2\145\23\0\1\12\1\153\2\12\1\153"+ "\1\12\1\0\2\12\2\0\4\153\4\0\1\12\2\0"+ "\1\154\1\155\4\0\5\153\13\0\5\153\2\12\17\153"+ "\1\0\3\153\1\0\1\156\2\0\1\156\6\0\4\156"+ "\7\0\1\157\1\155\4\0\5\156\2\0\1\50\10\0"+ "\5\156\2\0\17\156\1\0\3\156\1\0\1\156\2\0"+ "\1\156\6\0\4\156\7\0\1\157\1\155\4\0\5\156"+ "\13\0\5\156\2\0\17\156\1\0\3\156\1\12\1\153"+ "\2\160\1\153\1\160\1\0\2\160\2\0\4\153\4\161"+ "\1\160\2\161\1\162\1\163\1\0\3\161\5\153\13\161"+ "\5\153\2\160\17\153\1\161\3\153\10\164\1\165\21\164"+ "\2\0\7\164\1\166\42\164\43\0\1\50\7\0\1\50"+ "\26\0\1\50\3\0\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\3\0\1\167\1\0"+ "\1\13\1\170\1\13\1\171\1\13\5\0\1\172\3\0"+ "\1\173\1\0\1\174\1\175\1\176\1\177\4\13\1\200"+ "\1\201\1\202\6\13\1\203\1\204\1\13\1\205\1\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\3\13\1\206\1\13"+ "\13\0\1\13\1\207\1\210\1\13\1\211\3\13\1\212"+ "\2\13\1\213\12\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\1\13\1\214\24\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\1\215\1\216\3\13\13\0\1\13\1\217"+ "\1\13\1\220\1\221\4\13\1\222\14\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\1\13\1\223\1\13"+ "\1\224\5\13\1\225\2\13\1\226\4\13\1\227\4\13"+ "\1\0\3\13\41\0\1\50\1\0\1\50\104\0\1\230"+ "\1\50\105\0\1\50\5\0\1\50\2\0\1\231\1\232"+ "\1\233\1\234\5\0\1\235\2\0\1\236\3\0\1\237"+ "\54\0\1\50\105\0\1\50\1\0\1\240\103\0\1\50"+ "\5\0\1\50\77\0\1\50\4\0\1\50\2\0\1\50"+ "\26\0\1\50\3\0\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ "\1\13\1\241\2\13\1\242\3\13\1\243\1\244\7\13"+ "\1\245\4\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\1\13"+ "\1\246\3\13\13\0\1\247\7\13\1\250\10\13\1\251"+ "\4\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ "\3\13\1\252\22\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\1\253\1\13\1\254\1\255\1\13\13\0\1\13\1\256"+ "\2\13\1\257\2\13\1\260\7\13\1\261\2\13\1\223"+ "\3\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\1\13\1\262"+ "\1\13\1\263\1\13\13\0\12\13\1\264\1\13\1\265"+ "\2\13\1\266\6\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\3\13\1\267\1\270\21\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\3\13\1\271\1\272"+ "\4\13\1\273\1\13\1\274\12\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\1\13\1\275\15\13\1\276"+ "\1\223\5\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\3\13\1\277\4\13\1\300\1\301\14\13\1\0"+ "\3\13\1\12\5\13\1\0\1\12\1\302\2\0\4\13"+ "\4\0\1\12\2\0\1\12\3\0\1\303\1\0\1\304"+ "\4\13\5\0\1\305\3\0\1\306\1\0\4\13\1\307"+ "\10\13\1\274\6\13\1\310\1\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\3\13\1\311\1\13\13\0\11\13\1\312"+ "\14\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ "\3\13\1\313\5\13\1\314\14\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\3\13\1\315\1\13\13\0\1\13\1\316"+ "\1\13\1\317\4\13\1\320\2\13\1\321\12\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\1\13\1\322"+ "\1\13\1\323\22\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\1\13\1\324\1\13\1\325\1\13\13\0\1\13\1\326"+ "\7\13\1\327\14\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\1\225\1\216\3\13\13\0\12\13\1\330\1\331\3\13"+ "\1\332\6\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\10\13\1\333\10\13\1\334\4\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\2\13\1\335\1\13"+ "\1\336\3\13\1\337\15\13\1\0\3\13\1\12\5\13"+ "\1\0\1\12\1\340\2\0\4\13\4\0\1\12\2\0"+ "\1\12\3\0\1\341\1\0\5\13\5\0\1\342\3\0"+ "\1\343\1\0\26\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\1\13\1\344\24\13\1\0\3\13\10\100"+ "\2\0\11\100\2\0\1\100\1\0\53\100\1\0\3\100"+ "\11\345\1\0\74\345\1\0\1\346\2\0\1\346\6\0"+ "\4\346\7\0\1\347\1\350\4\0\5\346\13\0\5\346"+ "\2\0\17\346\1\0\3\346\10\100\2\0\11\100\2\0"+ "\1\100\1\347\53\100\1\0\3\100\1\0\1\346\2\351"+ "\1\346\1\351\1\0\2\351\2\0\4\346\7\351\1\352"+ "\1\353\1\0\3\351\5\346\13\351\5\346\2\351\17\346"+ "\1\351\3\346\10\107\2\0\41\107\1\0\32\107\11\354"+ "\1\0\74\354\10\113\2\0\11\113\2\0\1\113\1\0"+ "\2\113\1\0\54\113\1\0\1\355\2\0\1\355\6\0"+ "\4\355\7\0\1\356\1\357\4\0\5\355\13\0\5\355"+ "\2\0\17\355\1\0\3\355\10\113\2\0\11\113\2\0"+ "\1\113\1\356\2\113\1\0\54\113\1\0\1\355\2\360"+ "\1\355\1\360\1\0\2\360\2\0\4\355\7\360\1\361"+ "\1\362\1\0\3\360\5\355\13\360\5\355\2\360\17\355"+ "\1\360\3\355\10\121\2\0\11\121\2\0\1\121\1\0"+ "\67\121\2\0\11\121\2\0\1\121\1\0\54\121\1\363"+ "\2\121\1\0\1\364\2\0\1\364\6\0\4\364\7\0"+ "\1\365\1\366\4\0\5\364\13\0\5\364\2\0\17\364"+ "\1\0\3\364\10\121\2\0\11\121\2\0\1\121\1\365"+ "\57\121\1\0\1\364\2\367\1\364\1\367\1\0\2\367"+ "\2\0\4\364\7\367\1\370\1\371\1\0\3\367\5\364"+ "\13\367\5\364\2\367\17\364\1\367\3\364\10\127\2\0"+ "\104\127\2\0\71\127\1\372\2\127\10\121\2\0\11\121"+ "\2\0\1\121\1\0\54\121\1\373\2\121\10\127\2\0"+ "\71\127\1\374\2\127\11\136\1\0\31\136\1\0\42\136"+ "\35\0\1\375\16\0\1\376\1\377\1\u0100\1\u0101\5\0"+ "\1\u0102\2\0\1\u0103\3\0\1\u0104\11\0\6\141\1\0"+ "\2\141\2\0\4\141\4\0\1\141\2\0\1\141\5\0"+ "\5\141\13\0\26\141\1\0\5\141\2\u0105\1\141\1\u0105"+ "\1\0\2\141\2\0\4\141\1\u0106\3\0\1\141\2\0"+ "\1\141\5\0\5\141\1\u0106\12\0\5\141\2\u0105\17\141"+ "\1\0\5\141\2\145\1\141\1\145\1\0\2\141\2\0"+ "\2\141\1\143\1\144\4\0\1\141\2\0\1\141\5\0"+ "\4\141\1\143\13\0\3\141\1\144\1\141\2\145\11\141"+ "\1\143\5\141\1\0\1\141\1\143\3\141\2\146\1\141"+ "\1\146\1\0\2\141\2\0\2\141\1\143\1\144\1\0"+ "\1\145\2\0\1\141\2\0\1\141\5\0\4\141\1\143"+ "\13\0\3\141\1\144\1\141\2\146\11\141\1\143\5\141"+ "\1\0\1\141\1\143\3\141\1\146\1\147\1\141\1\147"+ "\1\0\2\141\2\0\1\141\1\u0107\1\143\1\144\1\0"+ "\1\145\2\0\1\141\2\0\1\141\5\0\3\141\1\u0107"+ "\1\143\13\0\3\141\1\144\1\141\2\147\11\141\1\143"+ "\5\141\1\0\1\141\1\143\3\141\4\u0108\1\0\2\141"+ "\2\0\2\141\2\u0108\4\0\1\141\2\0\1\141\5\0"+ "\1\141\1\u0108\2\141\1\u0108\13\0\3\141\4\u0108\5\141"+ "\1\u0108\3\141\1\u0108\5\141\1\0\1\141\1\u0108\1\141"+ "\11\151\1\0\74\151\11\152\1\0\74\152\1\12\5\153"+ "\1\0\2\12\2\0\4\153\4\0\1\12\2\0\1\12"+ "\5\0\5\153\13\0\26\153\1\0\3\153\1\12\1\153"+ "\2\12\1\153\1\12\1\0\2\12\2\0\4\153\4\0"+ "\1\12\2\0\1\12\1\155\4\0\5\153\13\0\5\153"+ "\2\12\17\153\1\0\3\153\1\0\1\u0109\2\0\1\u0109"+ "\6\0\4\u0109\15\0\5\u0109\13\0\5\u0109\2\0\17\u0109"+ "\1\0\3\u0109\1\0\5\156\5\0\4\156\15\0\5\156"+ "\13\0\26\156\1\0\3\156\1\0\1\156\2\0\1\156"+ "\6\0\4\156\10\0\1\155\4\0\5\156\13\0\5\156"+ "\2\0\17\156\1\0\3\156\1\0\1\u0109\2\0\1\u0109"+ "\2\0\2\161\2\0\4\u0109\10\161\1\0\4\161\5\u0109"+ "\13\161\5\u0109\2\0\17\u0109\1\161\3\u0109\10\164\1\165"+ "\21\164\1\u010a\64\164\1\0\74\164\32\167\1\u010b\53\167"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\4\13\1\u010c\21\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\3\13"+ "\1\320\22\13\1\0\3\13\46\172\1\u010d\37\172\52\173"+ "\1\u010e\33\173\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\3\13\1\u010f\1\13"+ "\13\0\10\13\1\u0110\15\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\1\13\1\u0111\3\13\13\0\10\13\1\246\15\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\11\13"+ "\1\u0112\1\13\1\u0113\5\13\1\u0114\4\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\3\13\1\u0115\1\13\13\0\3\13"+ "\1\u0116\6\13\1\u0117\1\u0118\3\13\1\u0119\6\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\4\13\1\272"+ "\21\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ "\17\13\1\310\6\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\4\13\1\246\14\13\1\u011a\4\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\14\13\1\u011b"+ "\11\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ "\10\13\1\246\15\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\1\u011c\4\13\13\0\13\13\1\u011d\12\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\1\13\1\u011e\24\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\1\310\4\13\13\0"+ "\17\13\1\u011f\6\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\4\13\1\u0120\13\0\1\13\1\u0121\6\13\1\u0122\2\13"+ "\1\u0123\12\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\3\13"+ "\1\u0124\1\13\13\0\26\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\24\13\1\u0125\1\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\1\223\25\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\10\13\1\223"+ "\15\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ "\12\13\1\u0126\13\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\20\13\1\u0127\5\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\1\13\1\u0128\3\13\13\0\16\13\1\310"+ "\7\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ "\17\13\1\u0129\6\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\1\u012a\4\13\13\0\26\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\1\u012b\4\13\13\0\17\13\1\u012c\6\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\3\13\1\u012d\1\13\13\0"+ "\20\13\1\u012e\5\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\3\13\1\310\22\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\13\13\1\u012f\12\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\13\13\1\307"+ "\12\13\1\0\3\13\12\0\1\u0130\3\0\1\u0131\12\0"+ "\1\u0132\11\0\1\50\7\0\1\u0133\26\0\1\u0134\60\0"+ "\1\u0135\113\0\1\u0136\101\0\1\u0137\121\0\1\u0138\100\0"+ "\1\u0139\76\0\1\u013a\1\u013b\102\0\1\u013c\73\0\1\50"+ "\1\0\1\45\40\0\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\1\310\4\13"+ "\13\0\1\310\25\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\1\13\1\u013d\3\13\13\0\26\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\1\13\1\u013e\7\13\1\u013f"+ "\14\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ "\1\225\25\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\1\u0140"+ "\4\13\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\12\13\1\310\13\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\3\13\1\u0141\22\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\4\13\1\310\13\0\26\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\10\13"+ "\1\310\15\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\2\13"+ "\1\310\2\13\13\0\26\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\4\13\1\u0142\21\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\1\310\2\13\1\267"+ "\5\13\1\u0143\14\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\1\u0144\4\13\13\0\26\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\20\13\1\310\5\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\1\13\1\u0140\3\13\13\0\26\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\4\13"+ "\1\u0145\21\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\4\13"+ "\1\u0146\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\1\13\1\u0147\3\13\13\0\26\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\4\13\1\u0148\21\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\4\13\1\u0149"+ "\21\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\1\310\4\13"+ "\13\0\26\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\4\13"+ "\1\223\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\1\13\1\310\3\13\13\0\26\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\3\13\1\u014a\1\13\13\0\26\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\1\u014b\1\u014c\2\13\1\u014d"+ "\13\0\4\13\1\u014e\2\13\1\u014f\2\13\1\u0150\4\13"+ "\1\u0151\1\310\1\13\1\u0152\1\u0153\2\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\17\13\1\u0119\6\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\17\13"+ "\1\u0154\6\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\4\13"+ "\1\u0120\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\1\13\1\u0155\3\13\13\0\26\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\4\13\1\55\13\0\12\13\1\310\13\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\3\13\1\u0156\1\13"+ "\13\0\26\13\1\0\3\13\1\12\5\13\1\0\1\12"+ "\1\340\2\0\4\13\4\0\1\12\2\0\1\12\3\0"+ "\1\341\1\0\5\13\5\0\1\342\3\0\1\343\1\0"+ "\21\13\1\u0157\4\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\3\13\1\u0158\7\13\1\u0159\12\13\1\0"+ "\3\13\6\302\1\u015a\1\302\1\u015b\2\u015a\4\302\4\u015a"+ "\1\302\2\u015a\1\302\5\u015a\5\302\13\u015a\26\302\1\u015a"+ "\3\302\32\303\1\u015c\53\303\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\16\13\1\u015d\7\13\1\0\3\13\46\305\1\u015c"+ "\37\305\52\306\1\u015c\33\306\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\1\310\25\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\3\13\1\u015e\22\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\17\13\1\u015f\6\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\24\13\1\265"+ "\1\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\3\13\1\u0145"+ "\1\13\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\1\13\1\u0160\24\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\12\13\1\u0161\13\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\12\13\1\u0162"+ "\13\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ "\3\13\1\307\22\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\12\13\1\330\13\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\12\13\1\223\13\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\2\13\1\u012a\2\13\13\0"+ "\26\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ "\17\13\1\u0155\6\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\1\13\1\u0163\24\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\10\13\1\u0164\15\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\3\13\1\u0165\1\13\13\0"+ "\26\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ "\11\13\1\u0166\14\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\4\13\1\u0167\21\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\1\u0168\2\13\1\u0169\1\u016a\13\0\1\u016b"+ "\11\13\1\u016c\13\13\1\0\3\13\1\12\5\13\1\0"+ "\1\12\1\u016d\2\0\4\13\4\0\1\12\2\0\1\12"+ "\3\0\1\u016e\1\0\5\13\5\0\1\u016f\3\0\1\u0170"+ "\1\0\26\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\1\13\1\u0171\24\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\11\13\1\u0172\14\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\10\13\1\201\1\u0173"+ "\5\13\1\u0174\6\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\11\13\1\u0175\14\13\1\0\3\13\6\340"+ "\1\u0176\1\340\1\u0177\2\u0176\4\340\4\u0176\1\340\2\u0176"+ "\1\340\5\u0176\5\340\13\u0176\26\340\1\u0176\3\340\32\341"+ "\1\u0178\53\341\46\342\1\u0179\37\342\52\343\1\u017a\33\343"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\11\13\1\201\14\13"+ "\1\0\3\13\1\0\5\346\5\0\4\346\15\0\5\346"+ "\13\0\26\346\1\0\3\346\1\0\1\346\2\0\1\346"+ "\6\0\4\346\10\0\1\350\4\0\5\346\13\0\5\346"+ "\2\0\17\346\1\0\3\346\1\0\1\u017b\2\0\1\u017b"+ "\6\0\4\u017b\15\0\5\u017b\13\0\5\u017b\2\0\17\u017b"+ "\1\0\3\u017b\1\0\1\u017b\2\0\1\u017b\2\0\2\351"+ "\2\0\4\u017b\10\351\1\0\4\351\5\u017b\13\351\5\u017b"+ "\2\0\17\u017b\1\351\3\u017b\1\0\5\355\5\0\4\355"+ "\15\0\5\355\13\0\26\355\1\0\3\355\1\0\1\355"+ "\2\0\1\355\6\0\4\355\10\0\1\357\4\0\5\355"+ "\13\0\5\355\2\0\17\355\1\0\3\355\1\0\1\u017c"+ "\2\0\1\u017c\6\0\4\u017c\15\0\5\u017c\13\0\5\u017c"+ "\2\0\17\u017c\1\0\3\u017c\1\0\1\u017c\2\0\1\u017c"+ "\2\0\2\360\2\0\4\u017c\10\360\1\0\4\360\5\u017c"+ "\13\360\5\u017c\2\0\17\u017c\1\360\3\u017c\10\121\2\0"+ "\11\121\2\0\1\121\1\0\55\121\1\u017d\1\121\1\0"+ "\5\364\5\0\4\364\15\0\5\364\13\0\26\364\1\0"+ "\3\364\1\0\1\364\2\0\1\364\6\0\4\364\10\0"+ "\1\366\4\0\5\364\13\0\5\364\2\0\17\364\1\0"+ "\3\364\1\0\1\u017e\2\0\1\u017e\6\0\4\u017e\15\0"+ "\5\u017e\13\0\5\u017e\2\0\17\u017e\1\0\3\u017e\1\0"+ "\1\u017e\2\0\1\u017e\2\0\2\367\2\0\4\u017e\10\367"+ "\1\0\4\367\5\u017e\13\367\5\u017e\2\0\17\u017e\1\367"+ "\3\u017e\10\127\2\0\72\127\1\u017f\1\127\10\121\2\0"+ "\11\121\2\0\1\121\1\0\56\121\1\u017d\10\127\2\0"+ "\73\127\1\u017f\75\0\1\u0180\65\0\1\u0181\113\0\1\u0182"+ "\101\0\1\u0183\121\0\1\u0184\100\0\1\u0185\76\0\1\u0186"+ "\1\u0187\102\0\1\u0188\30\0\2\141\2\u0105\1\141\1\u0105"+ "\1\0\2\141\2\0\2\141\1\143\1\141\4\0\1\141"+ "\2\0\1\141\5\0\4\141\1\143\13\0\5\141\2\u0105"+ "\11\141\1\143\5\141\1\0\1\141\1\143\1\141\2\0"+ "\2\u0105\1\0\1\u0105\53\0\2\u0105\23\0\2\141\4\u0108"+ "\1\0\2\141\2\0\1\141\1\u0107\2\u0108\4\0\1\141"+ "\2\0\1\141\5\0\1\141\1\u0108\1\141\1\u0107\1\u0108"+ "\13\0\3\141\4\u0108\5\141\1\u0108\3\141\1\u0108\5\141"+ "\1\0\1\141\1\u0108\1\141\1\0\5\u0109\5\0\4\u0109"+ "\11\0\1\161\3\0\5\u0109\13\0\26\u0109\1\0\3\u0109"+ "\34\0\5\u010a\13\0\2\u010a\2\0\1\u010a\4\0\1\u010a"+ "\1\0\1\u010a\2\0\1\u010a\2\0\1\u010a\10\0\32\u010b"+ "\1\u0189\53\u010b\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\3\13\1\u018a\1\13"+ "\13\0\26\13\1\0\3\13\46\u010d\1\u0189\37\u010d\52\u010e"+ "\1\u0189\33\u010e\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\11\13"+ "\1\u018b\14\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\11\13\1\u018c\14\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\15\13\1\u018d\10\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\20\13\1\246\5\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\1\13\1\u0155\3\13"+ "\13\0\10\13\1\u018e\5\13\1\u014b\4\13\1\u018f\2\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\12\13"+ "\1\u0190\13\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\3\13\1\u0191\22\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\15\13\1\u0192\10\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\1\u0193\4\13\13\0\1\u0194\1\13"+ "\1\u0195\13\13\1\u0196\1\u0197\6\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\1\13\1\u0155\3\13\13\0\1\13\1\307"+ "\14\13\1\u014b\7\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\4\13\1\u0198\13\0\26\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\1\u0199\4\13\13\0\26\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\1\u019a\1\u019b\3\13\13\0\1\13\1\u019c"+ "\6\13\1\u018e\1\13\1\u019d\10\13\1\u018f\2\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\3\13\1\u019e\1\13\13\0"+ "\26\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\1\u019f\4\13"+ "\13\0\26\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\12\13\1\u01a0\4\13\1\u0115\6\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\11\13\1\251\14\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\1\310"+ "\12\13\1\307\7\13\1\201\2\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\1\13\1\u01a1\24\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\1\13\1\u0119"+ "\24\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\3\13\1\u01a2"+ "\1\13\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\1\246\25\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\4\13\1\246\21\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\11\13\1\u01a3\14\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\4\13"+ "\1\u01a4\21\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\16\13\1\u01a5\7\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\12\13\1\u01a6\13\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\15\13\1\310\10\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\3\13"+ "\1\u0175\22\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\11\13\1\u01a7\14\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\1\13\1\u01a8\3\13\13\0\1\13\1\u019c\24\13"+ "\1\0\3\13\12\0\1\u0130\16\0\1\u0132\21\0\1\u0133"+ "\26\0\1\u0134\106\0\1\u01a9\20\0\1\u01aa\105\0\1\u01ab"+ "\105\0\1\u01ac\127\0\1\u01ad\124\0\1\u013c\106\0\1\u01ae"+ "\62\0\1\u01af\2\0\1\u01ad\124\0\1\u01b0\120\0\1\u01b1"+ "\50\0\1\u01b2\134\0\1\u01ad\21\0\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\15\13\1\u01b3\10\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\12\13\1\u01b4\13\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\17\13\1\u01b5"+ "\6\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ "\2\13\1\310\23\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\17\13\1\u0192\6\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\1\13\1\223\3\13\13\0\26\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\1\u01b6\4\13\13\0\12\13"+ "\1\310\13\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\3\13\1\223\5\13\1\u01b7\14\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\3\13\1\310\1\13\13\0\26\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\1\u01b8\4\13\13\0"+ "\1\u01b9\1\13\1\u0195\13\13\1\u0196\1\u0197\6\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\3\13\1\u0125"+ "\22\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ "\10\13\1\u01ba\15\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\17\13\1\u01bb\6\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\21\13\1\u01bc\4\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\3\13\1\246"+ "\22\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ "\7\13\1\310\16\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\1\13\1\223\24\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\4\13\1\u01bd\13\0\26\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\3\13\1\u01be\22\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\21\13"+ "\1\u01bf\4\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\4\13\1\u0166\21\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\21\13\1\u01c0\4\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\11\13\1\u01c1\14\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\4\13\1\55\13\0"+ "\26\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ "\12\13\1\u0145\13\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\3\13\1\u0192\1\13\13\0\26\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\17\13\1\u01c2\6\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\3\13\1\u01c3"+ "\22\13\1\0\3\13\10\u015a\1\u015c\75\u015a\6\12\1\0"+ "\2\12\2\0\4\12\4\0\1\12\2\0\1\12\5\0"+ "\5\u015b\13\0\2\u015b\2\12\1\u015b\4\12\1\u015b\1\12"+ "\1\u015b\2\12\1\u015b\2\12\1\u015b\4\12\1\0\3\12"+ "\34\0\5\u015c\13\0\2\u015c\2\0\1\u015c\4\0\1\u015c"+ "\1\0\1\u015c\2\0\1\u015c\2\0\1\u015c\10\0\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\1\272\1\u0155\3\13\13\0\10\13\1\u01c4"+ "\5\13\1\u014b\7\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\1\265\4\13\13\0\26\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\4\13\1\310\13\0\13\13\1\u01c5\12\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\14\13\1\310"+ "\11\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ "\1\13\1\310\24\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\1\u01c6\1\310\1\13\1\u01c7\1\13\13\0\1\u01c8\1\13"+ "\1\u01c9\13\13\1\u01ca\1\u01cb\6\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\1\13\1\u012c\3\13\13\0\26\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\3\13\1\u01cc"+ "\7\13\1\u01cd\1\13\1\310\10\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\3\13\1\u01ce\22\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\13\13\1\225"+ "\12\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\1\u012c\4\13"+ "\13\0\26\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\2\13\1\u01cf\23\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\3\13\1\u01d0\5\13\1\u01d1\14\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\3\13"+ "\1\256\22\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\4\13\1\u0163\21\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\11\13\1\u01d2\14\13\1\0\3\13"+ "\6\u016d\1\u01d3\1\u016d\1\u01d4\2\u01d3\4\u016d\4\u01d3\1\u016d"+ "\2\u01d3\1\u016d\3\u01d3\1\0\1\u01d3\5\u016d\13\u01d3\26\u016d"+ "\1\u01d3\3\u016d\32\u016e\1\u01d5\53\u016e\32\u016f\1\0\13\u016f"+ "\1\u01d6\37\u016f\32\u0170\1\0\17\u0170\1\u01d7\33\u0170\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\12\13\1\u01d8\13\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\3\13\1\u01d9\1\13\13\0"+ "\26\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ "\12\13\1\u01da\13\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\12\13\1\u01db\13\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\12\13\1\225\13\13\1\0"+ "\3\13\10\u0176\1\u01dc\75\u0176\6\u0177\1\u01dc\1\u0177\1\u01dd"+ "\2\u01dc\4\u0177\4\u01dc\1\u0177\2\u01dc\1\u0177\5\u01dc\5\u0177"+ "\13\u01dc\26\u0177\1\u01dc\3\u0177\32\u0178\1\u01de\53\u0178\46\u0179"+ "\1\u01de\37\u0179\52\u017a\1\u01de\33\u017a\1\0\5\u017b\5\0"+ "\4\u017b\11\0\1\351\3\0\5\u017b\13\0\26\u017b\1\0"+ "\3\u017b\1\0\5\u017c\5\0\4\u017c\11\0\1\360\3\0"+ "\5\u017c\13\0\26\u017c\1\0\3\u017c\1\0\5\u017e\5\0"+ "\4\u017e\11\0\1\367\3\0\5\u017e\13\0\26\u017e\1\0"+ "\3\u017e\66\0\1\u01df\57\0\1\u01e0\124\0\1\u0188\106\0"+ "\1\u01e1\62\0\1\u01e2\2\0\1\u01e0\124\0\1\u01e3\120\0"+ "\1\u01e4\50\0\1\u01e5\134\0\1\u01e0\55\0\5\u0189\13\0"+ "\2\u0189\1\0\2\u0189\3\0\2\u0189\1\0\1\u0189\2\0"+ "\1\u0189\2\0\1\u0189\10\0\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\4\13\1\251\21\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\1\13\1\225\3\13\13\0\12\13\1\310\13\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\17\13"+ "\1\u01e6\6\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\3\13\1\u01e7\22\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\3\13\1\u01e8\22\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\10\13\1\337\15\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\4\13\1\u01e9\13\0"+ "\26\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\1\13\1\246"+ "\3\13\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\1\13\1\u01ea\1\13\1\u01eb\22\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\10\13\1\u01ec"+ "\5\13\1\u01ed\4\13\1\u01ee\2\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\1\13\1\u01ef\24\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\10\13\1\u01ee"+ "\15\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ "\3\13\1\u01f0\22\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\24\13\1\310\1\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\12\13\1\251\13\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\3\13\1\u01f1"+ "\22\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ "\4\13\1\314\21\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\1\u01a6\25\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\3\13\1\u01ba\22\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\11\13\1\u01d1\14\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\3\13"+ "\1\u0192\22\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\11\13\1\u01f2\14\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\1\13\1\246\24\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\3\13\1\251\22\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\10\13"+ "\1\u01f3\15\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\3\13"+ "\1\u01f4\1\13\13\0\26\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\12\13\1\u0140\13\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\3\13\1\201\22\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\17\13"+ "\1\u01f5\6\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\3\13"+ "\1\u01f6\1\13\13\0\26\13\1\0\3\13\104\0\1\u01f7"+ "\1\u01f8\103\0\1\u01f9\105\0\1\u01fa\105\0\1\u01fb\42\0"+ "\1\u01fc\122\0\1\u01fd\117\0\1\u01ad\103\0\1\u01fe\111\0"+ "\1\u01ad\14\0\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\4\13"+ "\1\u01ff\21\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\1\13\1\u0200\24\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\12\13\1\u0201\13\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\12\13\1\265\13\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\20\13"+ "\1\223\5\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\3\13\1\u01eb\22\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\10\13\1\u0202\12\13\1\u01ee\2\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\13\13"+ "\1\310\12\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\6\13\1\310\17\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\3\13\1\265\22\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\3\13\1\u0203\1\u0120\13\0\1\u0204"+ "\25\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ "\10\13\1\u0205\15\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\10\13\1\201\15\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\11\13\1\u0206\14\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\17\13\1\u0207"+ "\6\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\1\13\1\u0208"+ "\3\13\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\1\13\1\u014c\3\13\13\0\26\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\1\13\1\u0209\24\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\1\13\1\u020a"+ "\1\13\1\u020b\22\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\1\13\1\u020c\24\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\1\u020d\2\13\1\u020e\4\13"+ "\1\u020f\5\13\1\u01ed\4\13\1\u0210\2\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\1\13\1\u0211\24\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\10\13"+ "\1\u0212\15\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\3\13\1\u0213\22\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\4\13\1\u0214\21\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\3\13\1\u0215\1\13\13\0\26\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\17\13"+ "\1\u0161\6\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\11\13\1\u0112\14\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\1\u0216\4\13\13\0\26\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\17\13\1\u012c\6\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\3\13\1\223\1\13\13\0"+ "\3\13\1\310\22\13\1\0\3\13\10\u01d3\1\u0217\21\u01d3"+ "\1\0\53\u01d3\6\u016d\1\u01d3\1\u016d\1\u01d4\2\u01d3\4\u016d"+ "\4\u01d3\1\u016d\2\u01d3\1\u016d\3\u01d3\1\0\1\u01d3\1\u01d4"+ "\1\u016d\3\u01d4\13\u01d3\2\u01d4\2\u016d\1\u01d4\4\u016d\1\u01d4"+ "\1\u016d\1\u01d4\5\u016d\1\u01d4\4\u016d\1\u01d3\3\u016d\34\0"+ "\1\u01d5\1\0\3\u01d5\13\0\2\u01d5\2\0\1\u01d5\4\0"+ "\1\u01d5\1\0\1\u01d5\5\0\1\u01d5\10\0\32\u016f\1\0"+ "\1\u016f\1\u01d6\1\u016f\3\u01d6\5\u016f\1\u01d6\5\u016f\2\u01d6"+ "\2\u016f\1\u01d6\4\u016f\1\u01d6\1\u016f\1\u01d6\5\u016f\1\u01d6"+ "\10\u016f\32\u0170\1\0\1\u0170\1\u01d7\1\u0170\3\u01d7\11\u0170"+ "\1\u01d7\1\u0170\2\u01d7\2\u0170\1\u01d7\4\u0170\1\u01d7\1\u0170"+ "\1\u01d7\5\u0170\1\u01d7\10\u0170\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\3\13\1\u0218\22\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\3\13\1\223\22\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\1\u020d\25\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\4\13\1\u0219"+ "\21\13\1\0\3\13\10\u01dc\1\u01de\75\u01dc\6\12\1\0"+ "\2\12\2\0\4\12\4\0\1\12\2\0\1\12\5\0"+ "\2\u01dd\2\12\1\u01dd\13\0\10\12\1\u01dd\15\12\1\0"+ "\3\12\34\0\2\u01de\2\0\1\u01de\23\0\1\u01de\61\0"+ "\1\u021a\122\0\1\u021b\117\0\1\u01e0\103\0\1\u021c\111\0"+ "\1\u01e0\14\0\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\12\13"+ "\1\256\13\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\12\13\1\u021d\13\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\4\13\1\u0119\21\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\1\13\1\u021e\24\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\1\13\1\u021f\3\13"+ "\13\0\26\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\10\13\1\u0220\15\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\1\13\1\u0221\7\13\1\u0222\14\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\10\13"+ "\1\307\15\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\3\13\1\u0223\22\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\1\u01f0\4\13\13\0\26\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\12\13\1\u01ee\13\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\3\13\1\u012c"+ "\22\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ "\17\13\1\u0224\6\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\1\246\4\13\13\0\26\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\3\13\1\u0119\22\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\1\13\1\u0205\24\13"+ "\1\0\3\13\104\0\1\u0225\1\u0226\104\0\1\u0227\1\u0228"+ "\104\0\1\u0229\1\u022a\61\0\2\u01ad\63\0\1\u022b\140\0"+ "\1\u01ad\12\0\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\16\13"+ "\1\225\7\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\12\13\1\u022c\13\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\1\13\1\u0221\24\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\11\13\1\u022d\14\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\11\13"+ "\1\244\14\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\1\225"+ "\4\13\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\10\13\1\225\15\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\4\13\1\274\13\0\26\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\4\13\1\u0175\21\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\4\13\1\225\13\0"+ "\26\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\1\13\1\u022e"+ "\3\13\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\10\13\1\u022f\15\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\16\13\1\344\7\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\11\13\1\u0119"+ "\14\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ "\3\13\1\u0230\22\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\1\13\1\u0231\7\13\1\u0222\14\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\3\13\1\u0223"+ "\13\13\1\u0232\1\13\1\u020d\4\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\1\u0213\4\13\13\0\26\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\3\13\1\u0223\12\13"+ "\1\u020d\1\u0232\6\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\12\13\1\u0233\13\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\1\13\1\u0234\3\13\13\0\26\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\11\13\1\u0235"+ "\14\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\1\223\4\13"+ "\13\0\26\13\1\0\3\13\10\u01d3\1\u0217\21\u01d3\1\0"+ "\1\u01d3\1\u0217\1\u01d3\3\u0217\13\u01d3\2\u0217\2\u01d3\1\u0217"+ "\4\u01d3\1\u0217\1\u01d3\1\u0217\5\u01d3\1\u0217\10\u01d3\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\13\13\1\u0236\12\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\10\13\1\u0237"+ "\15\13\1\0\3\13\61\0\2\u01e0\63\0\1\u0238\140\0"+ "\1\u01e0\12\0\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\1\u0239"+ "\25\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ "\23\13\1\201\2\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\15\13\1\u023a\10\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\7\13\1\u01ee\16\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\12\13\1\u023b"+ "\13\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ "\1\13\1\u023c\24\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\17\13\1\246\6\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\21\13\1\u01d9\4\13\1\0"+ "\3\13\31\0\1\u01f7\105\0\1\u01f8\127\0\1\u023d\105\0"+ "\1\u023e\134\0\1\u01f7\105\0\1\u01f8\70\0\1\u023f\20\0"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\24\13\1\244\1\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\17\13"+ "\1\u0240\6\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\15\13\1\u0241\10\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\7\13\1\u0242\16\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\10\13\1\u0243\15\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\12\13"+ "\1\u0244\13\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\4\13\1\u01ba\21\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\3\13\1\u0223\10\13\1\u0245\11\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\2\13"+ "\1\223\23\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\17\13\1\225\6\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\3\13\1\u0246\22\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\10\13\1\u0247\15\13"+ "\1\0\3\13\65\0\1\u0248\20\0\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\4\13\1\u0120\21\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\1\13\1\u0125\24\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\1\13\1\u01ee"+ "\24\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ "\10\13\1\u0249\15\13\1\0\3\13\73\0\1\u024a\12\0"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\3\13\1\310\11\13"+ "\1\310\10\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\1\13\1\u0125\15\13\1\u0151\6\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\3\13\1\u0223\10\13"+ "\1\u024b\11\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\17\13\1\u0151\6\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\1\13\1\u024c\24\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\24\13\1\u024d\1\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\12\13"+ "\1\u024e\13\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\4\13\1\u0198\21\13\1\0\3\13\73\0\1\u024f"+ "\12\0\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\5\13\13\0\11\13\1\u0250"+ "\14\13\1\0\3\13\72\0\1\u01ad\13\0\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\24\13\1\u0251\1\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\3\13\1\u0223\10\13"+ "\1\u0252\11\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ "\13\0\4\13\1\u0253\12\13\1\u0151\6\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\4\13\1\310\21\13"+ "\1\0\3\13\72\0\1\u01e0\13\0\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\12\13\1\u0198\13\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\1\u0254\16\13\1\u0151\6\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\24\13"+ "\1\u0255\1\13\1\0\3\13\1\12\5\13\1\0\2\12"+ "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\4\13"+ "\1\u0256\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ "\5\13\13\0\1\13\1\204\24\13\1\0\3\13\1\12"+ "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ "\1\12\5\0\5\13\13\0\17\13\1\u0257\6\13\1\0"+ "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ "\1\12\2\0\1\12\5\0\4\13\1\251\13\0\26\13"+ "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\4\13"+ "\1\u0166\14\13\1\u0258\4\13\1\0\3\13\1\12\5\13"+ "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ "\5\0\5\13\13\0\13\13\1\u0259\12\13\1\0\3\13"+ "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ "\2\0\1\12\5\0\5\13\13\0\14\13\1\u01a2\11\13"+ "\1\0\3\13"; private static int [] zzUnpackTrans() { int [] result = new int[38500]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\11\0\4\1\1\11\1\1\1\11\3\1\2\11\4\1"+ "\1\11\15\1\1\11\1\1\1\11\24\1\1\11\2\1"+ "\1\11\3\1\1\11\2\1\2\11\1\1\1\11\3\1"+ "\1\11\1\1\1\11\5\1\1\11\1\1\1\11\1\1"+ "\1\11\2\1\1\11\15\1\1\0\1\1\1\0\1\1"+ "\1\11\1\1\3\0\1\1\1\0\2\1\2\0\34\1"+ "\10\0\43\1\1\0\1\1\2\0\32\1\3\0\1\1"+ "\1\11\2\1\1\0\1\11\1\1\1\0\1\11\2\1"+ "\1\0\1\11\1\1\1\0\3\1\1\0\1\11\1\1"+ "\1\0\3\1\10\0\1\1\1\0\2\1\1\0\1\1"+ "\1\0\1\1\2\0\41\1\15\0\35\1\1\0\23\1"+ "\3\0\5\1\1\0\1\1\5\0\1\1\1\0\1\1"+ "\11\0\40\1\4\0\1\11\5\0\40\1\1\0\10\1"+ "\1\0\2\1\2\11\5\0\21\1\2\11\6\0\33\1"+ "\3\0\10\1\7\0\14\1\1\0\4\1\2\11\1\0"+ "\10\1\1\0\1\1\1\0\4\1\1\0\12\1"; private static int [] zzUnpackAttribute() { int [] result = new int[601]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Token type specific to PerlTokenMaker; this signals that we are inside * an unquoted/double quoted/backtick EOF heredoc. */ public static final int INTERNAL_HEREDOC_EOF_UNQUOTED = -1; /** * Token type specific to PerlTokenMaker; this signals that we are inside * an single quoted EOF heredoc. */ public static final int INTERNAL_HEREDOC_EOF_SINGLE_QUOTED = -2; /** * Token type specific to PerlTokenMaker; this signals that we are inside * an unquoted/double quoted/backtick EOT heredoc. */ public static final int INTERNAL_HEREDOC_EOT_UNQUOTED = -3; /** * Token type specific to PerlTokenMaker; this signals that we are inside * an single quoted EOT heredoc. */ public static final int INTERNAL_HEREDOC_EOT_SINGLE_QUOTED = -4; /** * Token type specific to PerlTokenMaker; this signals we are in a POD * block. */ public static final int INTERNAL_POD = -5; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public PerlTokenMaker() { } /** * Adds the token specified to the current linked list of tokens as an * "end token;" that is, at zzMarkedPos. * * @param tokenType The token's type. */ private void addEndToken(int tokenType) { addToken(zzMarkedPos,zzMarkedPos, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "#", null }; } /** * {@inheritDoc} */ @Override public boolean getMarkOccurrencesOfTokenType(int type) { return super.getMarkOccurrencesOfTokenType(type) || type==Token.VARIABLE; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.LITERAL_STRING_DOUBLE_QUOTE: state = STRING; start = text.offset; break; case Token.LITERAL_CHAR: state = CHAR_LITERAL; start = text.offset; break; case Token.LITERAL_BACKQUOTE: state = BACKTICKS; start = text.offset; break; case INTERNAL_HEREDOC_EOF_UNQUOTED: state = HEREDOC_EOF_UNQUOTED; start = text.offset; break; case INTERNAL_HEREDOC_EOF_SINGLE_QUOTED: state = HEREDOC_EOF_SINGLE_QUOTED; start = text.offset; break; case INTERNAL_HEREDOC_EOT_UNQUOTED: state = HEREDOC_EOT_UNQUOTED; start = text.offset; break; case INTERNAL_HEREDOC_EOT_SINGLE_QUOTED: state = HEREDOC_EOT_SINGLE_QUOTED; start = text.offset; break; case INTERNAL_POD: state = POD; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Returns whether a regular expression token can follow the specified * token. * * @param t The token to check, which may be null. * @return Whether a regular expression token may follow this one. */ private static final boolean regexCanFollow(Token t) { char ch; // We basically try to mimic Eclipse's JS editor's behavior here. return t==null || //t.isOperator() || (t.length()==1 && ( (ch=t.charAt(0))=='=' || ch=='(' || ch==',' || ch=='?' || ch==':' || ch=='[' || ch=='!' || ch=='&' )) || /* Operators "==", "===", "!=", "!==", etc. */ (t.getType()==Token.OPERATOR && ((ch=t.charAt(t.length()-1))=='=' || ch=='~')); } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public PerlTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public PerlTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 174) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 2: { addToken(Token.IDENTIFIER); } case 46: break; case 34: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } case 47: break; case 40: { if (start==zzStartRead) { addToken(Token.COMMENT_DOCUMENTATION); yybegin(YYINITIAL); } } case 48: break; case 26: { addToken(Token.ERROR_NUMBER_FORMAT); } case 49: break; case 11: { start = zzMarkedPos-1; yybegin(STRING); } case 50: break; case 38: { if (start==zzStartRead) { addToken(Token.PREPROCESSOR); addNullToken(); return firstToken; } } case 51: break; case 31: { addToken(Token.FUNCTION); } case 52: break; case 36: { boolean highlightedAsRegex = false; if (firstToken==null) { addToken(Token.REGEX); highlightedAsRegex = true; } else { // If this is *likely* to be a regex, based on // the previous token, highlight it as such. Token t = firstToken.getLastNonCommentNonWhitespaceToken(); if (regexCanFollow(t)) { addToken(Token.REGEX); highlightedAsRegex = true; } } // If it doesn't *appear* to be a regex, highlight it as // individual tokens. if (!highlightedAsRegex) { int temp = zzStartRead + 1; addToken(zzStartRead, zzStartRead, Token.OPERATOR); zzStartRead = zzCurrentPos = zzMarkedPos = temp; } } case 53: break; case 30: { addToken(Token.VARIABLE); } case 54: break; case 1: { addToken(Token.ERROR_IDENTIFIER); } case 55: break; case 24: { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); return firstToken; } case 56: break; case 4: { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; } case 57: break; case 29: { addToken(Token.PREPROCESSOR); addNullToken(); return firstToken; } case 58: break; case 41: { if (start==zzStartRead) { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } } case 59: break; case 44: { start = zzStartRead; yybegin(HEREDOC_EOF_SINGLE_QUOTED); } case 60: break; case 45: { start = zzStartRead; yybegin(HEREDOC_EOT_SINGLE_QUOTED); } case 61: break; case 42: { start = zzStartRead; yybegin(HEREDOC_EOF_UNQUOTED); } case 62: break; case 13: { /* Skip escaped chars. */ } case 63: break; case 37: { addToken(Token.REGEX); } case 64: break; case 18: { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); } case 65: break; case 28: { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } case 66: break; case 21: { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_UNQUOTED); return firstToken; } case 67: break; case 6: { addToken(Token.WHITESPACE); } case 68: break; case 10: { start = zzMarkedPos-1; yybegin(CHAR_LITERAL); } case 69: break; case 3: { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } case 70: break; case 33: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } case 71: break; case 20: { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); } case 72: break; case 15: { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } case 73: break; case 16: { /* Skip escaped single quotes only, but this should still work. */ } case 74: break; case 23: { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_UNQUOTED); return firstToken; } case 75: break; case 35: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.PREPROCESSOR); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } case 76: break; case 39: { addToken(Token.COMMENT_EOL); start = zzMarkedPos; yybegin(POD); } case 77: break; case 32: { addToken(Token.RESERVED_WORD); } case 78: break; case 19: { addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; } case 79: break; case 8: { addToken(Token.SEPARATOR); } case 80: break; case 5: { addNullToken(); return firstToken; } case 81: break; case 7: { addToken(Token.OPERATOR); } case 82: break; case 17: { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } case 83: break; case 25: { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_POD); return firstToken; } case 84: break; case 27: { addToken(Token.LITERAL_NUMBER_FLOAT); } case 85: break; case 43: { start = zzStartRead; yybegin(HEREDOC_EOT_UNQUOTED); } case 86: break; case 9: { start = zzMarkedPos-1; yybegin(BACKTICKS); } case 87: break; case 12: { } case 88: break; case 14: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } case 89: break; case 22: { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); return firstToken; } case 90: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case HEREDOC_EOF_SINGLE_QUOTED: { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); return firstToken; } case 602: break; case HEREDOC_EOT_SINGLE_QUOTED: { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); return firstToken; } case 603: break; case HEREDOC_EOT_UNQUOTED: { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_UNQUOTED); return firstToken; } case 604: break; case STRING: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } case 605: break; case BACKTICKS: { addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; } case 606: break; case YYINITIAL: { addNullToken(); return firstToken; } case 607: break; case HEREDOC_EOF_UNQUOTED: { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_UNQUOTED); return firstToken; } case 608: break; case CHAR_LITERAL: { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } case 609: break; case POD: { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_POD); return firstToken; } case 610: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PlainTextTokenMaker.flex000066400000000000000000000161371257417003700325110ustar00rootroot00000000000000/* * 11/07/2008 * * PlainTextTokenMaker.flex - Scanner for plain text files. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for plain text files. * * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker), so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated PlainTextTokenMaker.java file will contain * two definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.5 * */ %% %public %class PlainTextTokenMaker %extends AbstractJFlexTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public PlainTextTokenMaker() { } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @param link Whether this token is a hyperlink. */ private void addToken(int tokenType, boolean link) { int so = zzStartRead + offsetShift; super.addToken(zzBuffer, zzStartRead,zzMarkedPos-1, tokenType, so, link); zzStartRead = zzMarkedPos; } /** * Always returns Token.NULL, as there are no multiline * tokens in properties files. * * @param text The line of tokens to examine. * @param initialTokenType The token type to start with (i.e., the value * of getLastTokenTypeOnLine for the line before * text). * @return Token.NULL. */ public int getLastTokenTypeOnLine(Segment text, int initialTokenType) { return Token.NULL; } /** * Returns the text to place at the beginning and end of a * line to "comment" it in a this programming language. * * @return null, as there are no comments in plain text. */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return null; } /** * Always returns false, as you never want "mark occurrences" * working in plain text files. * * @param type The token type. * @return Whether tokens of this type should have "mark occurrences" * enabled. */ public boolean getMarkOccurrencesOfTokenType(int type) { return false; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. s = text; try { yyreset(zzReader); yybegin(YYINITIAL); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. * @exception IOException if any I/O-Error occurs. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} LetterOrDigit = ([a-zA-Z0-9]) Identifier = ({LetterOrDigit}+) Separator = ([^a-zA-Z0-9 \t\n]) WhiteSpace = ([ \t]+) LineTerminator = ([\n]) URLGenDelim = ([:\/\?#\[\]@]) URLSubDelim = ([\!\$&'\(\)\*\+,;=]) URLUnreserved = ({LetterOrDigit}|[_\-\.\~]) URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) URLCharacters = ({URLCharacter}*) URLEndCharacter = ([\/\$]|{LetterOrDigit}) URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) %% { {URL} { addToken(Token.IDENTIFIER, true); } {Identifier} { addToken(Token.IDENTIFIER, false); } {Separator} { addToken(Token.IDENTIFIER, false); } {WhiteSpace} { addToken(Token.WHITESPACE, false); } {LineTerminator} { addNullToken(); return firstToken; } <> { addNullToken(); return firstToken; } . { /* Never happens */ addToken(Token.IDENTIFIER, false); } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PlainTextTokenMaker.java000066400000000000000000000453351257417003700324760ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 12/9/11 6:40 PM */ /* * 11/07/2008 * * PlainTextTokenMaker.flex - Scanner for plain text files. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for plain text files. * * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker), so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated PlainTextTokenMaker.java file will contain * two definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.5 * */ public class PlainTextTokenMaker extends AbstractJFlexTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int YYINITIAL = 0; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\3\1\2\25\0\1\3\1\4\1\0\1\4\1\6\1\4"+ "\7\4\1\4\1\21\1\5\12\1\1\17\1\4\1\0\1\4\1\0"+ "\2\4\32\1\1\4\1\0\1\4\1\0\1\4\1\0\4\1\1\16"+ "\1\13\1\1\1\7\1\14\2\1\1\15\3\1\1\11\2\1\1\12"+ "\1\10\2\1\1\20\3\1\3\0\1\4\uff81\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\1\0\2\1\1\2\1\3\14\1\1\0\1\4\2\0"; private static int [] zzUnpackAction() { int [] result = new int[21]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\22\0\44\0\22\0\66\0\110\0\132\0\154"+ "\0\176\0\220\0\242\0\264\0\306\0\330\0\352\0\374"+ "\0\u010e\0\u0120\0\u0132\0\u0144\0\u0132"; private static int [] zzUnpackRowMap() { int [] result = new int[21]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\2\1\3\1\4\1\5\3\2\1\6\3\3\1\7"+ "\3\3\1\2\1\10\1\2\23\0\1\3\5\0\10\3"+ "\1\0\1\3\4\0\1\5\17\0\1\3\5\0\1\3"+ "\1\11\6\3\1\0\1\3\2\0\1\3\5\0\1\3"+ "\1\12\3\3\1\13\2\3\1\0\1\3\2\0\1\3"+ "\5\0\10\3\1\0\1\14\2\0\1\3\5\0\1\3"+ "\1\15\6\3\1\0\1\3\2\0\1\3\5\0\2\3"+ "\1\16\5\3\1\0\1\3\2\0\1\3\5\0\6\3"+ "\1\17\1\3\1\0\1\3\2\0\1\3\5\0\10\3"+ "\1\0\1\20\2\0\1\3\5\0\2\3\1\21\5\3"+ "\1\0\1\3\2\0\1\3\5\0\10\3\1\22\1\3"+ "\2\0\1\3\5\0\7\3\1\16\1\0\1\3\2\0"+ "\1\3\5\0\10\3\1\0\1\3\1\23\1\0\1\3"+ "\5\0\3\3\1\16\4\3\1\22\1\3\6\0\1\24"+ "\15\0\1\23\2\0\1\25\12\23\1\25\1\23\1\25"+ "\5\0\1\23\14\0"; private static int [] zzUnpackTrans() { int [] result = new int[342]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\1\0\1\11\1\1\1\11\15\1\1\0\1\1\2\0"; private static int [] zzUnpackAttribute() { int [] result = new int[21]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public PlainTextTokenMaker() { } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @param link Whether this token is a hyperlink. */ private void addToken(int tokenType, boolean link) { int so = zzStartRead + offsetShift; super.addToken(zzBuffer, zzStartRead,zzMarkedPos-1, tokenType, so, link); zzStartRead = zzMarkedPos; } /** * Always returns Token.NULL, as there are no multiline * tokens in properties files. * * @param text The line of tokens to examine. * @param initialTokenType The token type to start with (i.e., the value * of getLastTokenTypeOnLine for the line before * text). * @return Token.NULL. */ @Override public int getLastTokenTypeOnLine(Segment text, int initialTokenType) { return Token.NULL; } /** * Returns the text to place at the beginning and end of a * line to "comment" it in a this programming language. * * @return null, as there are no comments in plain text. */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return null; } /** * Always returns false, as you never want "mark occurrences" * working in plain text files. * * @param type The token type. * @return Whether tokens of this type should have "mark occurrences" * enabled. */ @Override public boolean getMarkOccurrencesOfTokenType(int type) { return false; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. s = text; try { yyreset(zzReader); yybegin(YYINITIAL); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. * @exception IOException if any I/O-Error occurs. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public PlainTextTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public PlainTextTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 94) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 3: { addToken(Token.WHITESPACE, false); } case 5: break; case 2: { addNullToken(); return firstToken; } case 6: break; case 4: { addToken(Token.IDENTIFIER, true); } case 7: break; case 1: { addToken(Token.IDENTIFIER, false); } case 8: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case YYINITIAL: { addNullToken(); return firstToken; } case 22: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PropertiesFileTokenMaker.flex000066400000000000000000000162401257417003700335300ustar00rootroot00000000000000/* * 03/21/2005 * * PropertiesFileTokenMaker.java - Scanner for properties files. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * This class splits up text into tokens representing a Java properties file.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated PropertiesFileTokenMaker.java file will * contain two definitions of both zzRefill and * yyreset. You should hand-delete the second of each * definition (the ones generated by the lexer), as these generated * methods modify the input buffer, which we'll never have to do. *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway. *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance. *
* * @author Robert Futrell * @version 0.4 * */ %% %public %class PropertiesFileTokenMaker %extends AbstractJFlexTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public PropertiesFileTokenMaker() { super(); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "#", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.LITERAL_STRING_DOUBLE_QUOTE: state = VALUE; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. * @exception IOException if any I/O-Error occurs. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} Equals = ([=\:]) Name = ([^=\: \t\n#!]*) Whitespace = ([ \t]+) Comment = ([#!].*) SingleQuote = (') %state VALUE %% { {Name} { addToken(Token.RESERVED_WORD); } {Equals} { start = zzMarkedPos; addToken(Token.OPERATOR); yybegin(VALUE); } {Whitespace} { addToken(Token.WHITESPACE); } {Comment} { addToken(Token.COMMENT_EOL); } <> { addNullToken(); return firstToken; } } { {SingleQuote}[^']*{SingleQuote}? { addToken(start, zzMarkedPos-1, Token.LITERAL_STRING_DOUBLE_QUOTE); start = zzMarkedPos; } [^'\{\\]+ {} "{"[^\}]*"}"? { int temp=zzStartRead; addToken(start, zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp, zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } [\\]. {} [\\] { addToken(start, zzEndRead, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addNullToken(); return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PropertiesFileTokenMaker.java000066400000000000000000000457251257417003700335250ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 1/28/11 4:16 PM */ /* * 03/21/2005 * * PropertiesFileTokenMaker.java - Scanner for properties files. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * This class splits up text into tokens representing a Java properties file.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated PropertiesFileTokenMaker.java file will * contain two definitions of both zzRefill and * yyreset. You should hand-delete the second of each * definition (the ones generated by the lexer), as these generated * methods modify the input buffer, which we'll never have to do. *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway. *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance. *
* * @author Robert Futrell * @version 0.4 * */ public class PropertiesFileTokenMaker extends AbstractJFlexTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** initial size of the lookahead buffer */ private static final int ZZ_BUFFERSIZE = 16384; /** lexical states */ public static final int YYINITIAL = 0; public static final int VALUE = 1; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\3\1\2\25\0\1\3\1\4\1\0\1\4\3\0\1\5"+ "\22\0\1\1\2\0\1\1\36\0\1\6\36\0\1\7\1\0\1\10"+ "\uff82\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\1\1\1\0\1\1\1\2\1\3\1\4\1\5\1\6"+ "\1\7\1\10\1\6\1\5\1\10"; private static int [] zzUnpackAction() { int [] result = new int[13]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\11\0\22\0\33\0\44\0\55\0\66\0\77"+ "\0\110\0\121\0\33\0\33\0\33"; private static int [] zzUnpackRowMap() { int [] result = new int[13]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\3\1\4\1\0\1\5\1\6\4\3\5\7\1\10"+ "\1\11\1\12\1\7\1\3\4\0\4\3\14\0\1\5"+ "\5\0\2\6\1\0\6\6\5\7\3\0\1\7\5\10"+ "\1\13\3\10\2\14\1\0\6\14\10\12\1\15"; private static int [] zzUnpackTrans() { int [] result = new int[90]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\1\1\1\0\1\1\1\11\6\1\3\11"; private static int [] zzUnpackAttribute() { int [] result = new int[13]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public PropertiesFileTokenMaker() { super(); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "#", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.LITERAL_STRING_DOUBLE_QUOTE: state = VALUE; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. * @exception IOException if any I/O-Error occurs. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public PropertiesFileTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public PropertiesFileTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 42) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 7: { addToken(start, zzEndRead, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } case 9: break; case 2: { start = zzMarkedPos; addToken(Token.OPERATOR); yybegin(VALUE); } case 10: break; case 8: { int temp=zzStartRead; addToken(start, zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp, zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } case 11: break; case 3: { addToken(Token.WHITESPACE); } case 12: break; case 6: { addToken(start, zzMarkedPos-1, Token.LITERAL_STRING_DOUBLE_QUOTE); start = zzMarkedPos; } case 13: break; case 1: { addToken(Token.RESERVED_WORD); } case 14: break; case 5: { } case 15: break; case 4: { addToken(Token.COMMENT_EOL); } case 16: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case YYINITIAL: { addNullToken(); return firstToken; } case 14: break; case VALUE: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addNullToken(); return firstToken; } case 15: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PythonTokenMaker.flex000066400000000000000000000364331257417003700320630ustar00rootroot00000000000000/* * 12/06/2005 * * PythonTokenMaker.java - Token maker for the Python programming language. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.AbstractJFlexTokenMaker; import org.fife.ui.rsyntaxtextarea.Token; import org.fife.ui.rsyntaxtextarea.TokenMaker; /** * Scanner for the Python programming language. * * @author Robert Futrell * @version 0.3 */ %% %public %class PythonTokenMaker %extends AbstractJFlexTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public PythonTokenMaker() { super(); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "#", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.LITERAL_STRING_DOUBLE_QUOTE: state = LONG_STRING_2; break; case Token.LITERAL_CHAR: state = LONG_STRING_1; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } %} /* This part is taken from http://www.python.org/doc/2.2.3/ref/grammar.txt */ identifier = (({letter}|"_")({letter}|{digit}|"_")*) letter = ({lowercase}|{uppercase}) lowercase = ([a-z]) uppercase = ([A-Z]) digit = ([0-9]) stringliteral = ({stringprefix}?{shortstring}) stringprefix = ("r"|"u"[rR]?|"R"|"U"[rR]?) shortstring1 = ([\']{shortstring1item}*[\']?) shortstring2 = ([\"]{shortstring2item}*[\"]?) shortstring = ({shortstring1}|{shortstring2}) shortstring1item = ({shortstring1char}|{escapeseq}) shortstring2item = ({shortstring2char}|{escapeseq}) shortstring1char = ([^\\\n\']) shortstring2char = ([^\\\n\"]) escapeseq = ([\\].) longinteger = ({integer}[lL]) integer = ({decimalinteger}|{octinteger}|{hexinteger}) decimalinteger = ({nonzerodigit}{digit}*|"0") octinteger = ("0"{octdigit}+) hexinteger = ("0"[xX]{hexdigit}+) nonzerodigit = ([1-9]) octdigit = ([0-7]) hexdigit = ({digit}|[a-f]|[A-F]) floatnumber = ({pointfloat}|{exponentfloat}) pointfloat = ({intpart}?{fraction}|{intpart}".") exponentfloat = (({intpart}|{pointfloat}){exponent}) intpart = ({digit}+) fraction = ("."{digit}+) exponent = ([eE][\+\-]?{digit}+) imagnumber = (({floatnumber}|{intpart})[jJ]) ErrorNumberFormat = ({digit}{NonSeparator}+) NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#") LongStringStart1 = ({stringprefix}?\'\'\') LongStringStart2 = ({stringprefix}?\"\"\") LineTerminator = (\n) WhiteSpace = ([ \t\f]) LineComment = ("#".*) %state LONG_STRING_1 %state LONG_STRING_2 %% /* Keywords */ "and" { addToken(Token.RESERVED_WORD); } "as" { addToken(Token.RESERVED_WORD); } "assert" { addToken(Token.RESERVED_WORD); } "break" { addToken(Token.RESERVED_WORD); } "class" { addToken(Token.RESERVED_WORD); } "continue" { addToken(Token.RESERVED_WORD); } "def" { addToken(Token.RESERVED_WORD); } "del" { addToken(Token.RESERVED_WORD); } "elif" { addToken(Token.RESERVED_WORD); } "else" { addToken(Token.RESERVED_WORD); } "except" { addToken(Token.RESERVED_WORD); } "exec" { addToken(Token.RESERVED_WORD); } "finally" { addToken(Token.RESERVED_WORD); } "for" { addToken(Token.RESERVED_WORD); } "from" { addToken(Token.RESERVED_WORD); } "global" { addToken(Token.RESERVED_WORD); } "if" { addToken(Token.RESERVED_WORD); } "import" { addToken(Token.RESERVED_WORD); } "in" { addToken(Token.RESERVED_WORD); } "is" { addToken(Token.RESERVED_WORD); } "lambda" { addToken(Token.RESERVED_WORD); } "not" { addToken(Token.RESERVED_WORD); } "or" { addToken(Token.RESERVED_WORD); } "pass" { addToken(Token.RESERVED_WORD); } "print" { addToken(Token.RESERVED_WORD); } "raise" { addToken(Token.RESERVED_WORD); } "return" { addToken(Token.RESERVED_WORD); } "try" { addToken(Token.RESERVED_WORD); } "while" { addToken(Token.RESERVED_WORD); } "yield" { addToken(Token.RESERVED_WORD); } /* Data types. */ "char" { addToken(Token.DATA_TYPE); } "double" { addToken(Token.DATA_TYPE); } "float" { addToken(Token.DATA_TYPE); } "int" { addToken(Token.DATA_TYPE); } "long" { addToken(Token.DATA_TYPE); } "short" { addToken(Token.DATA_TYPE); } "signed" { addToken(Token.DATA_TYPE); } "unsigned" { addToken(Token.DATA_TYPE); } "void" { addToken(Token.DATA_TYPE); } /* Standard functions */ "abs" { addToken(Token.FUNCTION); } "apply" { addToken(Token.FUNCTION); } "bool" { addToken(Token.FUNCTION); } "buffer" { addToken(Token.FUNCTION); } "callable" { addToken(Token.FUNCTION); } "chr" { addToken(Token.FUNCTION); } "classmethod" { addToken(Token.FUNCTION); } "cmp" { addToken(Token.FUNCTION); } "coerce" { addToken(Token.FUNCTION); } "compile" { addToken(Token.FUNCTION); } "complex" { addToken(Token.FUNCTION); } "delattr" { addToken(Token.FUNCTION); } "dict" { addToken(Token.FUNCTION); } "dir" { addToken(Token.FUNCTION); } "divmod" { addToken(Token.FUNCTION); } "enumerate" { addToken(Token.FUNCTION); } "eval" { addToken(Token.FUNCTION); } "execfile" { addToken(Token.FUNCTION); } "file" { addToken(Token.FUNCTION); } "filter" { addToken(Token.FUNCTION); } "float" { addToken(Token.FUNCTION); } "getattr" { addToken(Token.FUNCTION); } "globals" { addToken(Token.FUNCTION); } "hasattr" { addToken(Token.FUNCTION); } "hash" { addToken(Token.FUNCTION); } "hex" { addToken(Token.FUNCTION); } "id" { addToken(Token.FUNCTION); } "input" { addToken(Token.FUNCTION); } "int" { addToken(Token.FUNCTION); } "intern" { addToken(Token.FUNCTION); } "isinstance" { addToken(Token.FUNCTION); } "issubclass" { addToken(Token.FUNCTION); } "iter" { addToken(Token.FUNCTION); } "len" { addToken(Token.FUNCTION); } "list" { addToken(Token.FUNCTION); } "locals" { addToken(Token.FUNCTION); } "long" { addToken(Token.FUNCTION); } "map" { addToken(Token.FUNCTION); } "max" { addToken(Token.FUNCTION); } "min" { addToken(Token.FUNCTION); } "object" { addToken(Token.FUNCTION); } "oct" { addToken(Token.FUNCTION); } "open" { addToken(Token.FUNCTION); } "ord" { addToken(Token.FUNCTION); } "pow" { addToken(Token.FUNCTION); } "property" { addToken(Token.FUNCTION); } "range" { addToken(Token.FUNCTION); } "raw_input" { addToken(Token.FUNCTION); } "reduce" { addToken(Token.FUNCTION); } "reload" { addToken(Token.FUNCTION); } "repr" { addToken(Token.FUNCTION); } "round" { addToken(Token.FUNCTION); } "setattr" { addToken(Token.FUNCTION); } "slice" { addToken(Token.FUNCTION); } "staticmethod" { addToken(Token.FUNCTION); } "str" { addToken(Token.FUNCTION); } "sum" { addToken(Token.FUNCTION); } "super" { addToken(Token.FUNCTION); } "tuple" { addToken(Token.FUNCTION); } "type" { addToken(Token.FUNCTION); } "unichr" { addToken(Token.FUNCTION); } "unicode" { addToken(Token.FUNCTION); } "vars" { addToken(Token.FUNCTION); } "xrange" { addToken(Token.FUNCTION); } "zip" { addToken(Token.FUNCTION); } { {LineTerminator} { addNullToken(); return firstToken; } {identifier} { addToken(Token.IDENTIFIER); } {WhiteSpace}+ { addToken(Token.WHITESPACE); } /* String/Character Literals. */ {stringliteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } {LongStringStart1} { yybegin(LONG_STRING_1); addToken(Token.LITERAL_CHAR); } {LongStringStart2} { yybegin(LONG_STRING_2); addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } /* Comment Literals. */ {LineComment} { addToken(Token.COMMENT_EOL); } /* Separators. */ "(" { addToken(Token.SEPARATOR); } ")" { addToken(Token.SEPARATOR); } "[" { addToken(Token.SEPARATOR); } "]" { addToken(Token.SEPARATOR); } "{" { addToken(Token.SEPARATOR); } "}" { addToken(Token.SEPARATOR); } /* Operators. */ "=" { addToken(Token.OPERATOR); } "+" { addToken(Token.OPERATOR); } "-" { addToken(Token.OPERATOR); } "*" { addToken(Token.OPERATOR); } "/" { addToken(Token.OPERATOR); } "%" { addToken(Token.OPERATOR); } "**" { addToken(Token.OPERATOR); } "~" { addToken(Token.OPERATOR); } "<" { addToken(Token.OPERATOR); } ">" { addToken(Token.OPERATOR); } "<<" { addToken(Token.OPERATOR); } ">>" { addToken(Token.OPERATOR); } "==" { addToken(Token.OPERATOR); } "+=" { addToken(Token.OPERATOR); } "-=" { addToken(Token.OPERATOR); } "*=" { addToken(Token.OPERATOR); } "/=" { addToken(Token.OPERATOR); } "%=" { addToken(Token.OPERATOR); } ">>=" { addToken(Token.OPERATOR); } "<<=" { addToken(Token.OPERATOR); } "^" { addToken(Token.OPERATOR); } "&" { addToken(Token.OPERATOR); } "&&" { addToken(Token.OPERATOR); } "|" { addToken(Token.OPERATOR); } "||" { addToken(Token.OPERATOR); } "?" { addToken(Token.OPERATOR); } ":" { addToken(Token.OPERATOR); } "," { addToken(Token.OPERATOR); } "!" { addToken(Token.OPERATOR); } "++" { addToken(Token.OPERATOR); } "--" { addToken(Token.OPERATOR); } "." { addToken(Token.OPERATOR); } "," { addToken(Token.OPERATOR); } /* Numbers */ {longinteger}|{integer} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {floatnumber}|{imagnumber} { addToken(Token.LITERAL_NUMBER_FLOAT); } {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } /* Other punctuation, we'll highlight it as "identifiers." */ "@" { addToken(Token.IDENTIFIER); } ";" { addToken(Token.IDENTIFIER); } /* Ended with a line not in a string or comment. */ <> { addNullToken(); return firstToken; } /* Catch any other (unhandled) characters and flag them as bad. */ . { addToken(Token.ERROR_IDENTIFIER); } } { [^\']+ { addToken(Token.LITERAL_CHAR); } "'''" { yybegin(YYINITIAL); addToken(Token.LITERAL_CHAR); } "'" { addToken(Token.LITERAL_CHAR); } <> { if (firstToken==null) { addToken(Token.LITERAL_CHAR); } return firstToken; } } { [^\"]+ { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } \"\"\" { yybegin(YYINITIAL); addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } \" { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } <> { if (firstToken==null) { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PythonTokenMaker.java000066400000000000000000001122741257417003700320440ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 10/16/06 10:31 AM */ /* * 12/06/2005 * * PythonTokenMaker.java - Token maker for the Python programming language. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.AbstractJFlexTokenMaker; import org.fife.ui.rsyntaxtextarea.Token; import org.fife.ui.rsyntaxtextarea.TokenImpl; /** * Scanner for the Python programming language. * * @author Robert Futrell * @version 0.3 */ public class PythonTokenMaker extends AbstractJFlexTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int YYINITIAL = 0; public static final int LONG_STRING_2 = 2; public static final int LONG_STRING_1 = 1; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\34\1\12\1\0\1\34\1\32\22\0\1\34\1\64\1\11"+ "\1\33\1\0\1\63\1\67\1\10\1\57\1\57\1\62\1\61\1\64"+ "\1\27\1\24\1\63\1\16\7\21\2\3\1\64\1\72\1\65\1\60"+ "\1\66\1\64\1\71\4\23\1\26\1\23\3\2\1\31\1\2\1\15"+ "\5\2\1\6\2\2\1\7\2\2\1\20\2\2\1\57\1\13\1\57"+ "\1\64\1\1\1\0\1\35\1\42\1\44\1\37\1\25\1\22\1\52"+ "\1\54\1\46\1\30\1\43\1\14\1\51\1\36\1\45\1\47\1\2"+ "\1\4\1\40\1\41\1\5\1\55\1\53\1\17\1\50\1\56\1\57"+ "\1\70\1\57\1\64\uff81\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\3\0\1\1\1\2\1\3\4\2\2\4\1\5\1\2"+ "\1\3\2\2\1\6\1\2\1\6\1\7\1\10\21\2"+ "\1\11\10\6\1\2\2\12\2\4\1\13\1\3\1\14"+ "\1\13\1\14\4\2\2\4\1\0\2\4\1\0\4\2"+ "\1\13\1\3\1\13\12\2\1\15\27\2\1\15\3\2"+ "\2\15\1\16\1\15\15\2\3\0\2\14\1\0\12\2"+ "\1\4\1\17\1\20\3\2\1\3\15\2\1\15\22\2"+ "\1\21\14\2\1\22\1\23\1\14\6\2\1\21\3\2"+ "\1\15\36\2\1\15\17\2\1\15\6\2"; private static int [] zzUnpackAction() { int [] result = new int[265]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\73\0\166\0\261\0\354\0\u0127\0\u0162\0\u019d"+ "\0\u01d8\0\u0213\0\u024e\0\u0289\0\261\0\u02c4\0\u02ff\0\u033a"+ "\0\u0375\0\u03b0\0\u03eb\0\u0426\0\u0461\0\u049c\0\u04d7\0\u0512"+ "\0\u054d\0\u0588\0\u05c3\0\u05fe\0\u0639\0\u0674\0\u06af\0\u06ea"+ "\0\u0725\0\u0760\0\u079b\0\u07d6\0\u0811\0\u084c\0\u0887\0\261"+ "\0\u08c2\0\u08fd\0\u0938\0\261\0\u0973\0\u09ae\0\u09e9\0\u0a24"+ "\0\261\0\u0a5f\0\u0a9a\0\u0ad5\0\u0b10\0\u0b4b\0\u0b4b\0\u0b86"+ "\0\u0bc1\0\u0b4b\0\u0bfc\0\u0c37\0\u0c72\0\u0cad\0\u0ce8\0\u0d23"+ "\0\u0d5e\0\u0d99\0\u0dd4\0\u0e0f\0\u0e4a\0\u0e85\0\u0ec0\0\u0efb"+ "\0\u0f36\0\u0f71\0\u0fac\0\u0fe7\0\u1022\0\u105d\0\u1098\0\u10d3"+ "\0\u110e\0\u1149\0\u1184\0\u11bf\0\u11fa\0\u1235\0\u1270\0\u12ab"+ "\0\u12e6\0\u1321\0\u135c\0\u1397\0\u13d2\0\u140d\0\u1448\0\u1483"+ "\0\u14be\0\u14f9\0\u1534\0\u156f\0\u15aa\0\u15e5\0\u1620\0\u165b"+ "\0\u1696\0\u16d1\0\u170c\0\u1747\0\u1782\0\u17bd\0\u17f8\0\u1833"+ "\0\u186e\0\354\0\u18a9\0\354\0\u18e4\0\u191f\0\u195a\0\u1995"+ "\0\u19d0\0\u1a0b\0\u1a46\0\u1a81\0\u1abc\0\u1af7\0\u1b32\0\u1b6d"+ "\0\u1ba8\0\u1be3\0\u1c1e\0\u1c59\0\u1c94\0\261\0\u1ccf\0\u1d0a"+ "\0\u1d45\0\u1d80\0\u1dbb\0\u1df6\0\u1e31\0\u1e6c\0\u1ea7\0\u1ee2"+ "\0\u1f1d\0\u1f58\0\261\0\261\0\261\0\u1f93\0\u1fce\0\u2009"+ "\0\u2044\0\u207f\0\u20ba\0\u20f5\0\u2130\0\u216b\0\u21a6\0\u21e1"+ "\0\u221c\0\u2257\0\u2292\0\u22cd\0\u2308\0\u2343\0\u237e\0\u23b9"+ "\0\u23f4\0\u242f\0\u237e\0\u246a\0\u24a5\0\u24e0\0\u251b\0\u2556"+ "\0\u2591\0\u25cc\0\u2607\0\u2642\0\u267d\0\u26b8\0\u26f3\0\u272e"+ "\0\u2769\0\u27a4\0\u27df\0\u281a\0\u2855\0\u2890\0\u28cb\0\u2906"+ "\0\u2941\0\u297c\0\u29b7\0\u29f2\0\u2a2d\0\u2a68\0\261\0\261"+ "\0\u2aa3\0\u2ade\0\u2b19\0\u2b54\0\u17bd\0\u2b8f\0\u2bca\0\354"+ "\0\u2c05\0\u2c40\0\u2c7b\0\u2cb6\0\u2cf1\0\u2d2c\0\u2d67\0\u2da2"+ "\0\u2ddd\0\u2e18\0\u2e53\0\u2e8e\0\u2ec9\0\u2f04\0\u2f3f\0\u2f7a"+ "\0\u2fb5\0\u2ff0\0\u302b\0\u3066\0\u30a1\0\u30dc\0\u3117\0\u3152"+ "\0\u318d\0\u31c8\0\u3203\0\u323e\0\u3279\0\u32b4\0\u32ef\0\u332a"+ "\0\u3365\0\u33a0\0\u33db\0\u3416\0\u3451\0\u348c\0\u34c7\0\u3502"+ "\0\u353d\0\u3578\0\u35b3\0\u35ee\0\u33db\0\u3629\0\u3664\0\u369f"+ "\0\u36da\0\u3715\0\u1270\0\u3750\0\u378b\0\u37c6\0\u3801\0\u383c"+ "\0\u3877"; private static int [] zzUnpackRowMap() { int [] result = new int[265]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\4\2\5\1\6\1\7\1\10\1\11\1\12\1\13"+ "\1\14\1\15\1\4\1\16\1\5\1\17\1\20\1\5"+ "\1\6\1\21\1\5\1\22\1\23\1\5\1\24\2\5"+ "\1\4\1\25\1\26\1\27\1\30\1\31\1\32\1\33"+ "\1\34\1\5\1\35\1\36\1\37\1\40\1\41\1\42"+ "\1\43\1\44\1\45\1\46\1\47\1\50\1\51\1\52"+ "\1\53\1\51\1\54\1\55\1\56\1\57\1\60\2\61"+ "\10\62\1\63\62\62\11\64\1\65\61\64\74\0\7\5"+ "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\22\5"+ "\14\0\3\66\1\6\4\66\3\0\1\66\2\67\1\6"+ "\2\66\1\6\2\66\1\70\2\71\1\0\2\72\1\0"+ "\1\66\1\0\22\66\12\0\1\66\2\0\7\5\1\13"+ "\1\14\2\0\10\5\1\0\1\73\1\5\1\0\2\5"+ "\3\0\1\74\7\5\1\75\11\5\15\0\3\5\1\11"+ "\1\5\1\11\1\5\1\13\1\14\2\0\10\5\1\0"+ "\2\5\1\0\2\5\3\0\1\5\1\76\20\5\15\0"+ "\7\5\1\13\1\14\2\0\10\5\1\0\2\5\1\0"+ "\2\5\3\0\22\5\15\0\3\5\1\11\1\5\1\11"+ "\1\5\1\13\1\14\2\0\10\5\1\0\2\5\1\0"+ "\2\5\3\0\22\5\14\0\10\77\1\100\1\77\1\0"+ "\1\101\57\77\11\102\1\103\1\0\1\104\57\102\1\0"+ "\7\5\4\0\10\5\1\0\1\105\1\5\1\0\2\5"+ "\3\0\1\106\7\5\1\107\1\110\10\5\14\0\3\66"+ "\1\111\4\66\3\0\1\66\2\67\1\112\2\113\1\112"+ "\2\66\1\70\2\71\1\0\2\72\1\0\1\66\1\0"+ "\22\66\12\0\1\66\2\0\3\5\1\114\3\5\4\0"+ "\10\5\1\0\2\5\1\0\2\5\3\0\22\5\15\0"+ "\3\5\1\115\3\5\4\0\1\116\7\5\1\0\2\5"+ "\1\0\2\5\3\0\10\5\1\117\1\120\10\5\17\0"+ "\1\70\12\0\1\70\2\0\1\70\52\0\7\5\4\0"+ "\1\121\2\5\1\122\4\5\1\0\2\5\1\0\2\5"+ "\3\0\1\5\1\123\16\5\1\124\1\5\43\0\1\54"+ "\30\0\1\54\12\0\12\25\1\0\60\25\34\0\1\26"+ "\37\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ "\3\0\1\5\1\125\1\5\1\126\1\5\1\127\4\5"+ "\1\130\7\5\15\0\7\5\4\0\10\5\1\0\2\5"+ "\1\0\2\5\3\0\10\5\1\131\11\5\15\0\7\5"+ "\4\0\10\5\1\0\1\132\1\5\1\0\2\5\3\0"+ "\10\5\1\133\1\134\10\5\15\0\4\5\1\135\2\5"+ "\4\0\1\136\7\5\1\0\1\137\1\5\1\0\2\5"+ "\3\0\4\5\1\140\4\5\1\141\5\5\1\142\2\5"+ "\15\0\3\5\1\143\1\144\2\5\4\0\10\5\1\0"+ "\2\5\1\0\2\5\3\0\13\5\1\145\6\5\15\0"+ "\3\5\1\146\1\147\2\5\4\0\10\5\1\0\2\5"+ "\1\0\2\5\3\0\10\5\1\150\11\5\15\0\7\5"+ "\4\0\1\151\7\5\1\0\2\5\1\0\2\5\3\0"+ "\1\152\7\5\1\153\3\5\1\154\2\5\1\155\2\5"+ "\15\0\3\5\1\156\3\5\4\0\10\5\1\0\2\5"+ "\1\0\2\5\3\0\5\5\1\157\1\5\1\160\2\5"+ "\1\161\7\5\15\0\7\5\4\0\6\5\1\162\1\5"+ "\1\0\2\5\1\0\2\5\3\0\1\5\1\163\1\164"+ "\1\165\1\166\7\5\1\167\5\5\15\0\3\5\1\170"+ "\3\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ "\1\171\7\5\1\172\11\5\15\0\7\5\4\0\10\5"+ "\1\0\2\5\1\0\2\5\3\0\11\5\1\173\10\5"+ "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ "\3\0\1\174\10\5\1\105\10\5\15\0\7\5\4\0"+ "\1\175\7\5\1\0\1\137\1\5\1\0\2\5\3\0"+ "\22\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ "\2\5\3\0\17\5\1\176\2\5\15\0\7\5\4\0"+ "\10\5\1\0\1\177\1\5\1\0\2\5\3\0\1\200"+ "\21\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ "\2\5\3\0\1\201\7\5\1\202\11\5\15\0\7\5"+ "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\11\5"+ "\1\154\10\5\74\0\1\54\72\0\2\54\71\0\1\54"+ "\1\0\1\54\75\0\1\51\73\0\1\51\73\0\1\54"+ "\73\0\1\54\2\0\10\62\1\0\62\62\10\0\1\203"+ "\62\0\11\64\1\0\61\64\11\0\1\204\61\0\10\66"+ "\3\0\11\66\1\0\2\66\1\0\2\66\1\0\1\66"+ "\1\0\22\66\12\0\1\66\4\0\1\70\12\0\1\70"+ "\2\0\1\70\3\0\2\205\1\0\2\206\41\0\3\66"+ "\1\207\4\66\3\0\3\66\1\207\2\66\1\207\2\66"+ "\1\0\2\66\1\210\2\66\1\0\1\66\1\0\22\66"+ "\2\0\1\210\7\0\1\66\2\0\7\5\4\0\1\211"+ "\7\5\1\0\2\5\1\0\2\5\3\0\2\5\1\212"+ "\1\5\1\213\5\5\1\214\7\5\15\0\7\5\4\0"+ "\10\5\1\0\2\5\1\0\2\5\3\0\1\5\1\215"+ "\7\5\1\216\4\5\1\217\3\5\15\0\4\5\1\220"+ "\2\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ "\22\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ "\2\5\3\0\3\5\1\221\5\5\1\222\10\5\14\0"+ "\10\77\1\223\1\77\1\0\1\101\57\77\10\0\1\224"+ "\62\0\12\77\1\0\60\77\11\102\1\223\1\0\1\104"+ "\57\102\11\0\1\225\61\0\12\102\1\0\60\102\1\0"+ "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ "\1\5\1\164\20\5\15\0\7\5\4\0\10\5\1\0"+ "\2\5\1\0\2\5\3\0\14\5\1\226\5\5\15\0"+ "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ "\1\5\1\227\5\5\1\230\12\5\15\0\7\5\4\0"+ "\10\5\1\0\2\5\1\0\2\5\3\0\3\5\1\160"+ "\16\5\14\0\3\66\1\111\4\66\3\0\3\66\1\111"+ "\2\66\1\111\2\66\1\70\2\71\1\0\2\72\1\0"+ "\1\66\1\0\22\66\12\0\1\66\1\0\3\66\1\111"+ "\4\66\3\0\1\66\2\67\1\112\2\66\1\112\2\66"+ "\1\70\2\71\1\0\2\72\1\0\1\66\1\0\22\66"+ "\12\0\1\66\1\0\3\66\1\231\4\66\3\0\3\66"+ "\1\231\2\66\3\231\1\0\2\231\1\0\2\66\1\0"+ "\1\66\1\0\1\231\1\66\1\231\2\66\1\231\1\66"+ "\1\231\12\66\12\0\1\66\2\0\7\5\4\0\10\5"+ "\1\0\2\5\1\0\2\5\3\0\1\232\21\5\15\0"+ "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ "\10\5\1\233\11\5\15\0\7\5\4\0\10\5\1\0"+ "\2\5\1\0\2\5\3\0\10\5\1\234\11\5\15\0"+ "\3\5\1\162\3\5\4\0\10\5\1\0\2\5\1\0"+ "\2\5\3\0\22\5\15\0\7\5\4\0\1\235\7\5"+ "\1\0\2\5\1\0\2\5\3\0\1\5\1\236\20\5"+ "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ "\3\0\3\5\1\237\5\5\1\240\10\5\15\0\7\5"+ "\4\0\10\5\1\0\1\241\1\5\1\0\2\5\3\0"+ "\7\5\1\242\12\5\15\0\4\5\1\243\2\5\4\0"+ "\10\5\1\0\2\5\1\0\2\5\3\0\22\5\15\0"+ "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ "\1\244\21\5\15\0\7\5\4\0\10\5\1\0\2\5"+ "\1\0\2\5\3\0\2\5\1\162\17\5\15\0\7\5"+ "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\3\5"+ "\1\245\16\5\15\0\7\5\4\0\10\5\1\0\2\5"+ "\1\0\2\5\3\0\3\5\1\164\16\5\15\0\7\5"+ "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\12\5"+ "\1\246\7\5\15\0\7\5\4\0\10\5\1\0\2\5"+ "\1\0\2\5\3\0\4\5\1\162\15\5\15\0\7\5"+ "\4\0\1\247\5\5\1\162\1\5\1\0\2\5\1\0"+ "\2\5\3\0\22\5\15\0\4\5\1\250\2\5\4\0"+ "\10\5\1\0\2\5\1\0\2\5\3\0\22\5\15\0"+ "\3\5\1\164\3\5\4\0\10\5\1\0\2\5\1\0"+ "\2\5\3\0\7\5\1\160\10\5\1\251\1\5\15\0"+ "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ "\12\5\1\166\1\5\1\164\5\5\15\0\7\5\4\0"+ "\10\5\1\0\2\5\1\0\2\5\3\0\11\5\1\252"+ "\10\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ "\2\5\3\0\4\5\1\253\15\5\15\0\3\5\1\164"+ "\3\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ "\1\254\21\5\15\0\7\5\4\0\10\5\1\0\2\5"+ "\1\0\2\5\3\0\15\5\1\255\4\5\15\0\7\5"+ "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\10\5"+ "\1\256\11\5\15\0\7\5\4\0\10\5\1\0\2\5"+ "\1\0\2\5\3\0\13\5\1\162\6\5\15\0\7\5"+ "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\12\5"+ "\1\257\7\5\15\0\7\5\4\0\10\5\1\0\2\5"+ "\1\0\2\5\3\0\12\5\1\260\7\5\15\0\7\5"+ "\4\0\10\5\1\0\1\261\1\5\1\0\2\5\3\0"+ "\22\5\15\0\7\5\4\0\6\5\1\262\1\5\1\0"+ "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0"+ "\10\5\1\0\2\5\1\0\2\5\3\0\10\5\1\244"+ "\11\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ "\2\5\3\0\1\263\21\5\15\0\7\5\4\0\1\264"+ "\7\5\1\0\2\5\1\0\2\5\3\0\22\5\15\0"+ "\7\5\4\0\10\5\1\0\1\265\1\5\1\0\2\5"+ "\3\0\1\5\1\266\12\5\1\267\5\5\15\0\7\5"+ "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\12\5"+ "\1\164\7\5\15\0\3\5\1\164\3\5\4\0\10\5"+ "\1\0\2\5\1\0\2\5\3\0\1\270\21\5\15\0"+ "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ "\2\5\1\164\17\5\15\0\7\5\4\0\10\5\1\0"+ "\2\5\1\0\1\271\1\5\3\0\22\5\15\0\7\5"+ "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\4\5"+ "\1\164\15\5\15\0\7\5\4\0\10\5\1\0\1\105"+ "\1\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0"+ "\10\5\1\0\2\5\1\0\2\5\3\0\4\5\1\272"+ "\5\5\1\273\7\5\15\0\7\5\4\0\10\5\1\0"+ "\2\5\1\0\2\5\3\0\3\5\1\274\5\5\1\275"+ "\10\5\15\0\7\5\4\0\10\5\1\0\1\214\1\5"+ "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\10\5"+ "\1\0\2\5\1\0\2\5\3\0\12\5\1\276\7\5"+ "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ "\3\0\10\5\1\277\1\300\10\5\15\0\7\5\4\0"+ "\10\5\1\0\2\5\1\0\2\5\3\0\3\5\1\301"+ "\16\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ "\2\5\3\0\16\5\1\164\3\5\15\0\7\5\4\0"+ "\10\5\1\0\1\302\1\5\1\0\2\5\3\0\22\5"+ "\15\0\7\5\4\0\3\5\1\164\4\5\1\0\2\5"+ "\1\0\2\5\3\0\12\5\1\164\7\5\15\0\7\5"+ "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\10\5"+ "\1\303\11\5\15\0\7\5\4\0\10\5\1\0\2\5"+ "\1\0\2\5\3\0\11\5\1\304\10\5\15\0\7\5"+ "\4\0\3\5\1\164\4\5\1\0\2\5\1\0\2\5"+ "\3\0\22\5\15\0\7\5\4\0\10\5\1\0\2\5"+ "\1\0\2\5\3\0\3\5\1\305\16\5\15\0\3\5"+ "\1\127\3\5\4\0\10\5\1\0\2\5\1\0\2\5"+ "\3\0\22\5\15\0\7\5\4\0\10\5\1\0\2\5"+ "\1\0\2\5\3\0\11\5\1\306\10\5\24\0\1\307"+ "\73\0\1\310\64\0\1\311\12\0\1\311\2\0\1\311"+ "\5\0\1\210\31\0\1\210\11\0\3\66\1\207\4\66"+ "\3\0\3\66\1\207\2\66\1\207\2\66\1\0\2\66"+ "\1\0\2\72\1\0\1\66\1\0\22\66\12\0\1\66"+ "\4\0\1\311\12\0\1\311\2\0\1\311\52\0\7\5"+ "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\10\5"+ "\1\312\11\5\15\0\4\5\1\252\2\5\4\0\10\5"+ "\1\0\2\5\1\0\2\5\3\0\22\5\15\0\4\5"+ "\1\313\2\5\4\0\10\5\1\0\2\5\1\0\2\5"+ "\3\0\22\5\15\0\3\5\1\164\3\5\4\0\10\5"+ "\1\0\2\5\1\0\2\5\3\0\22\5\15\0\7\5"+ "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\15\5"+ "\1\260\4\5\15\0\7\5\4\0\10\5\1\0\2\5"+ "\1\0\2\5\3\0\3\5\1\237\16\5\15\0\1\314"+ "\6\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ "\22\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ "\2\5\3\0\1\5\1\315\20\5\15\0\7\5\4\0"+ "\10\5\1\0\2\5\1\0\2\5\3\0\11\5\1\141"+ "\10\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ "\2\5\3\0\7\5\1\316\12\5\15\0\7\5\4\0"+ "\10\5\1\0\2\5\1\0\2\5\3\0\5\5\1\317"+ "\14\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ "\2\5\3\0\15\5\1\320\4\5\15\0\7\5\4\0"+ "\10\5\1\0\2\5\1\0\2\5\3\0\1\321\21\5"+ "\14\0\3\66\1\231\4\66\3\0\1\66\2\67\1\231"+ "\2\66\3\231\1\0\2\231\1\0\2\66\1\0\1\66"+ "\1\0\1\231\1\66\1\231\2\66\1\231\1\66\1\231"+ "\12\66\12\0\1\66\2\0\7\5\4\0\10\5\1\0"+ "\2\5\1\0\2\5\3\0\1\5\1\215\20\5\15\0"+ "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ "\14\5\1\162\5\5\15\0\7\5\4\0\10\5\1\0"+ "\2\5\1\0\2\5\3\0\1\322\21\5\15\0\7\5"+ "\4\0\10\5\1\0\1\164\1\5\1\0\2\5\3\0"+ "\4\5\1\166\15\5\15\0\7\5\4\0\10\5\1\0"+ "\2\5\1\0\2\5\3\0\1\323\21\5\15\0\7\5"+ "\4\0\10\5\1\0\1\162\1\5\1\0\2\5\3\0"+ "\22\5\15\0\7\5\4\0\6\5\1\162\1\5\1\0"+ "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0"+ "\10\5\1\0\2\5\1\0\2\5\3\0\7\5\1\324"+ "\12\5\15\0\7\5\4\0\10\5\1\0\1\325\1\5"+ "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\10\5"+ "\1\0\2\5\1\0\2\5\3\0\14\5\1\326\5\5"+ "\15\0\7\5\4\0\1\164\7\5\1\0\2\5\1\0"+ "\2\5\3\0\22\5\15\0\7\5\4\0\10\5\1\0"+ "\1\327\1\5\1\0\2\5\3\0\22\5\15\0\7\5"+ "\4\0\1\330\7\5\1\0\2\5\1\0\2\5\3\0"+ "\22\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ "\2\5\3\0\1\331\21\5\15\0\7\5\4\0\10\5"+ "\1\0\2\5\1\0\2\5\3\0\5\5\1\332\14\5"+ "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ "\3\0\14\5\1\333\5\5\15\0\7\5\4\0\10\5"+ "\1\0\2\5\1\0\2\5\3\0\7\5\1\260\12\5"+ "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ "\3\0\4\5\1\334\15\5\15\0\7\5\4\0\10\5"+ "\1\0\2\5\1\0\2\5\3\0\1\5\1\335\20\5"+ "\15\0\3\5\1\322\3\5\4\0\10\5\1\0\2\5"+ "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\1\260"+ "\7\5\1\0\2\5\1\0\2\5\3\0\22\5\15\0"+ "\7\5\4\0\10\5\1\0\1\164\1\5\1\0\2\5"+ "\3\0\22\5\15\0\7\5\4\0\10\5\1\0\2\5"+ "\1\0\2\5\3\0\1\336\21\5\15\0\7\5\4\0"+ "\6\5\1\166\1\5\1\0\2\5\1\0\2\5\3\0"+ "\22\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ "\2\5\3\0\3\5\1\337\16\5\15\0\7\5\4\0"+ "\1\340\7\5\1\0\2\5\1\0\2\5\3\0\22\5"+ "\15\0\3\5\1\252\3\5\4\0\10\5\1\0\2\5"+ "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\10\5"+ "\1\0\2\5\1\0\2\5\3\0\4\5\1\341\15\5"+ "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ "\3\0\12\5\1\342\7\5\15\0\3\5\1\320\3\5"+ "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\22\5"+ "\15\0\7\5\4\0\10\5\1\0\1\343\1\5\1\0"+ "\2\5\3\0\22\5\15\0\7\5\4\0\10\5\1\0"+ "\1\344\1\5\1\0\2\5\3\0\22\5\15\0\4\5"+ "\1\160\2\5\4\0\10\5\1\0\2\5\1\0\2\5"+ "\3\0\22\5\15\0\4\5\1\345\2\5\4\0\10\5"+ "\1\0\2\5\1\0\2\5\3\0\22\5\15\0\7\5"+ "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\1\5"+ "\1\346\20\5\15\0\7\5\4\0\10\5\1\0\2\5"+ "\1\0\2\5\3\0\10\5\1\327\11\5\15\0\7\5"+ "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\12\5"+ "\1\347\7\5\15\0\7\5\4\0\10\5\1\0\2\5"+ "\1\0\2\5\3\0\1\5\1\131\20\5\15\0\7\5"+ "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\3\5"+ "\1\162\16\5\15\0\7\5\4\0\1\125\7\5\1\0"+ "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0"+ "\10\5\1\0\2\5\1\0\2\5\3\0\5\5\1\350"+ "\14\5\15\0\7\5\4\0\1\237\7\5\1\0\2\5"+ "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\10\5"+ "\1\0\2\5\1\0\2\5\3\0\1\331\16\5\1\164"+ "\2\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ "\2\5\3\0\2\5\1\320\17\5\17\0\1\311\12\0"+ "\1\311\2\0\1\311\6\0\2\206\42\0\7\5\4\0"+ "\10\5\1\0\2\5\1\0\2\5\3\0\1\315\21\5"+ "\15\0\3\5\1\351\3\5\4\0\10\5\1\0\2\5"+ "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\10\5"+ "\1\0\2\5\1\0\2\5\3\0\11\5\1\352\10\5"+ "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ "\3\0\10\5\1\353\6\5\1\214\2\5\15\0\7\5"+ "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\2\5"+ "\1\354\17\5\15\0\7\5\4\0\1\127\7\5\1\0"+ "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0"+ "\10\5\1\0\2\5\1\0\2\5\3\0\4\5\1\320"+ "\15\5\15\0\7\5\4\0\1\355\7\5\1\0\2\5"+ "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\6\5"+ "\1\356\1\5\1\0\2\5\1\0\2\5\3\0\22\5"+ "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ "\3\0\12\5\1\131\7\5\15\0\7\5\4\0\10\5"+ "\1\0\1\357\1\5\1\0\2\5\3\0\22\5\15\0"+ "\3\5\1\131\3\5\4\0\10\5\1\0\2\5\1\0"+ "\2\5\3\0\22\5\15\0\7\5\4\0\10\5\1\0"+ "\2\5\1\0\2\5\3\0\13\5\1\164\6\5\15\0"+ "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ "\4\5\1\360\15\5\15\0\7\5\4\0\1\361\7\5"+ "\1\0\2\5\1\0\2\5\3\0\22\5\15\0\7\5"+ "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\10\5"+ "\1\315\11\5\15\0\7\5\4\0\10\5\1\0\2\5"+ "\1\0\2\5\3\0\11\5\1\362\10\5\15\0\7\5"+ "\4\0\10\5\1\0\1\306\1\5\1\0\2\5\3\0"+ "\22\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ "\2\5\3\0\6\5\1\162\13\5\15\0\7\5\4\0"+ "\10\5\1\0\2\5\1\0\2\5\3\0\3\5\1\363"+ "\16\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ "\2\5\3\0\1\364\21\5\15\0\7\5\4\0\10\5"+ "\1\0\2\5\1\0\2\5\3\0\11\5\1\365\10\5"+ "\15\0\7\5\4\0\1\366\7\5\1\0\2\5\1\0"+ "\2\5\3\0\11\5\1\257\10\5\15\0\7\5\4\0"+ "\10\5\1\0\2\5\1\0\2\5\3\0\7\5\1\160"+ "\12\5\15\0\3\5\1\105\3\5\4\0\10\5\1\0"+ "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0"+ "\10\5\1\0\2\5\1\0\2\5\3\0\5\5\1\367"+ "\14\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ "\2\5\3\0\3\5\1\370\16\5\15\0\7\5\4\0"+ "\10\5\1\0\1\371\1\5\1\0\2\5\3\0\22\5"+ "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ "\3\0\1\372\21\5\15\0\7\5\4\0\10\5\1\0"+ "\2\5\1\0\2\5\3\0\1\5\1\162\20\5\15\0"+ "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ "\1\5\1\373\20\5\15\0\7\5\4\0\10\5\1\0"+ "\2\5\1\0\2\5\3\0\2\5\1\260\17\5\15\0"+ "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ "\1\162\21\5\15\0\7\5\4\0\1\143\7\5\1\0"+ "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0"+ "\10\5\1\0\2\5\1\0\2\5\3\0\11\5\1\257"+ "\10\5\15\0\3\5\1\374\3\5\4\0\10\5\1\0"+ "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0"+ "\10\5\1\0\2\5\1\0\2\5\3\0\4\5\1\214"+ "\15\5\15\0\7\5\4\0\10\5\1\0\1\320\1\5"+ "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\10\5"+ "\1\0\2\5\1\0\2\5\3\0\7\5\1\375\12\5"+ "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ "\3\0\14\5\1\376\5\5\15\0\7\5\4\0\10\5"+ "\1\0\2\5\1\0\2\5\3\0\5\5\1\257\14\5"+ "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ "\3\0\1\5\1\377\20\5\15\0\7\5\4\0\10\5"+ "\1\0\1\177\1\5\1\0\2\5\3\0\22\5\15\0"+ "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ "\7\5\1\u0100\12\5\15\0\7\5\4\0\10\5\1\0"+ "\2\5\1\0\2\5\3\0\4\5\1\u0101\15\5\15\0"+ "\3\5\1\u0102\3\5\4\0\10\5\1\0\2\5\1\0"+ "\2\5\3\0\22\5\15\0\7\5\4\0\1\u0103\7\5"+ "\1\0\2\5\1\0\2\5\3\0\22\5\15\0\7\5"+ "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\12\5"+ "\1\273\7\5\15\0\7\5\4\0\10\5\1\0\2\5"+ "\1\0\2\5\3\0\1\u0104\21\5\15\0\7\5\4\0"+ "\10\5\1\0\1\u0105\1\5\1\0\2\5\3\0\22\5"+ "\15\0\4\5\1\237\2\5\4\0\10\5\1\0\2\5"+ "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\1\u0106"+ "\7\5\1\0\2\5\1\0\2\5\3\0\22\5\15\0"+ "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ "\1\u0107\21\5\15\0\7\5\4\0\10\5\1\0\2\5"+ "\1\0\2\5\3\0\4\5\1\330\15\5\15\0\7\5"+ "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\4\5"+ "\1\260\15\5\15\0\7\5\4\0\10\5\1\0\2\5"+ "\1\0\2\5\3\0\4\5\1\u0108\15\5\15\0\7\5"+ "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\1\u0109"+ "\21\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ "\2\5\3\0\1\5\1\252\20\5\15\0\7\5\4\0"+ "\10\5\1\0\2\5\1\0\2\5\3\0\17\5\1\333"+ "\2\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ "\2\5\3\0\3\5\1\127\16\5\14\0"; private static int [] zzUnpackTrans() { int [] result = new int[14514]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\3\0\1\11\10\1\1\11\32\1\1\11\3\1\1\11"+ "\4\1\1\11\17\1\1\0\2\1\1\0\76\1\3\0"+ "\1\11\1\1\1\0\12\1\3\11\61\1\2\11\101\1"; private static int [] zzUnpackAttribute() { int [] result = new int[265]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public PythonTokenMaker() { super(); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "#", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.LITERAL_STRING_DOUBLE_QUOTE: state = LONG_STRING_2; break; case Token.LITERAL_CHAR: state = LONG_STRING_1; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public PythonTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public PythonTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 168) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 5: { addNullToken(); return firstToken; } case 20: break; case 10: { addToken(Token.LITERAL_CHAR); } case 21: break; case 8: { addToken(Token.WHITESPACE); } case 22: break; case 12: { addToken(Token.LITERAL_NUMBER_FLOAT); } case 23: break; case 13: { addToken(Token.RESERVED_WORD); } case 24: break; case 9: { addToken(Token.SEPARATOR); } case 25: break; case 15: { yybegin(LONG_STRING_1); addToken(Token.LITERAL_CHAR); } case 26: break; case 2: { addToken(Token.IDENTIFIER); } case 27: break; case 14: { addToken(Token.FUNCTION); } case 28: break; case 1: { addToken(Token.ERROR_IDENTIFIER); } case 29: break; case 17: { addToken(Token.DATA_TYPE); } case 30: break; case 4: { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } case 31: break; case 7: { addToken(Token.COMMENT_EOL); } case 32: break; case 11: { addToken(Token.ERROR_NUMBER_FORMAT); } case 33: break; case 3: { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } case 34: break; case 6: { addToken(Token.OPERATOR); } case 35: break; case 19: { yybegin(YYINITIAL); addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } case 36: break; case 16: { yybegin(LONG_STRING_2); addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } case 37: break; case 18: { yybegin(YYINITIAL); addToken(Token.LITERAL_CHAR); } case 38: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case YYINITIAL: { addNullToken(); return firstToken; } case 266: break; case LONG_STRING_2: { if (firstToken==null) { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } return firstToken; } case 267: break; case LONG_STRING_1: { if (firstToken==null) { addToken(Token.LITERAL_CHAR); } return firstToken; } case 268: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/RubyTokenMaker.flex000066400000000000000000000646401257417003700315240ustar00rootroot00000000000000/* * 09/11/2008 * * RubyTokenMaker.java - Scanner for Ruby * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for Ruby.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated RubyTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.5 * */ %% %public %class RubyTokenMaker %extends AbstractJFlexTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Token type specific to RubyTokenMaker; this signals that we are inside * an unquoted/double quoted/backtick EOF heredoc. */ public static final int INTERNAL_HEREDOC_EOF_UNQUOTED = -1; /** * Token type specific to RubyTokenMaker; this signals that we are inside * an single quoted EOF heredoc. */ public static final int INTERNAL_HEREDOC_EOF_SINGLE_QUOTED = -2; /** * Token type specific to RubyTokenMaker; this signals that we are inside * an double quoted EOF heredoc. */ public static final int INTERNAL_HEREDOC_EOF_DOUBLE_QUOTED = -3; /** * Token type specific to RubyTokenMaker; this signals that we are inside * an unquoted/double quoted/backtick EOT heredoc. */ public static final int INTERNAL_HEREDOC_EOT_UNQUOTED = -4; /** * Token type specific to RubyTokenMaker; this signals that we are inside * an single quoted EOT heredoc. */ public static final int INTERNAL_HEREDOC_EOT_SINGLE_QUOTED = -5; /** * Token type specific to RubyTokenMaker; this signals that we are inside * an double quoted EOT heredoc. */ public static final int INTERNAL_HEREDOC_EOT_DOUBLE_QUOTED = -6; /** * Token type specific to RubyTokenMaker; this signals that we are inside * a %Q!...! style double quoted string. */ public static final int INTERNAL_STRING_Q_BANG = -7; /** * Token type specific to RubyTokenMaker; this signals that we are inside * a %Q{...} style double quoted string. */ public static final int INTERNAL_STRING_Q_CURLY_BRACE = -8; /** * Token type specific to RubyTokenMaker; this signals that we are inside * a %Q<...> style double quoted string. */ public static final int INTERNAL_STRING_Q_LT = -9; /** * Token type specific to RubyTokenMaker; this signals that we are inside * a %Q(...) style double quoted string. */ public static final int INTERNAL_STRING_Q_PAREN = -10; /** * Token type specific to RubyTokenMaker; this signals that we are inside * a %Q/.../ style double quoted string. */ public static final int INTERNAL_STRING_Q_SLASH = -11; /** * Token type specific to RubyTokenMaker; this signals that we are inside * a %Q[...] style double quoted string. */ public static final int INTERNAL_STRING_Q_SQUARE_BRACKET = -12; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public RubyTokenMaker() { } /** * Adds the token specified to the current linked list of tokens as an * "end token;" that is, at zzMarkedPos. * * @param tokenType The token's type. */ private void addEndToken(int tokenType) { addToken(zzMarkedPos,zzMarkedPos, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "#", null }; } /** * Returns whether tokens of the specified type should have "mark * occurrences" enabled for the current programming language. * * @param type The token type. * @return Whether tokens of this type should have "mark occurrences" * enabled. */ public boolean getMarkOccurrencesOfTokenType(int type) { return type==Token.IDENTIFIER || type==Token.VARIABLE; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.COMMENT_DOCUMENTATION: state = DOCCOMMENT; start = text.offset; break; case Token.LITERAL_STRING_DOUBLE_QUOTE: state = STRING; start = text.offset; break; case Token.LITERAL_CHAR: state = CHAR_LITERAL; start = text.offset; break; case Token.LITERAL_BACKQUOTE: state = BACKTICKS; start = text.offset; break; case INTERNAL_HEREDOC_EOF_UNQUOTED: state = HEREDOC_EOF_UNQUOTED; start = text.offset; break; case INTERNAL_HEREDOC_EOF_SINGLE_QUOTED: state = HEREDOC_EOF_SINGLE_QUOTED; start = text.offset; break; case INTERNAL_HEREDOC_EOF_DOUBLE_QUOTED: state = HEREDOC_EOF_DOUBLE_QUOTED; start = text.offset; break; case INTERNAL_HEREDOC_EOT_UNQUOTED: state = HEREDOC_EOT_UNQUOTED; start = text.offset; break; case INTERNAL_HEREDOC_EOT_SINGLE_QUOTED: state = HEREDOC_EOT_SINGLE_QUOTED; start = text.offset; break; case INTERNAL_HEREDOC_EOT_DOUBLE_QUOTED: state = HEREDOC_EOT_DOUBLE_QUOTED; start = text.offset; break; case INTERNAL_STRING_Q_BANG: state = STRING_Q_BANG; start = text.offset; break; case INTERNAL_STRING_Q_CURLY_BRACE: state = STRING_Q_CURLY_BRACE; start = text.offset; break; case INTERNAL_STRING_Q_LT: state = STRING_Q_LT; start = text.offset; break; case INTERNAL_STRING_Q_PAREN: state = STRING_Q_PAREN; start = text.offset; break; case INTERNAL_STRING_Q_SLASH: state = STRING_Q_SLASH; start = text.offset; break; case INTERNAL_STRING_Q_SQUARE_BRACKET: state = STRING_Q_SQUARE_BRACKET; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} Letter = [A-Za-z] NonzeroDigit = [1-9] Digit = ("0"|{NonzeroDigit}) BinaryDigit = ([01]) HexDigit = ({Digit}|[A-Fa-f]) OctalDigit = ([0-7]) NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\'\`]|"#"|"\\") IdentifierStart = ({Letter}|"_") IdentifierPart = ({IdentifierStart}|{Digit}) BooleanLiteral = ("true"|"false") LineTerminator = (\n) WhiteSpace = ([ \t\f]) LineCommentBegin = "#" DocCommentBegin = "=begin" DocCommentEnd = "=end" DigitOrUnderscore = ({Digit}|[_]) BinaryIntLiteral = ("0b"{BinaryDigit}([01_]*{BinaryDigit})?) OctalLiteral = ("0"([0-7_]*{OctalDigit})?) DecimalLiteral1 = ("0d"{Digit}({DigitOrUnderscore}*{Digit})?) DecimalLiteral2 = ({NonzeroDigit}({DigitOrUnderscore}*{Digit})?) DecimalLiteral = ({BinaryIntLiteral}|{OctalLiteral}|{DecimalLiteral1}|{DecimalLiteral2}) HexLiteral = ("0x"{HexDigit}([0-9a-zA-Z_]*{HexDigit})?) FloatLiteral = ({NonzeroDigit}({DigitOrUnderscore}*{Digit})?[Ee][+-]?({Digit}({DigitOrUnderscore}*{Digit})?)?) Separator = ([\(\)\{\}]) Operator1 = ("::"|"."|"["|"]"|"-"|"+"|"!"|"~"|"*"|"/"|"%"|"<<"|">>"|"&"|"|"|"^") Operator2 = (">"|">="|"<"|"<="|"<=>"|"=="|"==="|"!="|"=~"|"!~"|"&&"|"||") Operator3 = (".."|"..."|"="|"+="|"-="|"*="|"/="|"%=") Operator = ({Operator1}|{Operator2}|{Operator3}) Identifier = ({IdentifierStart}{IdentifierPart}*) Symbol = ([:]{Identifier}) ErrorIdentifier = ({NonSeparator}+) PreDefinedVariable = ("$"([!@&`\'+0-9~=/\,;.<>_*$?:\"]|"DEBUG"|"FILENAME"|"LOAD_PATH"|"stderr"|"stdin"|"stdout"|"VERBOSE"|([\-][0adFiIlpwv]))) Variable = ({PreDefinedVariable}|([@][@]?|[$]){Identifier}) %state STRING %state STRING_Q_BANG %state STRING_Q_CURLY_BRACE %state STRING_Q_PAREN %state STRING_Q_SLASH %state STRING_Q_SQUARE_BRACKET %state STRING_Q_LT %state CHAR_LITERAL %state BACKTICKS %state HEREDOC_EOF_UNQUOTED %state HEREDOC_EOF_SINGLE_QUOTED %state HEREDOC_EOF_DOUBLE_QUOTED %state HEREDOC_EOT_UNQUOTED %state HEREDOC_EOT_SINGLE_QUOTED %state HEREDOC_EOT_DOUBLE_QUOTED %state DOCCOMMENT %% { /* Keywords */ "alias" | "BEGIN" | "begin" | "break" | "case" | "class" | "def" | "defined" | "do" | "else" | "elsif" | "END" | "end" | "ensure" | "for" | "if" | "in" | "module" | "next" | "nil" | "redo" | "rescue" | "retry" | "return" | "self" | "super" | "then" | "undef" | "unless" | "until" | "when" | "while" | "yield" { addToken(Token.RESERVED_WORD); } "Array" | "Float" | "Integer" | "String" | "at_exit" | "autoload" | "binding" | "caller" | "catch" | "chop" | "chop!" | "chomp" | "chomp!" | "eval" | "exec" | "exit" | "exit!" | "fail" | "fork" | "format" | "gets" | "global_variables" | "gsub" | "gsub!" | "iterator?" | "lambda" | "load" | "local_variables" | "loop" | "open" | "p" | "print" | "printf" | "proc" | "putc" | "puts" | "raise" | "rand" | "readline" | "readlines" | "require" | "select" | "sleep" | "split" | "sprintf" | "srand" | "sub" | "sub!" | "syscall" | "system" | "test" | "trace_var" | "trap" | "untrace_var" { addToken(Token.FUNCTION); } "and" | "or" | "not" { addToken(Token.OPERATOR); } {BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } {Variable} { addToken(Token.VARIABLE); } {Symbol} { addToken(Token.PREPROCESSOR); } {LineTerminator} { addNullToken(); return firstToken; } {Identifier} { addToken(Token.IDENTIFIER); } {WhiteSpace}+ { addToken(Token.WHITESPACE); } /* String/Character literals. */ \" { start = zzMarkedPos-1; yybegin(STRING); } \' { start = zzMarkedPos-1; yybegin(CHAR_LITERAL); } [\%][QqWwx]?[\(] { start = zzMarkedPos-yylength(); yybegin(STRING_Q_PAREN); } [\%][QqWwx]?[\{] { start = zzMarkedPos-yylength(); yybegin(STRING_Q_CURLY_BRACE); } [\%][QqWwx]?[\[] { start = zzMarkedPos-yylength(); yybegin(STRING_Q_SQUARE_BRACKET); } [\%][QqWwx]?[\<] { start = zzMarkedPos-yylength(); yybegin(STRING_Q_LT); } [\%][QqWwx]?[\!] { start = zzMarkedPos-yylength(); yybegin(STRING_Q_BANG); } [\%][QqWwx]?[\/] { start = zzMarkedPos-yylength(); yybegin(STRING_Q_SLASH); } \` { start = zzMarkedPos-1; yybegin(BACKTICKS); } /* Comment literals. */ {LineCommentBegin}.* { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; } {DocCommentBegin} { start = zzMarkedPos-6; yybegin(DOCCOMMENT); } /* "Here-document" syntax. This is only implemented for the common */ /* cases. */ "<> { addNullToken(); return firstToken; } /* Catch any other (unhandled) characters. */ . { addToken(Token.IDENTIFIER); } } { [^\n\\\"]+ {} \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } \\.? { /* Skip escaped chars. */ } \" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } } { [^\n\\\!]+ {} \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_BANG); return firstToken; } \\.? { /* Skip escaped chars. */ } \! { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_BANG); return firstToken; } } { [^\n\\\}]+ {} \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_CURLY_BRACE); return firstToken; } \\.? { /* Skip escaped chars. */ } \} { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_CURLY_BRACE); return firstToken; } } { [^\n\\\>]+ {} \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_LT); return firstToken; } \\.? { /* Skip escaped chars. */ } \> { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_LT); return firstToken; } } { [^\n\\\)]+ {} \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_PAREN); return firstToken; } \\.? { /* Skip escaped chars. */ } \) { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_PAREN); return firstToken; } } { [^\n\\\/]+ {} \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_SLASH); return firstToken; } \\.? { /* Skip escaped chars. */ } \/ { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_SLASH); return firstToken; } } { [^\n\\\]]+ {} \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_SQUARE_BRACKET); return firstToken; } \\.? { /* Skip escaped chars. */ } \] { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_SQUARE_BRACKET); return firstToken; } } { [^\n\\\']+ {} \\.? { /* Skip escaped single quotes only, but this should still work. */ } \n { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } \' { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); } <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } } { [^\n\\\`]+ {} \n { addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; } \\.? { /* Skip escaped chars. */ } \` { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); } <> { addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; } } { /* NOTE: The closing "EOF" is supposed to be on a line by itself - */ /* no surrounding whitespace or other chars. However, the way */ /* we're hacking the JFLex scanning, something like ^"EOF"$ doesn't */ /* work. Fortunately we don't need the start- and end-line anchors */ /* since the production after "EOF" will match any line containing */ /* EOF and any other chars. */ /* NOTE2: This case is used for unquoted <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_UNQUOTED); return firstToken; } } { /* NOTE: The closing "EOF" is supposed to be on a line by itself - */ /* no surrounding whitespace or other chars. However, the way */ /* we're hacking the JFLex scanning, something like ^"EOF"$ doesn't */ /* work. Fortunately we don't need the start- and end-line anchors */ /* since the production after "EOF" will match any line containing */ /* EOF and any other chars. */ "EOF" { if (start==zzStartRead) { addToken(Token.PREPROCESSOR); addNullToken(); return firstToken; } } [^\n\\]+ {} \n { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); return firstToken; } \\.? { /* Skip escaped chars. */ } <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); return firstToken; } } { /* NOTE: The closing "EOF" is supposed to be on a line by itself - */ /* no surrounding whitespace or other chars. However, the way */ /* we're hacking the JFLex scanning, something like ^"EOF"$ doesn't */ /* work. Fortunately we don't need the start- and end-line anchors */ /* since the production after "EOF" will match any line containing */ /* EOF and any other chars. */ "EOF" { if (start==zzStartRead) { addToken(Token.PREPROCESSOR); addNullToken(); return firstToken; } } [^\n\\]+ {} \n { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); return firstToken; } \\.? { /* Skip escaped chars. */ } <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); return firstToken; } } { /* NOTE: The closing "EOT" is supposed to be on a line by itself - */ /* no surrounding whitespace or other chars. However, the way */ /* we're hacking the JFLex scanning, something like ^"EOT"$ doesn't */ /* work. Fortunately we don't need the start- and end-line anchors */ /* since the production after "EOT" will match any line containing */ /* EOF and any other chars. */ /* NOTE2: This case is used for unquoted <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_UNQUOTED); return firstToken; } } { /* NOTE: The closing "EOT" is supposed to be on a line by itself - */ /* no surrounding whitespace or other chars. However, the way */ /* we're hacking the JFLex scanning, something like ^"EOT"$ doesn't */ /* work. Fortunately we don't need the start- and end-line anchors */ /* since the production after "EOT" will match any line containing */ /* EOT and any other chars. */ "EOT" { if (start==zzStartRead) { addToken(Token.PREPROCESSOR); addNullToken(); return firstToken; } } [^\n\\]+ {} \n { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); return firstToken; } \\.? { /* Skip escaped chars. */ } <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); return firstToken; } } { /* NOTE: The closing "EOT" is supposed to be on a line by itself - */ /* no surrounding whitespace or other chars. However, the way */ /* we're hacking the JFLex scanning, something like ^"EOT"$ doesn't */ /* work. Fortunately we don't need the start- and end-line anchors */ /* since the production after "EOT" will match any line containing */ /* EOT and any other chars. */ "EOT" { if (start==zzStartRead) { addToken(Token.PREPROCESSOR); addNullToken(); return firstToken; } } [^\n\\]+ {} \n { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); return firstToken; } \\.? { /* Skip escaped chars. */ } <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); return firstToken; } } { [^\n\=]+ {} {DocCommentEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+3, Token.COMMENT_DOCUMENTATION); } = {} \n { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); return firstToken; } <> { yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/RubyTokenMaker.java000066400000000000000000001765161257417003700315150ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 6/21/15 11:19 AM */ /* * 09/11/2008 * * RubyTokenMaker.java - Scanner for Ruby * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for Ruby.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated RubyTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.5 * */ public class RubyTokenMaker extends AbstractJFlexTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int HEREDOC_EOF_SINGLE_QUOTED = 11; public static final int DOCCOMMENT = 14; public static final int HEREDOC_EOT_SINGLE_QUOTED = 13; public static final int HEREDOC_EOT_UNQUOTED = 12; public static final int STRING_Q_SLASH = 5; public static final int STRING_Q_BANG = 2; public static final int STRING_Q_LT = 7; public static final int STRING = 1; public static final int BACKTICKS = 9; public static final int YYINITIAL = 0; public static final int HEREDOC_EOF_UNQUOTED = 10; public static final int STRING_Q_CURLY_BRACE = 3; public static final int STRING_Q_PAREN = 4; public static final int HEREDOC_EOF_DOUBLE_QUOTED = 11; public static final int CHAR_LITERAL = 8; public static final int HEREDOC_EOT_DOUBLE_QUOTED = 13; public static final int STRING_Q_SQUARE_BRACKET = 6; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\24\1\23\1\0\1\24\1\7\22\0\1\24\1\44\1\106"+ "\1\10\1\56\1\50\1\53\1\107\1\111\1\36\1\46\1\35\1\60"+ "\1\43\1\40\1\47\1\3\1\4\6\6\2\2\1\37\1\60\1\51"+ "\1\25\1\52\1\104\1\57\1\67\1\62\1\5\1\61\1\34\1\64"+ "\1\63\1\1\1\65\2\1\1\1\1\1\1\66\1\70\1\1\1\110"+ "\1\1\1\73\1\71\1\1\1\1\1\110\3\1\1\41\1\11\1\42"+ "\1\55\1\12\1\113\1\20\1\26\1\76\1\32\1\16\1\17\1\27"+ "\1\102\1\30\1\1\1\75\1\21\1\77\1\31\1\72\1\101\1\105"+ "\1\14\1\22\1\13\1\15\1\74\1\103\1\33\1\100\1\1\1\112"+ "\1\54\1\114\1\45\uff81\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\17\0\1\1\1\2\2\3\1\2\1\4\10\2\1\5"+ "\1\6\1\7\6\2\1\7\1\10\1\2\10\7\2\1"+ "\11\2\1\11\1\2\1\12\1\13\1\14\1\15\1\16"+ "\1\17\1\20\1\15\1\21\1\15\1\22\1\15\1\23"+ "\1\15\1\24\1\15\1\25\1\15\1\26\1\15\1\27"+ "\1\30\1\31\1\15\1\32\1\33\1\15\1\34\1\15"+ "\1\35\1\36\1\15\1\37\1\15\1\40\1\15\1\1"+ "\1\41\1\3\4\1\30\2\1\0\7\2\1\42\5\2"+ "\1\43\1\7\1\0\1\44\1\45\1\46\1\47\1\50"+ "\1\51\2\7\3\52\1\0\1\1\4\2\1\7\12\2"+ "\1\16\1\27\2\15\1\0\2\41\2\3\1\53\24\2"+ "\1\42\7\2\1\11\6\2\1\0\10\2\1\42\5\0"+ "\20\2\1\54\1\0\1\1\1\41\3\1\1\55\1\2"+ "\1\11\16\2\1\11\5\2\1\0\3\2\4\0\11\2"+ "\1\56\1\0\12\2\1\0\2\2\1\57\1\60\3\0"+ "\2\2\1\11\5\2\1\61\1\2\6\0\4\2\1\62"+ "\1\63\1\11\7\2"; private static int [] zzUnpackAction() { int [] result = new int[347]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\115\0\232\0\347\0\u0134\0\u0181\0\u01ce\0\u021b"+ "\0\u0268\0\u02b5\0\u0302\0\u034f\0\u039c\0\u03e9\0\u0436\0\u0483"+ "\0\u04d0\0\u051d\0\u056a\0\u05b7\0\u0604\0\u0651\0\u069e\0\u06eb"+ "\0\u0738\0\u0785\0\u07d2\0\u081f\0\u086c\0\u05b7\0\u08b9\0\u0906"+ "\0\u0953\0\u09a0\0\u09ed\0\u0a3a\0\u0a87\0\u0ad4\0\u0b21\0\u05b7"+ "\0\u0b6e\0\u0bbb\0\u05b7\0\u0c08\0\u0c55\0\u0ca2\0\u0cef\0\u0d3c"+ "\0\u0d89\0\u0dd6\0\u0e23\0\u0e70\0\u0ebd\0\u0f0a\0\u0f57\0\u0fa4"+ "\0\u0ff1\0\u103e\0\u108b\0\u10d8\0\u1125\0\u1172\0\u05b7\0\u05b7"+ "\0\u05b7\0\u11bf\0\u120c\0\u05b7\0\u05b7\0\u1259\0\u05b7\0\u12a6"+ "\0\u05b7\0\u12f3\0\u05b7\0\u1340\0\u05b7\0\u138d\0\u05b7\0\u13da"+ "\0\u05b7\0\u1427\0\u1474\0\u05b7\0\u05b7\0\u14c1\0\u05b7\0\u05b7"+ "\0\u150e\0\u05b7\0\u155b\0\u05b7\0\u05b7\0\u15a8\0\u05b7\0\u15f5"+ "\0\u05b7\0\u1642\0\u168f\0\u16dc\0\u1729\0\u1729\0\u1776\0\u17c3"+ "\0\u1810\0\u185d\0\u18aa\0\u18f7\0\u1944\0\u1991\0\u19de\0\u1a2b"+ "\0\u1a78\0\u1ac5\0\u1b12\0\u1b5f\0\u1bac\0\u1bf9\0\u1c46\0\u1c93"+ "\0\u1ce0\0\u1d2d\0\u1d7a\0\u1dc7\0\u1e14\0\u1e61\0\u1eae\0\u1efb"+ "\0\u1f48\0\u1f95\0\u1fe2\0\u202f\0\u207c\0\u20c9\0\u2116\0\u2163"+ "\0\u21b0\0\u04d0\0\u21fd\0\u224a\0\u2297\0\u22e4\0\u2331\0\u237e"+ "\0\u23cb\0\u2418\0\u05b7\0\u05b7\0\u05b7\0\u05b7\0\u05b7\0\u05b7"+ "\0\u2465\0\u24b2\0\u24ff\0\u0483\0\u05b7\0\u254c\0\u2599\0\u25e6"+ "\0\u2633\0\u2680\0\u26cd\0\u04d0\0\u271a\0\u2767\0\u27b4\0\u2801"+ "\0\u284e\0\u289b\0\u28e8\0\u2935\0\u2982\0\u29cf\0\u05b7\0\u05b7"+ "\0\u2a1c\0\u2a69\0\u2ab6\0\u2b03\0\u2b50\0\u2b9d\0\u2bea\0\u2c37"+ "\0\u2c84\0\u2cd1\0\u2d1e\0\u2d6b\0\u2db8\0\u2e05\0\u2e52\0\u2e9f"+ "\0\u2eec\0\u2f39\0\u2f86\0\u2fd3\0\u3020\0\u306d\0\u30ba\0\u3107"+ "\0\u3154\0\u31a1\0\u31ee\0\u323b\0\u3288\0\u32d5\0\u3322\0\u336f"+ "\0\u33bc\0\u3409\0\u3456\0\u34a3\0\u34f0\0\u353d\0\u358a\0\u35d7"+ "\0\u3624\0\u3671\0\u36be\0\u370b\0\u3758\0\u37a5\0\u37f2\0\u383f"+ "\0\u388c\0\u38d9\0\u3926\0\u3973\0\u39c0\0\u3a0d\0\u3a5a\0\u3aa7"+ "\0\u3af4\0\u3b41\0\u3b8e\0\u3bdb\0\u3c28\0\u3c75\0\u3cc2\0\u3d0f"+ "\0\u3d5c\0\u3da9\0\u3df6\0\u3e43\0\u3e90\0\u3edd\0\u3f2a\0\u3f77"+ "\0\u3fc4\0\u4011\0\u150e\0\u405e\0\u2b03\0\u40ab\0\u2b9d\0\u2bea"+ "\0\u2c37\0\u04d0\0\u40f8\0\u04d0\0\u4145\0\u4192\0\u41df\0\u422c"+ "\0\u4279\0\u42c6\0\u4313\0\u4360\0\u43ad\0\u43fa\0\u4447\0\u4494"+ "\0\u44e1\0\u452e\0\u05b7\0\u457b\0\u45c8\0\u4615\0\u4662\0\u46af"+ "\0\u46fc\0\u4749\0\u4796\0\u47e3\0\u4830\0\u487d\0\u48ca\0\u4917"+ "\0\u4964\0\u49b1\0\u49fe\0\u4a4b\0\u4a98\0\u4ae5\0\u4b32\0\u4b7f"+ "\0\u4bcc\0\u05b7\0\u40ab\0\u4c19\0\u4c66\0\u4cb3\0\u4d00\0\u4d4d"+ "\0\u4d9a\0\u4de7\0\u4e34\0\u4e81\0\u4ece\0\u4f1b\0\u4f68\0\u4fb5"+ "\0\u05b7\0\u05b7\0\u5002\0\u504f\0\u509c\0\u50e9\0\u5136\0\u5183"+ "\0\u51d0\0\u521d\0\u526a\0\u52b7\0\u5183\0\u05b7\0\u5304\0\u5351"+ "\0\u539e\0\u53eb\0\u5438\0\u5485\0\u54d2\0\u551f\0\u556c\0\u55b9"+ "\0\u5606\0\u05b7\0\u05b7\0\u383f\0\u5653\0\u56a0\0\u56ed\0\u573a"+ "\0\u5787\0\u57d4\0\u5821"; private static int [] zzUnpackRowMap() { int [] result = new int[347]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\20\1\21\1\22\1\23\1\22\1\21\1\22\1\24"+ "\1\25\1\20\1\21\1\26\1\27\1\30\1\31\1\32"+ "\1\33\1\34\1\35\1\36\1\37\1\40\1\41\1\42"+ "\1\43\1\44\1\45\1\21\1\46\1\47\1\50\1\51"+ "\1\52\2\53\1\47\1\54\1\53\2\47\1\55\1\56"+ "\1\57\1\60\1\61\1\53\1\62\1\63\1\24\1\21"+ "\1\64\1\21\1\65\1\66\1\21\1\67\2\21\1\70"+ "\1\71\2\21\1\72\1\73\1\74\1\75\1\21\1\76"+ "\1\24\1\21\1\77\1\100\1\21\2\50\1\101\1\50"+ "\11\102\1\103\11\102\1\104\62\102\1\105\6\102\11\106"+ "\1\103\11\106\1\107\20\106\1\105\50\106\11\110\1\103"+ "\11\110\1\111\70\110\1\105\11\112\1\103\11\112\1\113"+ "\12\112\1\105\56\112\11\114\1\103\11\114\1\115\23\114"+ "\1\105\45\114\11\116\1\103\11\116\1\117\16\116\1\105"+ "\52\116\11\120\1\103\11\120\1\121\26\120\1\105\42\120"+ "\11\122\1\123\11\122\1\124\63\122\1\125\5\122\11\126"+ "\1\103\11\126\1\127\67\126\1\130\1\126\11\131\1\103"+ "\11\131\1\132\10\131\1\133\71\131\1\103\11\131\1\134"+ "\10\131\1\133\71\131\1\103\11\131\1\135\10\131\1\136"+ "\71\131\1\103\11\131\1\137\10\131\1\136\60\131\23\140"+ "\1\141\1\140\1\142\67\140\7\20\1\0\13\20\3\0"+ "\7\20\21\0\2\20\1\0\23\20\1\0\1\20\2\0"+ "\1\20\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+ "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ "\1\21\4\0\2\20\3\22\1\20\1\22\1\0\2\20"+ "\1\143\3\20\1\144\4\20\3\0\6\20\1\144\21\0"+ "\2\20\1\0\23\20\1\0\1\20\2\0\1\20\4\0"+ "\3\20\2\145\1\20\1\145\1\0\2\20\1\146\10\20"+ "\3\0\1\147\3\20\1\150\1\151\1\20\21\0\2\20"+ "\1\0\23\20\1\0\1\20\2\0\1\20\121\0\23\25"+ "\1\0\71\25\1\20\6\21\1\0\2\20\2\21\1\152"+ "\1\21\1\153\4\21\3\0\7\21\21\0\2\20\1\0"+ "\21\21\1\154\1\21\1\0\1\21\2\0\1\21\4\0"+ "\1\20\6\21\1\0\2\20\4\21\1\155\1\21\1\156"+ "\2\21\3\0\7\21\21\0\2\20\1\0\23\21\1\0"+ "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ "\11\21\3\0\3\21\1\157\3\21\21\0\2\20\1\0"+ "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ "\1\0\2\20\7\21\1\160\1\21\3\0\3\21\1\161"+ "\1\21\1\162\1\21\21\0\2\20\1\0\13\21\1\163"+ "\7\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ "\1\0\2\20\6\21\1\164\2\21\3\0\7\21\21\0"+ "\2\20\1\0\11\21\1\165\11\21\1\0\1\21\2\0"+ "\1\21\4\0\1\20\6\21\1\0\2\20\1\21\1\166"+ "\1\21\1\167\3\21\1\170\1\21\3\0\3\21\1\171"+ "\3\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ "\1\21\4\0\1\20\6\21\1\0\2\20\6\21\1\172"+ "\2\21\3\0\7\21\21\0\2\20\1\0\11\21\1\173"+ "\11\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ "\1\0\2\20\2\21\1\174\1\175\1\176\2\21\1\177"+ "\1\21\3\0\7\21\21\0\2\20\1\0\17\21\1\200"+ "\1\201\2\21\1\0\1\21\2\0\1\21\30\0\1\37"+ "\115\0\1\47\1\202\16\0\1\53\47\0\1\20\6\21"+ "\1\0\2\20\2\21\1\203\1\21\1\204\4\21\3\0"+ "\2\21\1\205\4\21\21\0\2\20\1\0\23\21\1\0"+ "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ "\4\21\1\206\2\21\1\207\1\210\3\0\7\21\21\0"+ "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ "\1\20\6\21\1\0\2\20\1\21\1\211\3\21\1\212"+ "\3\21\3\0\3\21\1\212\3\21\21\0\2\20\1\0"+ "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ "\1\0\2\20\4\21\1\213\4\21\3\0\2\21\1\214"+ "\4\21\21\0\2\20\1\0\11\21\1\215\11\21\1\0"+ "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ "\4\21\1\216\4\21\3\0\7\21\21\0\2\20\1\0"+ "\11\21\1\212\11\21\1\0\1\21\2\0\1\21\4\0"+ "\1\20\6\21\1\0\2\20\11\21\3\0\7\21\21\0"+ "\2\20\1\0\5\21\1\217\15\21\1\0\1\21\2\0"+ "\1\21\31\0\1\53\70\0\1\220\3\0\1\220\4\0"+ "\11\220\3\0\7\220\2\0\1\53\21\0\23\220\1\0"+ "\1\220\2\0\1\220\44\0\1\221\101\0\1\53\17\0"+ "\1\53\74\0\1\53\5\0\1\222\5\0\1\223\2\0"+ "\1\224\2\0\1\225\1\0\1\226\31\0\1\222\1\0"+ "\1\222\2\0\1\222\1\227\1\230\27\0\1\231\23\0"+ "\1\232\70\0\1\53\24\0\1\53\115\0\1\53\115\0"+ "\1\53\40\0\1\20\1\233\3\234\1\233\1\234\1\0"+ "\2\20\11\233\2\0\1\235\7\233\1\235\1\0\2\235"+ "\2\0\1\236\4\235\1\0\3\235\2\0\2\234\1\235"+ "\23\233\1\235\1\233\2\235\1\233\2\0\1\235\1\0"+ "\1\20\1\233\3\20\1\233\1\20\1\0\2\20\11\233"+ "\3\0\7\233\21\0\1\20\1\237\1\0\23\233\1\0"+ "\1\233\2\0\1\233\4\0\1\20\6\21\1\0\2\20"+ "\11\21\3\0\6\21\1\240\21\0\2\20\1\0\23\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\7\21\1\241\1\21\3\0\7\21\21\0\2\20"+ "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ "\6\21\1\0\2\20\11\21\3\0\3\21\1\242\3\21"+ "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\2\21\1\243\6\21"+ "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\2\21"+ "\1\244\6\21\3\0\7\21\21\0\2\20\1\0\20\21"+ "\1\245\2\21\1\0\1\21\2\0\1\21\4\0\1\20"+ "\6\21\1\0\2\20\1\21\1\246\7\21\3\0\7\21"+ "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\6\21\1\247\1\250"+ "\1\21\3\0\7\21\21\0\2\20\1\0\21\21\1\251"+ "\1\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ "\1\0\2\20\11\21\3\0\7\21\21\0\2\20\1\0"+ "\11\21\1\252\11\21\1\0\1\21\2\0\1\21\4\0"+ "\1\20\6\21\1\0\2\20\11\21\3\0\2\21\1\253"+ "\4\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ "\1\21\4\0\1\20\6\21\1\0\2\20\2\21\1\254"+ "\1\255\5\21\3\0\7\21\21\0\2\20\1\0\23\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\11\21\3\0\7\21\21\0\2\20\1\0\21\21"+ "\1\256\1\21\1\0\1\21\2\0\1\21\4\0\11\102"+ "\1\0\11\102\1\0\62\102\1\0\6\102\23\257\1\0"+ "\71\257\11\106\1\0\11\106\1\0\20\106\1\0\50\106"+ "\11\110\1\0\11\110\1\0\70\110\1\0\11\112\1\0"+ "\11\112\1\0\12\112\1\0\56\112\11\114\1\0\11\114"+ "\1\0\23\114\1\0\45\114\11\116\1\0\11\116\1\0"+ "\16\116\1\0\52\116\11\120\1\0\11\120\1\0\26\120"+ "\1\0\42\120\11\122\1\0\11\122\1\0\63\122\1\0"+ "\5\122\23\260\1\0\71\260\11\126\1\0\11\126\1\0"+ "\67\126\1\0\1\126\11\131\1\0\11\131\1\0\102\131"+ "\1\0\11\131\1\0\44\131\1\261\35\131\1\0\11\131"+ "\1\0\44\131\1\262\24\131\23\140\1\0\1\140\1\0"+ "\67\140\16\0\1\263\76\0\2\20\3\22\1\20\1\22"+ "\1\0\2\20\1\143\10\20\3\0\7\20\21\0\2\20"+ "\1\0\23\20\1\0\1\20\2\0\1\20\4\0\2\20"+ "\3\264\1\20\1\264\1\0\13\20\3\0\7\20\1\265"+ "\5\0\1\265\12\0\2\20\1\0\23\20\1\0\1\20"+ "\2\0\1\20\4\0\3\20\2\145\1\20\1\145\1\0"+ "\2\20\1\146\10\20\3\0\7\20\21\0\2\20\1\0"+ "\23\20\1\0\1\20\2\0\1\20\4\0\3\20\2\266"+ "\2\20\1\0\13\20\3\0\7\20\21\0\2\20\1\0"+ "\23\20\1\0\1\20\2\0\1\20\4\0\2\20\3\267"+ "\1\20\1\267\1\0\13\20\3\0\7\20\21\0\2\20"+ "\1\0\23\20\1\0\1\20\2\0\1\20\4\0\2\20"+ "\5\270\1\0\6\20\3\270\2\20\3\0\1\270\3\20"+ "\1\270\1\20\1\270\21\0\2\20\1\0\2\270\1\20"+ "\1\270\2\20\1\270\6\20\1\270\5\20\1\0\1\20"+ "\2\0\1\20\4\0\1\20\6\21\1\0\2\20\3\21"+ "\1\271\2\21\1\272\2\21\3\0\7\21\21\0\2\20"+ "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ "\6\21\1\0\2\20\10\21\1\273\3\0\7\21\21\0"+ "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ "\1\20\6\21\1\0\2\20\4\21\1\274\4\21\3\0"+ "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ "\1\21\4\0\1\20\6\21\1\0\2\20\1\21\1\275"+ "\4\21\1\276\1\21\1\277\3\0\4\21\1\300\2\21"+ "\21\0\2\20\1\0\23\21\1\0\1\301\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\2\21"+ "\1\302\1\303\3\21\21\0\2\20\1\0\23\21\1\0"+ "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ "\1\21\1\304\5\21\1\305\1\21\3\0\4\21\1\306"+ "\2\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ "\1\21\4\0\1\20\6\21\1\0\2\20\10\21\1\307"+ "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\10\21"+ "\1\310\3\0\4\21\1\212\2\21\21\0\2\20\1\0"+ "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ "\1\0\2\20\4\21\1\311\4\21\3\0\2\21\1\312"+ "\4\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ "\1\21\4\0\1\20\6\21\1\0\2\20\6\21\1\313"+ "\2\21\3\0\7\21\21\0\2\20\1\0\23\21\1\0"+ "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ "\7\21\1\314\1\21\3\0\2\21\1\313\4\21\21\0"+ "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ "\1\20\6\21\1\0\2\20\2\21\1\315\6\21\3\0"+ "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ "\1\21\4\0\1\20\6\21\1\0\2\20\1\316\10\21"+ "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\1\21"+ "\1\317\7\21\3\0\7\21\21\0\2\20\1\0\23\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\11\21\3\0\2\21\1\320\4\21\21\0\2\20"+ "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ "\6\21\1\0\2\20\11\21\3\0\4\21\1\244\2\21"+ "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ "\21\0\2\20\1\0\16\21\1\321\4\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\6\21"+ "\1\303\2\21\3\0\7\21\21\0\2\20\1\0\11\21"+ "\1\322\3\21\1\323\5\21\1\0\1\21\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\6\21\1\324\2\21"+ "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ "\3\0\1\325\6\21\21\0\2\20\1\0\20\21\1\326"+ "\2\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ "\1\0\2\20\7\21\1\327\1\21\3\0\7\21\21\0"+ "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ "\1\20\6\21\1\0\2\20\4\21\1\330\4\21\3\0"+ "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ "\1\21\4\0\1\20\6\21\1\0\2\20\10\21\1\331"+ "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\2\21"+ "\1\332\4\21\1\333\1\21\3\0\7\21\21\0\2\20"+ "\1\0\23\21\1\0\1\21\2\0\1\21\22\0\1\334"+ "\76\0\1\20\6\21\1\0\2\20\4\21\1\335\4\21"+ "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ "\3\0\1\21\1\336\5\21\21\0\2\20\1\0\23\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\11\21\3\0\3\21\1\337\3\21\21\0\2\20"+ "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ "\6\21\1\0\2\20\1\21\1\340\7\21\3\0\7\21"+ "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ "\21\0\2\20\1\0\11\21\1\341\11\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\3\21"+ "\1\342\5\21\3\0\7\21\21\0\2\20\1\0\23\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\4\21\1\343\4\21\3\0\7\21\21\0\2\20"+ "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ "\6\21\1\0\2\20\11\21\3\0\5\21\1\344\1\21"+ "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\7\21\1\212\1\21"+ "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\1\21"+ "\1\244\7\21\3\0\7\21\21\0\2\20\1\0\23\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\5\21\1\345\3\21\3\0\7\21\21\0\2\20"+ "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ "\6\21\1\0\2\20\11\21\3\0\7\21\21\0\2\20"+ "\1\0\1\212\22\21\1\0\1\21\2\0\1\21\5\0"+ "\6\220\3\0\11\220\3\0\7\220\24\0\23\220\1\0"+ "\1\220\2\0\1\220\44\0\1\53\115\0\1\223\2\0"+ "\1\224\2\0\1\225\1\0\1\226\37\0\1\227\1\230"+ "\54\0\1\53\66\0\1\346\7\0\1\347\51\0\1\350"+ "\1\351\3\0\1\352\1\0\1\20\6\233\1\0\2\20"+ "\11\233\3\0\7\233\21\0\2\20\1\0\23\233\1\0"+ "\1\233\2\0\1\233\7\0\1\235\14\0\2\235\6\0"+ "\1\235\1\0\1\235\31\0\2\235\6\0\1\235\4\0"+ "\1\235\1\0\1\235\11\0\1\20\1\233\3\20\1\233"+ "\1\20\1\0\2\20\11\233\3\0\7\233\21\0\2\20"+ "\1\0\23\233\1\0\1\233\2\0\1\233\4\0\1\20"+ "\6\21\1\0\2\20\11\21\3\0\7\21\21\0\2\20"+ "\1\0\2\21\1\353\20\21\1\0\1\21\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ "\21\0\2\20\1\0\11\21\1\354\11\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\1\21"+ "\1\355\7\21\3\0\7\21\21\0\2\20\1\0\23\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\2\21\1\356\6\21\3\0\7\21\21\0\2\20"+ "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ "\6\21\1\0\2\20\4\21\1\357\4\21\3\0\7\21"+ "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\2\21\1\360\6\21"+ "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\1\21"+ "\1\361\5\21\1\362\1\363\3\0\7\21\21\0\2\20"+ "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ "\6\21\1\0\2\20\6\21\1\364\2\21\3\0\7\21"+ "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ "\21\0\2\20\1\0\11\21\1\365\11\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ "\3\0\4\21\1\366\2\21\21\0\2\20\1\0\23\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\4\21\1\367\4\21\3\0\7\21\21\0\2\20"+ "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ "\6\21\1\0\2\20\11\21\3\0\2\21\1\370\4\21"+ "\21\0\2\20\1\0\11\21\1\311\11\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\1\21"+ "\1\371\7\21\3\0\7\21\21\0\2\20\1\0\23\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\4\21\1\274\4\21\3\0\2\21\1\372\4\21"+ "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ "\4\0\11\131\1\0\11\131\1\0\40\131\1\373\41\131"+ "\1\0\11\131\1\0\45\131\1\373\23\131\31\0\1\374"+ "\63\0\2\20\3\264\1\20\1\264\1\0\2\20\1\375"+ "\10\20\3\0\7\20\21\0\2\20\1\0\23\20\1\0"+ "\1\20\2\0\1\20\6\0\3\376\1\0\1\376\106\0"+ "\3\20\2\266\2\20\1\0\2\20\1\377\10\20\3\0"+ "\7\20\21\0\2\20\1\0\23\20\1\0\1\20\2\0"+ "\1\20\4\0\2\20\3\267\1\20\1\267\1\0\2\20"+ "\1\u0100\10\20\3\0\7\20\21\0\2\20\1\0\23\20"+ "\1\0\1\20\2\0\1\20\4\0\1\20\1\u0101\5\270"+ "\1\0\2\20\4\u0101\3\270\2\u0101\3\0\1\270\3\u0101"+ "\1\270\1\u0101\1\270\21\0\2\20\1\0\2\270\1\u0101"+ "\1\270\2\u0101\1\270\6\u0101\1\270\5\u0101\1\0\1\u0101"+ "\2\0\1\u0101\4\0\1\20\6\21\1\0\2\20\4\21"+ "\1\u0102\4\21\3\0\7\21\21\0\2\20\1\0\23\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\11\21\3\0\7\21\21\0\2\20\1\0\15\21"+ "\1\u0103\2\21\1\u0104\2\21\1\0\1\21\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\1\21\1\u0104\7\21"+ "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ "\3\0\3\21\1\212\3\21\21\0\2\20\1\0\23\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\2\21\1\u0105\1\u0106\5\21\3\0\7\21\21\0"+ "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ "\1\20\6\21\1\0\2\20\11\21\3\0\4\21\1\u0107"+ "\2\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+ "\7\21\21\0\2\20\1\0\15\21\1\u0108\5\21\1\0"+ "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ "\11\21\3\0\7\21\21\0\2\20\1\0\11\21\1\212"+ "\11\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ "\1\0\2\20\3\21\1\u0109\5\21\3\0\7\21\21\0"+ "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ "\1\20\6\21\1\0\2\20\10\21\1\u010a\3\0\7\21"+ "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\4\21"+ "\1\u0104\2\21\21\0\2\20\1\0\23\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\2\21"+ "\1\u010b\6\21\3\0\2\21\1\214\4\21\21\0\2\20"+ "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ "\6\21\1\0\2\20\4\21\1\364\4\21\3\0\7\21"+ "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\4\21\1\u010c\4\21"+ "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\4\21"+ "\1\212\4\21\3\0\2\21\1\u010c\4\21\21\0\2\20"+ "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ "\6\21\1\0\2\20\3\21\1\u010d\5\21\3\0\7\21"+ "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ "\21\0\2\20\1\0\15\21\1\u0104\5\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\1\21"+ "\1\325\7\21\3\0\7\21\21\0\2\20\1\0\23\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\7\21\1\u0104\1\21\3\0\7\21\21\0\2\20"+ "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ "\6\21\1\0\2\20\10\21\1\271\3\0\7\21\21\0"+ "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ "\1\20\6\21\1\0\2\20\11\21\3\0\7\21\21\0"+ "\2\20\1\0\14\21\1\u0104\1\21\1\354\4\21\1\0"+ "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ "\4\21\1\u010e\4\21\3\0\7\21\21\0\2\20\1\0"+ "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ "\1\0\2\20\11\21\3\0\7\21\21\0\2\20\1\0"+ "\11\21\1\u010f\11\21\1\0\1\21\2\0\1\21\4\0"+ "\1\20\6\21\1\0\2\20\6\21\1\u0110\2\21\3\0"+ "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+ "\1\u0111\6\21\21\0\2\20\1\0\23\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ "\3\0\7\21\21\0\2\20\1\0\20\21\1\u0104\2\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\6\21\1\u0112\2\21\3\0\7\21\21\0\2\20"+ "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ "\6\21\1\0\2\20\11\21\3\0\3\21\1\303\3\21"+ "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ "\7\0\1\u0113\11\0\2\20\1\0\23\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\4\21"+ "\1\u0114\4\21\3\0\7\21\21\0\2\20\1\0\23\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\4\21\1\u0115\1\212\3\21\3\0\7\21\21\0"+ "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ "\1\20\6\21\1\0\2\20\4\21\1\322\4\21\3\0"+ "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ "\1\21\4\0\1\20\6\21\1\0\2\20\1\21\1\u0116"+ "\7\21\3\0\7\21\21\0\2\20\1\0\15\21\1\u0117"+ "\5\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ "\1\0\2\20\11\21\3\0\2\21\1\u0118\4\21\21\0"+ "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ "\1\20\6\21\1\0\2\20\11\21\3\0\2\21\1\273"+ "\4\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ "\1\21\33\0\1\u0119\65\0\1\20\6\21\1\0\2\20"+ "\6\21\1\u011a\2\21\3\0\7\21\21\0\2\20\1\0"+ "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ "\1\0\2\20\11\21\3\0\2\21\1\274\4\21\21\0"+ "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ "\1\20\6\21\1\0\2\20\11\21\3\0\4\21\1\360"+ "\2\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ "\1\21\4\0\1\20\6\21\1\0\2\20\10\21\1\u0104"+ "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ "\3\0\1\323\6\21\21\0\2\20\1\0\23\21\1\0"+ "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ "\11\21\3\0\1\325\6\21\21\0\2\20\1\0\23\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\2\21\1\u011b\6\21\3\0\7\21\21\0\2\20"+ "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ "\6\21\1\0\2\20\1\21\1\212\7\21\3\0\7\21"+ "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\2\21"+ "\1\u011c\4\21\21\0\2\20\1\0\23\21\1\0\1\21"+ "\2\0\1\21\30\0\1\346\61\0\1\350\1\351\3\0"+ "\1\352\71\0\1\u011d\60\0\1\u011e\114\0\1\u011f\114\0"+ "\1\u0120\60\0\1\20\6\21\1\0\2\20\11\21\3\0"+ "\7\21\21\0\2\20\1\0\4\21\1\u0121\16\21\1\0"+ "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ "\6\21\1\273\2\21\3\0\7\21\21\0\2\20\1\0"+ "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ "\1\0\2\20\4\21\1\u0122\4\21\3\0\7\21\21\0"+ "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ "\1\20\6\21\1\0\2\20\6\21\1\u0123\2\21\3\0"+ "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+ "\3\21\1\u0104\3\21\21\0\2\20\1\0\23\21\1\0"+ "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ "\11\21\3\0\2\21\1\u0124\4\21\21\0\2\20\1\0"+ "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ "\1\0\2\20\11\21\3\0\7\21\21\0\2\20\1\0"+ "\15\21\1\u0125\5\21\1\0\1\21\2\0\1\21\4\0"+ "\1\20\6\21\1\0\2\20\7\21\1\u0126\1\21\3\0"+ "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ "\1\21\4\0\1\20\6\21\1\0\2\20\4\21\1\212"+ "\4\21\3\0\7\21\21\0\2\20\1\0\23\21\1\0"+ "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ "\10\21\1\u0110\3\0\7\21\21\0\2\20\1\0\23\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\11\21\3\0\7\21\21\0\2\20\1\0\16\21"+ "\1\u0127\1\21\1\325\2\21\1\0\1\21\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\3\21\1\372\5\21"+ "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\7\21"+ "\1\u0128\1\21\3\0\7\21\21\0\2\20\1\0\23\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\11\21\3\0\3\21\1\u0129\3\21\21\0\2\20"+ "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ "\6\21\1\0\2\20\10\21\1\u0104\3\0\7\21\21\0"+ "\2\20\1\0\15\21\1\u0104\5\21\1\0\1\21\2\0"+ "\1\21\4\0\1\20\6\21\1\0\2\20\7\21\1\363"+ "\1\21\3\0\7\21\21\0\2\20\1\0\23\21\1\0"+ "\1\21\2\0\1\21\36\0\1\u012a\64\0\3\376\1\0"+ "\1\376\3\0\1\u012b\102\0\1\20\6\21\1\0\2\20"+ "\4\21\1\u012c\4\21\3\0\7\21\21\0\2\20\1\0"+ "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ "\1\0\2\20\11\21\3\0\7\21\21\0\2\20\1\0"+ "\17\21\1\212\3\21\1\0\1\21\2\0\1\21\4\0"+ "\1\20\6\21\1\0\2\20\2\21\1\274\6\21\3\0"+ "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ "\1\21\4\0\1\20\6\21\1\0\2\20\7\21\1\u012d"+ "\1\21\3\0\7\21\21\0\2\20\1\0\23\21\1\0"+ "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ "\3\21\1\363\5\21\3\0\7\21\21\0\2\20\1\0"+ "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ "\1\0\2\20\11\21\3\0\2\21\1\u012e\4\21\21\0"+ "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ "\1\20\6\21\1\0\2\20\4\21\1\u0104\4\21\3\0"+ "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ "\1\21\4\0\1\20\6\21\1\0\2\20\6\21\1\u012f"+ "\2\21\3\0\7\21\21\0\2\20\1\0\23\21\1\0"+ "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ "\5\21\1\212\3\21\3\0\7\21\21\0\2\20\1\0"+ "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ "\1\0\2\20\2\21\1\363\6\21\3\0\7\21\21\0"+ "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ "\1\20\6\21\1\0\2\20\11\21\3\0\5\21\1\333"+ "\1\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ "\1\21\4\0\1\20\6\21\1\0\2\20\7\21\1\u0130"+ "\1\21\3\0\7\21\21\0\2\20\1\0\23\21\1\0"+ "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ "\10\21\1\212\3\0\7\21\21\0\2\20\1\0\23\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\11\21\3\0\4\21\1\u0131\2\21\21\0\2\20"+ "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ "\6\21\1\0\2\20\7\21\1\u0132\1\21\3\0\7\21"+ "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\2\21\1\212\6\21"+ "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ "\3\0\7\21\21\0\2\20\1\0\15\21\1\273\5\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\4\21\1\u0133\4\21\3\0\7\21\21\0\2\20"+ "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ "\6\21\1\0\2\20\6\21\1\u0134\2\21\3\0\7\21"+ "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\3\21"+ "\1\u0135\3\21\21\0\2\20\1\0\23\21\1\0\1\21"+ "\2\0\1\21\34\0\1\u0136\64\0\1\20\6\21\1\0"+ "\2\20\11\21\3\0\7\21\21\0\2\20\1\0\14\21"+ "\1\212\6\21\1\0\1\21\2\0\1\21\4\0\1\20"+ "\6\21\1\0\2\20\6\21\1\u0137\2\21\3\0\7\21"+ "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\3\21"+ "\1\u0138\3\21\21\0\2\20\1\0\23\21\1\0\1\21"+ "\2\0\1\21\70\0\1\u0139\4\0\1\u013a\113\0\1\u013b"+ "\114\0\1\u013c\114\0\1\u013d\24\0\1\20\6\21\1\0"+ "\2\20\11\21\3\0\7\21\21\0\2\20\1\0\5\21"+ "\1\212\15\21\1\0\1\21\2\0\1\21\4\0\1\20"+ "\6\21\1\0\2\20\11\21\3\0\1\21\1\u0126\5\21"+ "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ "\21\0\2\20\1\0\17\21\1\u0104\3\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ "\3\0\3\21\1\u013e\3\21\21\0\2\20\1\0\23\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\11\21\3\0\7\21\21\0\2\20\1\0\21\21"+ "\1\u0104\1\21\1\0\1\21\2\0\1\21\4\0\1\20"+ "\6\21\1\0\2\20\4\21\1\u013f\4\21\3\0\7\21"+ "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ "\21\0\2\20\1\0\20\21\1\325\2\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ "\3\0\4\21\1\212\2\21\21\0\2\20\1\0\23\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\1\21\1\u0140\7\21\3\0\7\21\21\0\2\20"+ "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ "\6\21\1\0\2\20\1\u0141\10\21\3\0\7\21\21\0"+ "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ "\1\20\6\21\1\0\2\20\11\21\3\0\2\21\1\u0142"+ "\4\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ "\1\21\4\0\1\20\6\21\1\0\2\20\2\21\1\u010a"+ "\6\21\3\0\7\21\21\0\2\20\1\0\23\21\1\0"+ "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ "\11\21\3\0\7\21\21\0\2\20\1\0\15\21\1\u0103"+ "\5\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ "\1\0\2\20\11\21\3\0\7\21\21\0\2\20\1\0"+ "\11\21\1\u0143\11\21\1\0\1\21\2\0\1\21\4\0"+ "\1\20\6\21\1\0\2\20\6\21\1\u0104\2\21\3\0"+ "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ "\1\21\4\0\1\20\6\21\1\0\2\20\1\u0144\10\21"+ "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ "\3\0\7\21\21\0\2\20\1\0\16\21\1\u0104\4\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\7\21\1\313\1\21\3\0\7\21\21\0\2\20"+ "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ "\6\21\1\0\2\20\1\21\1\u0145\7\21\3\0\7\21"+ "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ "\35\0\1\u0146\63\0\1\20\6\21\1\0\2\20\1\21"+ "\1\u0147\7\21\3\0\7\21\21\0\2\20\1\0\23\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\4\21\1\u0128\4\21\3\0\7\21\21\0\2\20"+ "\1\0\23\21\1\0\1\21\2\0\1\21\70\0\1\u0148"+ "\4\0\1\u0149\107\0\1\u014a\4\0\1\u014b\107\0\1\u014c"+ "\4\0\1\u014d\23\0\1\20\6\21\1\0\2\20\11\21"+ "\3\0\1\21\1\u0104\5\21\21\0\2\20\1\0\23\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\2\21\1\u0104\6\21\3\0\7\21\21\0\2\20"+ "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ "\6\21\1\0\2\20\5\21\1\u0104\3\21\3\0\7\21"+ "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ "\21\0\2\20\1\0\13\21\1\u014e\7\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ "\3\0\3\21\1\u014f\3\21\21\0\2\20\1\0\23\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\6\21\1\303\2\21\3\0\7\21\21\0\2\20"+ "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ "\6\21\1\0\2\20\11\21\3\0\7\21\21\0\2\20"+ "\1\0\13\21\1\u0150\7\21\1\0\1\21\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ "\21\0\2\20\1\0\11\21\1\u0151\11\21\1\0\1\21"+ "\2\0\1\21\112\0\1\u0139\114\0\1\u013a\115\0\1\u0152"+ "\114\0\1\u0153\120\0\1\u0139\114\0\1\u013a\1\0\1\20"+ "\6\21\1\0\2\20\6\21\1\u013f\2\21\3\0\7\21"+ "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\4\21\1\u0154\4\21"+ "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\6\21"+ "\1\u0155\2\21\3\0\7\21\21\0\2\20\1\0\23\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\2\21\1\u0156\6\21\3\0\7\21\21\0\2\20"+ "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ "\6\21\1\0\2\20\2\21\1\u0157\6\21\3\0\7\21"+ "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ "\21\0\2\20\1\0\23\21\1\u0113\1\21\2\0\1\21"+ "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\2\21"+ "\1\u0158\4\21\21\0\2\20\1\0\23\21\1\0\1\21"+ "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\6\21"+ "\1\u0159\2\21\3\0\7\21\21\0\2\20\1\0\23\21"+ "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ "\2\20\11\21\3\0\1\u015a\6\21\21\0\2\20\1\0"+ "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ "\1\0\2\20\7\21\1\u015b\1\21\3\0\7\21\21\0"+ "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ "\1\20\6\21\1\0\2\20\4\21\1\340\4\21\3\0"+ "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ "\1\21\4\0"; private static int [] zzUnpackTrans() { int [] result = new int[22638]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\17\0\4\1\1\11\11\1\1\11\11\1\1\11\2\1"+ "\1\11\23\1\3\11\2\1\2\11\1\1\1\11\1\1"+ "\1\11\1\1\1\11\1\1\1\11\1\1\1\11\1\1"+ "\1\11\2\1\2\11\1\1\2\11\1\1\1\11\1\1"+ "\2\11\1\1\1\11\1\1\1\11\40\1\1\0\17\1"+ "\1\0\6\11\4\1\1\11\1\0\20\1\2\11\2\1"+ "\1\0\50\1\1\0\11\1\5\0\21\1\1\0\26\1"+ "\1\11\5\1\1\0\3\1\4\0\11\1\1\11\1\0"+ "\12\1\1\0\2\1\2\11\3\0\10\1\1\11\1\1"+ "\6\0\4\1\2\11\10\1"; private static int [] zzUnpackAttribute() { int [] result = new int[347]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Token type specific to RubyTokenMaker; this signals that we are inside * an unquoted/double quoted/backtick EOF heredoc. */ public static final int INTERNAL_HEREDOC_EOF_UNQUOTED = -1; /** * Token type specific to RubyTokenMaker; this signals that we are inside * an single quoted EOF heredoc. */ public static final int INTERNAL_HEREDOC_EOF_SINGLE_QUOTED = -2; /** * Token type specific to RubyTokenMaker; this signals that we are inside * an double quoted EOF heredoc. */ public static final int INTERNAL_HEREDOC_EOF_DOUBLE_QUOTED = -3; /** * Token type specific to RubyTokenMaker; this signals that we are inside * an unquoted/double quoted/backtick EOT heredoc. */ public static final int INTERNAL_HEREDOC_EOT_UNQUOTED = -4; /** * Token type specific to RubyTokenMaker; this signals that we are inside * an single quoted EOT heredoc. */ public static final int INTERNAL_HEREDOC_EOT_SINGLE_QUOTED = -5; /** * Token type specific to RubyTokenMaker; this signals that we are inside * an double quoted EOT heredoc. */ public static final int INTERNAL_HEREDOC_EOT_DOUBLE_QUOTED = -6; /** * Token type specific to RubyTokenMaker; this signals that we are inside * a %Q!...! style double quoted string. */ public static final int INTERNAL_STRING_Q_BANG = -7; /** * Token type specific to RubyTokenMaker; this signals that we are inside * a %Q{...} style double quoted string. */ public static final int INTERNAL_STRING_Q_CURLY_BRACE = -8; /** * Token type specific to RubyTokenMaker; this signals that we are inside * a %Q<...> style double quoted string. */ public static final int INTERNAL_STRING_Q_LT = -9; /** * Token type specific to RubyTokenMaker; this signals that we are inside * a %Q(...) style double quoted string. */ public static final int INTERNAL_STRING_Q_PAREN = -10; /** * Token type specific to RubyTokenMaker; this signals that we are inside * a %Q/.../ style double quoted string. */ public static final int INTERNAL_STRING_Q_SLASH = -11; /** * Token type specific to RubyTokenMaker; this signals that we are inside * a %Q[...] style double quoted string. */ public static final int INTERNAL_STRING_Q_SQUARE_BRACKET = -12; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public RubyTokenMaker() { } /** * Adds the token specified to the current linked list of tokens as an * "end token;" that is, at zzMarkedPos. * * @param tokenType The token's type. */ private void addEndToken(int tokenType) { addToken(zzMarkedPos,zzMarkedPos, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "#", null }; } /** * Returns whether tokens of the specified type should have "mark * occurrences" enabled for the current programming language. * * @param type The token type. * @return Whether tokens of this type should have "mark occurrences" * enabled. */ @Override public boolean getMarkOccurrencesOfTokenType(int type) { return type==Token.IDENTIFIER || type==Token.VARIABLE; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.COMMENT_DOCUMENTATION: state = DOCCOMMENT; start = text.offset; break; case Token.LITERAL_STRING_DOUBLE_QUOTE: state = STRING; start = text.offset; break; case Token.LITERAL_CHAR: state = CHAR_LITERAL; start = text.offset; break; case Token.LITERAL_BACKQUOTE: state = BACKTICKS; start = text.offset; break; case INTERNAL_HEREDOC_EOF_UNQUOTED: state = HEREDOC_EOF_UNQUOTED; start = text.offset; break; case INTERNAL_HEREDOC_EOF_SINGLE_QUOTED: state = HEREDOC_EOF_SINGLE_QUOTED; start = text.offset; break; case INTERNAL_HEREDOC_EOF_DOUBLE_QUOTED: state = HEREDOC_EOF_DOUBLE_QUOTED; start = text.offset; break; case INTERNAL_HEREDOC_EOT_UNQUOTED: state = HEREDOC_EOT_UNQUOTED; start = text.offset; break; case INTERNAL_HEREDOC_EOT_SINGLE_QUOTED: state = HEREDOC_EOT_SINGLE_QUOTED; start = text.offset; break; case INTERNAL_HEREDOC_EOT_DOUBLE_QUOTED: state = HEREDOC_EOT_DOUBLE_QUOTED; start = text.offset; break; case INTERNAL_STRING_Q_BANG: state = STRING_Q_BANG; start = text.offset; break; case INTERNAL_STRING_Q_CURLY_BRACE: state = STRING_Q_CURLY_BRACE; start = text.offset; break; case INTERNAL_STRING_Q_LT: state = STRING_Q_LT; start = text.offset; break; case INTERNAL_STRING_Q_PAREN: state = STRING_Q_PAREN; start = text.offset; break; case INTERNAL_STRING_Q_SLASH: state = STRING_Q_SLASH; start = text.offset; break; case INTERNAL_STRING_Q_SQUARE_BRACKET: state = STRING_Q_SQUARE_BRACKET; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public RubyTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public RubyTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 188) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 39: { start = zzMarkedPos-yylength(); yybegin(STRING_Q_LT); } case 52: break; case 2: { addToken(Token.IDENTIFIER); } case 53: break; case 45: { addToken(Token.LITERAL_BOOLEAN); } case 54: break; case 32: { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); return firstToken; } case 55: break; case 19: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_PAREN); return firstToken; } case 56: break; case 18: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_CURLY_BRACE); return firstToken; } case 57: break; case 20: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_SLASH); return firstToken; } case 58: break; case 46: { yybegin(YYINITIAL); addToken(start,zzStartRead+3, Token.COMMENT_DOCUMENTATION); } case 59: break; case 10: { start = zzMarkedPos-1; yybegin(STRING); } case 60: break; case 44: { if (start==zzStartRead) { addToken(Token.PREPROCESSOR); addNullToken(); return firstToken; } } case 61: break; case 9: { addToken(Token.FUNCTION); } case 62: break; case 22: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_LT); return firstToken; } case 63: break; case 42: { addToken(Token.VARIABLE); } case 64: break; case 1: { addToken(Token.ERROR_IDENTIFIER); } case 65: break; case 31: { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); return firstToken; } case 66: break; case 4: { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; } case 67: break; case 41: { start = zzMarkedPos-yylength(); yybegin(STRING_Q_CURLY_BRACE); } case 68: break; case 50: { start = zzStartRead; yybegin(HEREDOC_EOF_SINGLE_QUOTED); } case 69: break; case 51: { start = zzStartRead; yybegin(HEREDOC_EOT_SINGLE_QUOTED); } case 70: break; case 47: { start = zzStartRead; yybegin(HEREDOC_EOF_UNQUOTED); } case 71: break; case 14: { /* Skip escaped chars. */ } case 72: break; case 25: { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); } case 73: break; case 43: { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } case 74: break; case 28: { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_UNQUOTED); return firstToken; } case 75: break; case 6: { addToken(Token.WHITESPACE); } case 76: break; case 17: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_BANG); return firstToken; } case 77: break; case 35: { addToken(Token.PREPROCESSOR); } case 78: break; case 11: { start = zzMarkedPos-1; yybegin(CHAR_LITERAL); } case 79: break; case 3: { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } case 80: break; case 38: { start = zzMarkedPos-yylength(); yybegin(STRING_Q_SLASH); } case 81: break; case 27: { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); } case 82: break; case 16: { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } case 83: break; case 37: { start = zzMarkedPos-yylength(); yybegin(STRING_Q_BANG); } case 84: break; case 23: { /* Skip escaped single quotes only, but this should still work. */ } case 85: break; case 30: { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_UNQUOTED); return firstToken; } case 86: break; case 49: { start = zzMarkedPos-6; yybegin(DOCCOMMENT); } case 87: break; case 34: { addToken(Token.RESERVED_WORD); } case 88: break; case 26: { addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; } case 89: break; case 36: { start = zzMarkedPos-yylength(); yybegin(STRING_Q_SQUARE_BRACKET); } case 90: break; case 8: { addToken(Token.SEPARATOR); } case 91: break; case 5: { addNullToken(); return firstToken; } case 92: break; case 21: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_SQUARE_BRACKET); return firstToken; } case 93: break; case 40: { start = zzMarkedPos-yylength(); yybegin(STRING_Q_PAREN); } case 94: break; case 7: { addToken(Token.OPERATOR); } case 95: break; case 24: { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } case 96: break; case 33: { addToken(Token.LITERAL_NUMBER_FLOAT); } case 97: break; case 48: { start = zzStartRead; yybegin(HEREDOC_EOT_UNQUOTED); } case 98: break; case 12: { start = zzMarkedPos-1; yybegin(BACKTICKS); } case 99: break; case 13: { } case 100: break; case 15: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } case 101: break; case 29: { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); return firstToken; } case 102: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case HEREDOC_EOF_SINGLE_QUOTED: { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); return firstToken; } case 348: break; case DOCCOMMENT: { yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); return firstToken; } case 349: break; case HEREDOC_EOT_SINGLE_QUOTED: { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); return firstToken; } case 350: break; case HEREDOC_EOT_UNQUOTED: { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_UNQUOTED); return firstToken; } case 351: break; case STRING_Q_SLASH: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_SLASH); return firstToken; } case 352: break; case STRING_Q_BANG: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_BANG); return firstToken; } case 353: break; case STRING_Q_LT: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_LT); return firstToken; } case 354: break; case STRING: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } case 355: break; case BACKTICKS: { addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; } case 356: break; case YYINITIAL: { addNullToken(); return firstToken; } case 357: break; case HEREDOC_EOF_UNQUOTED: { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_UNQUOTED); return firstToken; } case 358: break; case STRING_Q_CURLY_BRACE: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_CURLY_BRACE); return firstToken; } case 359: break; case STRING_Q_PAREN: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_PAREN); return firstToken; } case 360: break; case CHAR_LITERAL: { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } case 361: break; case STRING_Q_SQUARE_BRACKET: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_SQUARE_BRACKET); return firstToken; } case 362: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SASTokenMaker.flex000066400000000000000000000347631257417003700312340ustar00rootroot00000000000000/* * 02/25/2005 * * SASTokenMaker.java - Scanner for SAS files. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * This class generates tokens representing a text stream as SAS.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated SASTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.5 * */ %% %public %class SASTokenMaker %extends AbstractJFlexTokenMaker %unicode %ignorecase %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public SASTokenMaker() { super(); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "*", null }; } /** * Returns whether tokens of the specified type should have "mark * occurrences" enabled for the current programming language. * * @param type The token type. * @return Whether tokens of this type should have "mark occurrences" * enabled. */ public boolean getMarkOccurrencesOfTokenType(int type) { return type==Token.IDENTIFIER || type==Token.VARIABLE; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.LITERAL_STRING_DOUBLE_QUOTE: state = STRING; start = text.offset; break; case Token.LITERAL_CHAR: state = CHAR; start = text.offset; break; case Token.COMMENT_MULTILINE: state = MLC; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} LineTerminator = ([\n]) Letter = ([A-Za-z_]) Digit = ([0-9]) Whitespace = ([ \t]+) Semicolon = ([;]) Identifier = (({Letter}|{Digit})+) MacroVariable = (&{Identifier}) Operators1 = ("+"|"-"|"*"|"/"|"^"|"|") Operators2 = (([\^\~]?=)|(">"[=]?)|("<"[=]?)) Operators3 = ("eq"|"ne"|"gt"|"lt"|"ge"|"le"|"in") Operator = ({Operators1}|{Operators2}|{Operators3}) Separator = ([\(\)]) StringBoundary = (\") CharBoundary = (\') LineCommentBegin = ("*") MLCBegin = ("/*") MLCEnd = ("*/") %state STRING %state CHAR %state MLC %% { /* Keywords */ "_all_" | "_character_" | "_data_" | "_infile_" | "_last_" | "_null_" | "_numeric_" | "_page_" | "_temporary_" | "abend" | "abort" | "all" | "alter" | "and" | "array" | "as" | "ascending" | "attrib" | "axis" | "bell" | "blank" | "border" | "bounds" | "by" | "call" | "cancel" | "cards" | "cards4" | "choro" | "class" | "classes" | "clear" | "close" | "compute" | "contrast" | "coord" | "coordinates" | "cov" | "create" | "data" | "datalines" | "datalines4" | "delete" | "descending" | "describe" | "discrete" | "disk" | "display" | "dm" | "do" | "drop" | "dummy" | "else" | "end" | "endrsubmit" | "endsas" | "error" | "except" | "expandtabs" | "factors" | "file" | "filename" | "flowover" | "footnote" | "frame" | "freq" | "from" | "go" | "goption" | "goptions" | "goto" | "grid" | "group" | "groupby" | "groupformat" | "having" | "haxis" | "hbar" | "heading" | "high" | "html" | "id" | "if" | "infile" | "informat" | "inner" | "input" | "insert" | "intersect" | "keep" | "keylabel" | "label" | "lable" | "legend" | "length" | "libname" | "lineqs" | "link" | "list" | "listing" | "log" | "lostcard" | "low" | "mark" | "matings" | "mean" | "merge" | "missing" | "missover" | "mod" | "model" | "modify" | "n" | "nocell" | "nocharacters" | "nodupkey" | "noexpandtabs" | "noframe" | "noheading" | "noinput" | "nolegend" | "nopad" | "noprint" | "nosharebuffers" | "not" | "note" | "notitle" | "notitles" | "notsorted" | "ods" | "old" | "option" | "or" | "order" | "orderby" | "other" | "otherwise" | "outer" | "output" | "over" | "overlay" | "overprint" | "pad" | "pageby" | "pagesize" | "parmcards" | "parmcards4" | "parms" | "pattern" | "pct" | "pctn" | "pctsum" | "picture" | "pie" | "pie3d" | "plotter" | "predict" | "prefix" | "printer" | "proc" | "ps" | "put" | "quit" | "random" | "range" | "remove" | "rename" | "response" | "replace" | "reset" | "retain" | "return" | "rsubmit" | "run" | "s2" | "select" | "set" | "sharebuffers" | "signoff" | "signon" | "sim" | "skip" | "source2" | "startsas" | "std" | "stop" | "stopover" | "strata" | "sum" | "sumby" | "supvar" | "symbol" | "table" | "tables" | "tape" | "terminal" | "test" | "then" | "time" | "title" | "to" | "transform" | "treatments" | "truncover" | "unbuf" | "unbuffered" | "union" | "until" | "update" | "validate" | "value" | "var" | "variables" | "vaxis" | "vbar" | "weight" | "when" | "where" | "while" | "with" | "window" | "x" { addToken(Token.RESERVED_WORD); } /* Base SAS procs. */ "append" | "calendar" | "catalog" | "chart" | "cimport" | "compare" | "contents" | "copy" | "cpm" | "cport" | "datasets" | "display" | "explode" | "export" | "fontreg" | "format" | "forms" | "fslist" | "import" | "means" | "migrate" | "options" | "optload" | "optsave" | "plot" | "pmenu" | "print" | "printto" | "proto" | "prtdef" | "prtexp" | "pwencode" | "rank" | "registry" | "report" | "sort" | "sql" | "standard" | "summary" | "tabulate" | "template" | "timeplot" | "transpose" { addToken(Token.DATA_TYPE); } /* SAS/STAT procs. */ "corr" | "freq" | "univariate" { addToken(Token.DATA_TYPE); } /* Macros. */ "%abort" | "%bquote" | "%by" | "%cms" | "%copy" | "%display" | "%do" | "%else" | "%end" | "%eval" | "%global" | "%go" | "%goto" | "%if" | "%inc" | "%include" | "%index" | "%input" | "%keydef" | "%length" | "%let" | "%local" | "%macro" | "%mend" | "%nrbquote" | "%nrquote" | "%nrstr" | "%put" | "%qscan" | "%qsubstr" | "%qsysfunc" | "%quote" | "%qupcase" | "%scan" | "%str" | "%substr" | "%superq" | "%syscall" | "%sysevalf" | "%sysexec" | "%sysfunc" | "%sysget" | "%sysprod" | "%sysrput" | "%then" | "%to" | "%tso" | "%unquote" | "%until" | "%upcase" | "%while" | "%window" { addToken(Token.FUNCTION); } } { {LineTerminator} { addNullToken(); return firstToken; } /* Comments. */ /* Do comments before operators as "*" can signify a line comment as */ /* well as an operator. */ ^[ \t]*{LineCommentBegin} { // We must do this because of how we // abuse JFlex; since we return an entire // list of tokens at once instead of a // single token at a time, the "^" regex // character doesn't really work, so we must // check that we're at the beginning of a // line ourselves. start = zzStartRead; // Might not be any whitespace. if (yylength()>1) { addToken(zzStartRead,zzMarkedPos-2, Token.WHITESPACE); zzStartRead = zzMarkedPos-1; } // Remember: zzStartRead may now be updated, // so we must check against 'start'. if (start==s.offset) { addToken(zzStartRead,zzEndRead, Token.COMMENT_EOL); addNullToken(); return firstToken; } else { addToken(zzStartRead,zzStartRead, Token.OPERATOR); } } {MLCBegin} { start = zzMarkedPos-2; yybegin(MLC); } /* Do operators before identifiers since some of them are words. */ {Operator} { addToken(Token.OPERATOR); } {Separator} { addToken(Token.SEPARATOR); } {Identifier} { addToken(Token.IDENTIFIER); } {MacroVariable} { addToken(Token.VARIABLE); } {Semicolon} { addToken(Token.IDENTIFIER); } {Whitespace} { addToken(Token.WHITESPACE); } {StringBoundary} { start = zzMarkedPos-1; yybegin(STRING); } {CharBoundary} { start = zzMarkedPos-1; yybegin(CHAR); } <> { addNullToken(); return firstToken; } /* Catch any other (unhandled) characters and flag them as OK; */ /* This will include "." from statements like "from lib.dataset". */ . { addToken(Token.IDENTIFIER); } } { [^\n\"]+ {} {LineTerminator} { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } /* {StringBoundary}{StringBoundary} {} */ {StringBoundary} { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } } { [^\n\']+ {} {LineTerminator} { yybegin(YYINITIAL); addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } /* {CharBoundary}{CharBoundary} {} */ {CharBoundary} { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); } <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } } { [^\n\*]+ {} {LineTerminator} { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } \* {} <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SASTokenMaker.java000066400000000000000000001655651257417003700312240ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 1/20/09 10:04 AM */ /* * 02/25/2005 * * SASTokenMaker.java - Scanner for SAS files. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * This class generates tokens representing a text stream as SAS.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated SASTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.5 * */ public class SASTokenMaker extends AbstractJFlexTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int STRING = 2; public static final int YYINITIAL = 0; public static final int MLC = 6; public static final int CHAR = 4; /** * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l * at the beginning of a line * l is of the form l = 2*k, k a non negative integer */ private static final int ZZ_LEXSTATE[] = { 0, 1, 2, 2, 3, 3, 4, 4 }; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\3\1\1\25\0\1\3\1\0\1\23\2\0\1\53\1\4"+ "\1\24\2\22\1\6\1\5\1\0\1\5\1\0\1\7\2\2\1\52"+ "\1\51\1\45\5\2\1\0\1\0\1\10\1\12\1\10\2\0\1\26"+ "\1\42\1\27\1\32\1\13\1\33\1\16\1\30\1\21\1\2\1\44"+ "\1\20\1\36\1\15\1\40\1\37\1\14\1\31\1\34\1\17\1\35"+ "\1\46\1\47\1\43\1\41\1\50\3\0\1\10\1\25\1\0\1\26"+ "\1\42\1\27\1\32\1\13\1\33\1\16\1\30\1\21\1\2\1\44"+ "\1\20\1\36\1\15\1\40\1\37\1\14\1\31\1\34\1\17\1\35"+ "\1\46\1\47\1\43\1\41\1\50\1\0\1\5\1\0\1\11\uff81\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\5\0\1\1\1\2\1\1\1\3\1\1\3\4\3\1"+ "\1\5\4\1\1\6\1\7\1\10\15\1\1\5\4\1"+ "\1\3\1\11\1\12\1\13\1\14\1\12\1\15\1\16"+ "\1\12\1\17\1\12\1\20\1\21\1\4\7\1\1\5"+ "\5\1\1\4\3\1\1\4\15\1\1\5\66\1\1\5"+ "\14\1\21\0\1\22\1\5\5\1\1\5\66\1\1\23"+ "\50\1\1\5\15\1\1\5\1\1\1\5\4\1\1\5"+ "\20\1\1\5\3\1\7\0\1\24\2\0\1\24\24\0"+ "\21\1\1\5\6\1\1\5\44\1\1\5\1\1\1\5"+ "\11\1\1\5\7\1\1\5\4\1\1\23\22\1\1\5"+ "\5\1\12\0\1\24\16\0\10\1\1\5\3\1\1\5"+ "\13\1\1\5\2\1\1\5\3\1\1\5\23\1\1\5"+ "\10\1\1\23\2\5\6\1\16\0\42\1\13\0\17\1"+ "\2\0\12\1"; private static int [] zzUnpackAction() { int [] result = new int[639]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\54\0\130\0\204\0\260\0\334\0\334\0\u0108"+ "\0\u0134\0\u0160\0\334\0\u018c\0\u01b8\0\u01b8\0\u01e4\0\u0210"+ "\0\u023c\0\u0268\0\u0294\0\u02c0\0\u02ec\0\334\0\334\0\334"+ "\0\u0318\0\u0344\0\u0370\0\u039c\0\u03c8\0\u03f4\0\u0420\0\u044c"+ "\0\u0478\0\u04a4\0\u04d0\0\u04fc\0\u0528\0\u0108\0\u0554\0\u0580"+ "\0\u05ac\0\u05d8\0\u0604\0\334\0\u0630\0\334\0\334\0\u065c"+ "\0\334\0\334\0\u0688\0\334\0\u06b4\0\u0160\0\334\0\u0108"+ "\0\u06e0\0\u070c\0\u0738\0\u0764\0\u0790\0\u07bc\0\u07e8\0\u0814"+ "\0\u0840\0\u086c\0\u0898\0\u08c4\0\u08f0\0\u091c\0\u0948\0\u0974"+ "\0\u09a0\0\u09cc\0\u09f8\0\u0a24\0\u0a50\0\u0a7c\0\u0aa8\0\u0ad4"+ "\0\u0b00\0\u0b2c\0\u0b58\0\u0b84\0\u0bb0\0\u0bdc\0\u0c08\0\u0c34"+ "\0\u0c60\0\u0c8c\0\u0cb8\0\u0ce4\0\u0d10\0\u0d3c\0\u0d68\0\u0d94"+ "\0\u0dc0\0\u0dec\0\u0e18\0\u0e44\0\u0e70\0\u0e9c\0\u0ec8\0\u0ef4"+ "\0\u0f20\0\u0f4c\0\u0f78\0\u0fa4\0\u0fd0\0\u0ffc\0\u1028\0\u1054"+ "\0\u1080\0\u10ac\0\u10d8\0\u1104\0\u1130\0\u115c\0\u1188\0\u11b4"+ "\0\u11e0\0\u120c\0\u1238\0\u1264\0\u1290\0\u12bc\0\u12e8\0\u1314"+ "\0\u1340\0\u136c\0\u1398\0\u13c4\0\u13f0\0\u141c\0\u1448\0\u1474"+ "\0\u14a0\0\u14cc\0\u14f8\0\u1524\0\u1550\0\u157c\0\u15a8\0\u15d4"+ "\0\u1600\0\u162c\0\u1658\0\u1684\0\u16b0\0\u16dc\0\u1708\0\u1734"+ "\0\u1760\0\u178c\0\u17b8\0\u17e4\0\u1810\0\u183c\0\u1868\0\u1894"+ "\0\u18c0\0\u18ec\0\u1918\0\u1944\0\u1970\0\u199c\0\u19c8\0\u19f4"+ "\0\u1a20\0\u1a4c\0\u1a78\0\u1aa4\0\334\0\u1ad0\0\u1afc\0\u1b28"+ "\0\u1b54\0\u1b80\0\u1bac\0\u1bd8\0\u1c04\0\u1c30\0\u1c5c\0\u1c88"+ "\0\u1cb4\0\u1ce0\0\u1d0c\0\u1d38\0\u1d64\0\u1d90\0\u1dbc\0\u1de8"+ "\0\u1e14\0\u1e40\0\u1e6c\0\u1e98\0\u1ec4\0\u1ef0\0\u1f1c\0\u1f48"+ "\0\u1f74\0\u1fa0\0\u1fcc\0\u1ff8\0\u2024\0\u2050\0\u207c\0\u20a8"+ "\0\u20d4\0\u2100\0\u212c\0\u2158\0\u2184\0\u21b0\0\u21dc\0\u2208"+ "\0\u2234\0\u2260\0\u228c\0\u22b8\0\u22e4\0\u2310\0\u233c\0\u2368"+ "\0\u2394\0\u23c0\0\u23ec\0\u2418\0\u2444\0\u2470\0\u249c\0\u24c8"+ "\0\u24f4\0\u2520\0\u0108\0\u254c\0\u2578\0\u25a4\0\u25d0\0\u25fc"+ "\0\u2628\0\u2654\0\u2680\0\u26ac\0\u26d8\0\u2704\0\u2730\0\u275c"+ "\0\u2788\0\u27b4\0\u27e0\0\u280c\0\u2838\0\u2864\0\u2890\0\u28bc"+ "\0\u28e8\0\u2914\0\u2940\0\u296c\0\u2998\0\u29c4\0\u29f0\0\u2a1c"+ "\0\u2a48\0\u2a74\0\u2aa0\0\u2acc\0\u2af8\0\u2b24\0\u2b50\0\u2b7c"+ "\0\u2ba8\0\u2bd4\0\u2c00\0\u2c2c\0\u2c58\0\u2c84\0\u2cb0\0\u2cdc"+ "\0\u2d08\0\u2d34\0\u2d60\0\u2d8c\0\u2db8\0\u2de4\0\u2e10\0\u2e3c"+ "\0\u2e68\0\u2e94\0\u2ec0\0\u2eec\0\u2f18\0\u2f44\0\u2f70\0\u2f9c"+ "\0\u2fc8\0\u2ff4\0\u3020\0\u304c\0\u3078\0\u30a4\0\u30d0\0\u30fc"+ "\0\u3128\0\u3154\0\u3180\0\u31ac\0\u31d8\0\u3204\0\u3230\0\u325c"+ "\0\u3288\0\u32b4\0\u32e0\0\u330c\0\u3338\0\u3364\0\u3390\0\u33bc"+ "\0\u33e8\0\u3414\0\u3440\0\u346c\0\u3498\0\u34c4\0\u34f0\0\334"+ "\0\u351c\0\u3548\0\u3574\0\u35a0\0\u35cc\0\u35f8\0\u3624\0\u3650"+ "\0\u367c\0\u36a8\0\u36d4\0\u3700\0\u372c\0\u3758\0\u3784\0\u37b0"+ "\0\u37dc\0\u3808\0\u3834\0\u3860\0\u388c\0\u38b8\0\u38e4\0\u3910"+ "\0\u393c\0\u3968\0\u3994\0\u39c0\0\u39ec\0\u3a18\0\u3a44\0\u3a70"+ "\0\u3a9c\0\u3ac8\0\u3af4\0\u3b20\0\u3b4c\0\u3b78\0\u3ba4\0\u3bd0"+ "\0\u3bfc\0\u3c28\0\u3c54\0\u3c80\0\u26ac\0\u3cac\0\u3cd8\0\u3d04"+ "\0\u3d30\0\u3d5c\0\u3d88\0\u3db4\0\u3de0\0\u3e0c\0\u3e38\0\u3e64"+ "\0\u3e90\0\u3ebc\0\u3ee8\0\u3f14\0\u3f40\0\u3f6c\0\u3f98\0\u3fc4"+ "\0\u3ff0\0\u401c\0\u4048\0\u4074\0\u40a0\0\u40cc\0\u40f8\0\u4124"+ "\0\u4150\0\u417c\0\u41a8\0\u41d4\0\u4200\0\u422c\0\u4258\0\u4284"+ "\0\u42b0\0\u42dc\0\u4308\0\u1ff8\0\u4334\0\u4360\0\u438c\0\u43b8"+ "\0\u43e4\0\u4410\0\u443c\0\u4468\0\u4494\0\u4308\0\u44c0\0\u44ec"+ "\0\u4518\0\u4544\0\u4570\0\u459c\0\u45c8\0\u45f4\0\u4620\0\u464c"+ "\0\u4678\0\u46a4\0\u46d0\0\u46fc\0\u4728\0\u4754\0\u4780\0\u47ac"+ "\0\u47d8\0\u4804\0\u4830\0\u485c\0\u4888\0\u48b4\0\u48e0\0\u490c"+ "\0\u4938\0\u4964\0\u4990\0\u49bc\0\u49e8\0\u4a14\0\u4a40\0\u4a6c"+ "\0\u4a98\0\u4ac4\0\u4af0\0\u4b1c\0\u4b48\0\u4b74\0\u4ba0\0\u4bcc"+ "\0\u4bf8\0\u4c24\0\u4c50\0\u4c7c\0\u4ca8\0\u4cd4\0\u4d00\0\u4d2c"+ "\0\u4d58\0\u4d84\0\u4db0\0\u4ddc\0\u4e08\0\u4e34\0\u4e60\0\u4e8c"+ "\0\u4eb8\0\u4ee4\0\u4f10\0\u4f3c\0\u4f68\0\u4f94\0\u4fc0\0\u4fec"+ "\0\u5018\0\u5044\0\u5070\0\u509c\0\u50c8\0\u50f4\0\u5120\0\u514c"+ "\0\u15d4\0\u5178\0\u51a4\0\u51d0\0\u51fc\0\u5228\0\u5254\0\u5280"+ "\0\u52ac\0\u52d8\0\u5304\0\u5330\0\u535c\0\u5388\0\u53b4\0\u53e0"+ "\0\u540c\0\u5438\0\u5464\0\u5490\0\u54bc\0\u54e8\0\u5514\0\u5540"+ "\0\u556c\0\u5598\0\u55c4\0\u55f0\0\u561c\0\u5648\0\u5674\0\u56a0"+ "\0\u56cc\0\u56f8\0\u5724\0\u5750\0\u577c\0\u57a8\0\u57d4\0\u5800"+ "\0\u582c\0\u5858\0\u5884\0\u58b0\0\u58dc\0\u5908\0\u5934\0\u5960"+ "\0\u598c\0\u59b8\0\u59e4\0\u5a10\0\u5a3c\0\u5a68\0\u5a94\0\u5ac0"+ "\0\u5aec\0\u5b18\0\u5b44\0\u5b70\0\u5b9c\0\u5bc8\0\u5bf4\0\u5c20"+ "\0\u5c4c\0\u5c78\0\u5ca4\0\u5cd0\0\u5cfc\0\u5d28\0\u5d54\0\u5d80"+ "\0\u5dac\0\u5dd8\0\u5e04\0\u5e30\0\u5e5c\0\u5e88\0\u5eb4\0\u5ee0"+ "\0\u5f0c\0\u5f38\0\u5f64\0\u5f90\0\u5fbc\0\u5fe8\0\u6014\0\u6040"+ "\0\u606c\0\u6098\0\u60c4\0\u60f0\0\u611c\0\u6148\0\u6174\0\u61a0"+ "\0\u61cc\0\u61f8\0\u6224\0\u6250\0\u627c\0\u62a8\0\u62d4\0\u6300"+ "\0\u632c\0\u6358\0\u6384\0\u63b0\0\u63dc\0\u6408\0\u6434\0\u6460"+ "\0\u648c\0\u64b8\0\u64e4\0\u6510\0\u653c\0\u6568\0\u6594\0\u65c0"+ "\0\u65ec\0\u6618\0\u6644\0\u6670\0\u669c\0\u45f4\0\u66c8\0\u66f4"+ "\0\u6720\0\u674c\0\u535c\0\u6778\0\u67a4\0\u67d0\0\u67fc\0\u6828"+ "\0\u6854\0\u6880\0\u68ac\0\u68d8\0\u6904\0\u6930\0\u695c"; private static int [] zzUnpackRowMap() { int [] result = new int[639]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\6\1\7\1\10\1\11\1\12\2\13\1\14\1\15"+ "\1\16\1\13\1\17\1\20\1\21\1\22\1\23\1\24"+ "\1\25\1\26\1\27\1\30\1\31\1\32\1\33\1\34"+ "\1\35\1\36\1\37\1\40\1\41\1\42\1\43\1\44"+ "\1\10\1\45\1\46\1\47\1\10\1\50\1\51\3\10"+ "\1\52\1\6\1\7\1\10\1\53\1\12\1\13\1\54"+ "\1\14\1\15\1\16\1\13\1\17\1\20\1\21\1\22"+ "\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1\32"+ "\1\33\1\34\1\35\1\36\1\37\1\40\1\41\1\42"+ "\1\43\1\44\1\10\1\45\1\46\1\47\1\10\1\50"+ "\1\51\3\10\1\52\1\55\1\56\21\55\1\57\30\55"+ "\1\60\1\61\22\60\1\62\27\60\1\63\1\64\4\63"+ "\1\65\45\63\56\0\1\10\10\0\7\10\3\0\26\10"+ "\4\0\1\11\52\0\1\66\10\0\7\66\3\0\26\66"+ "\7\0\1\67\57\0\1\13\43\0\1\10\10\0\1\10"+ "\1\70\1\71\2\10\1\72\1\10\3\0\4\10\1\73"+ "\11\10\1\74\7\10\3\0\1\10\10\0\7\10\3\0"+ "\10\10\1\75\15\10\3\0\1\10\10\0\1\70\6\10"+ "\3\0\13\10\1\76\12\10\3\0\1\10\10\0\1\70"+ "\3\10\1\70\2\10\3\0\4\10\1\77\6\10\1\100"+ "\12\10\3\0\1\10\10\0\1\101\5\10\1\102\3\0"+ "\1\10\1\103\1\10\1\104\1\105\6\10\1\46\12\10"+ "\3\0\1\10\10\0\1\106\3\10\1\70\1\10\1\107"+ "\3\0\1\10\1\110\11\10\1\111\12\10\3\0\1\10"+ "\10\0\2\10\1\112\4\10\3\0\5\10\2\46\2\10"+ "\1\113\14\10\3\0\1\10\10\0\2\10\1\114\1\10"+ "\1\115\1\116\1\117\3\0\1\10\1\120\1\121\2\10"+ "\1\122\4\10\1\123\13\10\3\0\1\10\10\0\2\10"+ "\1\124\1\10\1\125\1\126\1\10\3\0\4\10\1\127"+ "\2\10\1\130\2\10\1\131\2\10\1\132\1\133\7\10"+ "\3\0\1\10\10\0\5\10\1\134\1\135\3\0\1\10"+ "\1\136\1\10\1\137\1\140\5\10\1\141\1\142\12\10"+ "\3\0\1\10\10\0\1\143\3\10\1\144\1\10\1\145"+ "\3\0\1\10\1\146\13\10\1\147\10\10\3\0\1\10"+ "\10\0\1\150\6\10\3\0\1\10\1\151\5\10\1\152"+ "\1\153\15\10\3\0\1\10\10\0\1\154\5\10\1\155"+ "\3\0\1\10\1\156\2\10\1\157\3\10\1\160\1\46"+ "\1\10\1\46\12\10\3\0\1\10\10\0\5\10\1\161"+ "\1\162\3\0\1\10\1\163\2\10\1\164\2\10\1\165"+ "\3\10\1\166\12\10\3\0\1\10\10\0\1\167\1\170"+ "\2\10\1\171\1\10\1\172\3\0\3\10\1\173\4\10"+ "\1\174\2\10\1\175\1\176\2\10\1\177\5\10\1\46"+ "\3\0\1\10\10\0\2\10\1\200\4\10\3\0\12\10"+ "\1\201\13\10\3\0\1\10\10\0\1\202\5\10\1\203"+ "\3\0\1\10\1\204\11\10\1\205\12\10\3\0\1\10"+ "\10\0\5\10\1\206\1\207\3\0\1\10\1\210\1\211"+ "\1\10\1\212\2\10\1\46\1\213\1\214\10\10\1\215"+ "\3\10\3\0\1\10\10\0\4\10\1\216\1\124\1\10"+ "\3\0\4\10\1\217\1\220\2\10\1\221\1\10\1\222"+ "\6\10\1\223\4\10\3\0\1\10\10\0\1\224\4\10"+ "\1\225\1\10\3\0\13\10\1\226\1\46\11\10\3\0"+ "\1\10\10\0\1\227\6\10\3\0\26\10\3\0\1\10"+ "\10\0\7\10\3\0\1\10\1\230\13\10\1\147\10\10"+ "\3\0\1\10\10\0\1\231\5\10\1\232\3\0\3\10"+ "\1\233\22\10\14\0\1\234\1\235\1\236\1\237\1\240"+ "\1\241\1\242\4\0\1\243\1\244\2\0\1\245\1\0"+ "\1\246\1\247\1\250\1\251\2\0\1\252\1\0\1\253"+ "\2\0\1\254\7\0\1\53\2\0\1\54\45\0\1\55"+ "\1\0\21\55\1\0\30\55\1\60\1\0\22\60\1\0"+ "\27\60\1\63\1\0\4\63\1\0\45\63\7\0\1\255"+ "\46\0\1\10\10\0\7\10\3\0\5\10\1\256\20\10"+ "\3\0\1\10\10\0\7\10\3\0\7\10\1\257\16\10"+ "\3\0\1\10\10\0\7\10\3\0\4\10\1\260\21\10"+ "\3\0\1\10\10\0\7\10\3\0\2\10\1\261\7\10"+ "\1\262\13\10\3\0\1\10\10\0\6\10\1\213\3\0"+ "\26\10\3\0\1\10\10\0\1\263\3\10\1\264\1\265"+ "\1\266\3\0\2\10\1\267\1\270\1\10\1\271\1\272"+ "\1\273\2\10\1\274\13\10\3\0\1\10\10\0\6\10"+ "\1\124\3\0\13\10\1\275\12\10\3\0\1\10\10\0"+ "\4\10\1\276\2\10\3\0\12\10\1\277\13\10\3\0"+ "\1\10\10\0\7\10\3\0\4\10\1\300\2\10\1\213"+ "\1\10\1\301\14\10\3\0\1\10\10\0\4\10\1\302"+ "\2\10\3\0\11\10\1\303\14\10\3\0\1\10\10\0"+ "\7\10\3\0\12\10\1\257\2\10\1\304\10\10\3\0"+ "\1\10\10\0\1\153\6\10\3\0\26\10\3\0\1\10"+ "\10\0\1\305\6\10\3\0\1\10\1\306\6\10\1\307"+ "\15\10\3\0\1\10\10\0\2\10\1\310\1\311\3\10"+ "\3\0\26\10\3\0\1\10\10\0\2\10\1\312\4\10"+ "\3\0\7\10\1\313\5\10\1\314\10\10\3\0\1\10"+ "\10\0\7\10\3\0\15\10\1\315\10\10\3\0\1\10"+ "\10\0\3\10\1\46\3\10\3\0\7\10\1\316\12\10"+ "\1\46\3\10\3\0\1\10\10\0\2\10\1\317\1\10"+ "\1\320\2\10\3\0\6\10\1\321\1\322\2\10\1\323"+ "\13\10\3\0\1\10\10\0\7\10\3\0\12\10\1\324"+ "\13\10\3\0\1\10\10\0\7\10\3\0\10\10\1\325"+ "\15\10\3\0\1\10\10\0\1\326\6\10\3\0\26\10"+ "\3\0\1\10\10\0\7\10\3\0\1\10\1\327\24\10"+ "\3\0\1\10\10\0\2\10\1\330\4\10\3\0\26\10"+ "\3\0\1\10\10\0\5\10\1\331\1\10\3\0\26\10"+ "\3\0\1\10\10\0\7\10\3\0\3\10\1\332\22\10"+ "\3\0\1\10\10\0\7\10\3\0\1\10\1\333\24\10"+ "\3\0\1\10\10\0\7\10\3\0\1\10\1\334\24\10"+ "\3\0\1\10\10\0\7\10\3\0\5\10\1\46\20\10"+ "\3\0\1\10\10\0\4\10\1\335\2\10\3\0\26\10"+ "\3\0\1\10\10\0\4\10\1\317\1\46\1\10\3\0"+ "\26\10\3\0\1\10\10\0\7\10\3\0\4\10\1\336"+ "\21\10\3\0\1\10\10\0\7\10\3\0\2\10\1\337"+ "\23\10\3\0\1\10\10\0\7\10\3\0\12\10\1\340"+ "\13\10\3\0\1\10\10\0\1\341\6\10\3\0\13\10"+ "\1\342\12\10\3\0\1\10\10\0\6\10\1\220\3\0"+ "\26\10\3\0\1\10\10\0\1\147\6\10\3\0\1\10"+ "\1\343\11\10\1\72\12\10\3\0\1\10\10\0\7\10"+ "\3\0\11\10\1\113\14\10\3\0\1\10\10\0\2\10"+ "\1\344\1\10\1\345\1\346\1\10\3\0\4\10\1\347"+ "\21\10\3\0\1\10\10\0\7\10\3\0\1\10\1\350"+ "\11\10\1\351\12\10\3\0\1\10\10\0\1\352\6\10"+ "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\11\10"+ "\1\353\1\10\1\350\12\10\3\0\1\10\10\0\2\10"+ "\1\354\4\10\3\0\4\10\1\355\4\10\1\356\1\357"+ "\1\360\5\10\1\46\4\10\3\0\1\10\10\0\7\10"+ "\3\0\1\10\1\361\24\10\3\0\1\10\10\0\7\10"+ "\3\0\11\10\1\362\14\10\3\0\1\10\10\0\3\10"+ "\1\363\3\10\3\0\26\10\3\0\1\10\10\0\7\10"+ "\3\0\16\10\1\133\2\10\1\364\4\10\3\0\1\10"+ "\10\0\7\10\3\0\1\10\1\365\24\10\3\0\1\10"+ "\10\0\2\10\1\366\1\367\1\370\2\10\3\0\7\10"+ "\1\371\1\10\1\372\1\373\13\10\3\0\1\10\10\0"+ "\2\10\1\374\4\10\3\0\26\10\3\0\1\10\10\0"+ "\7\10\3\0\10\10\1\375\15\10\3\0\1\10\10\0"+ "\2\10\1\46\4\10\3\0\26\10\3\0\1\10\10\0"+ "\5\10\1\376\1\10\3\0\7\10\1\377\16\10\3\0"+ "\1\10\10\0\7\10\3\0\7\10\1\u0100\16\10\3\0"+ "\1\10\10\0\4\10\1\u0101\2\10\3\0\26\10\3\0"+ "\1\10\10\0\7\10\3\0\13\10\1\u0102\12\10\3\0"+ "\1\10\10\0\7\10\3\0\11\10\1\u0103\14\10\3\0"+ "\1\10\10\0\7\10\3\0\13\10\1\u0104\12\10\3\0"+ "\1\10\10\0\5\10\1\u0105\1\10\3\0\26\10\3\0"+ "\1\10\10\0\7\10\3\0\2\10\1\u0106\23\10\3\0"+ "\1\10\10\0\1\u0107\6\10\3\0\1\10\1\u0108\11\10"+ "\1\u0109\12\10\3\0\1\10\10\0\5\10\1\u010a\1\10"+ "\3\0\26\10\3\0\1\10\10\0\2\10\1\u010b\4\10"+ "\3\0\4\10\1\u010c\6\10\1\u010d\12\10\3\0\1\10"+ "\10\0\4\10\1\46\1\u010e\1\10\3\0\26\10\3\0"+ "\1\10\10\0\5\10\1\353\1\10\3\0\26\10\3\0"+ "\1\10\10\0\7\10\3\0\1\10\1\u010f\2\10\1\u0110"+ "\1\46\5\10\1\u0111\12\10\3\0\1\10\10\0\3\10"+ "\1\u0112\3\10\3\0\11\10\1\46\14\10\3\0\1\10"+ "\10\0\7\10\3\0\1\10\1\u0113\24\10\3\0\1\10"+ "\10\0\7\10\3\0\11\10\1\u0114\1\u0115\13\10\3\0"+ "\1\10\10\0\7\10\3\0\4\10\1\u0116\3\10\1\u0117"+ "\15\10\3\0\1\10\10\0\7\10\3\0\11\10\1\u0118"+ "\14\10\3\0\1\10\10\0\6\10\1\u0102\3\0\26\10"+ "\3\0\1\10\10\0\4\10\1\u0119\1\10\1\u011a\3\0"+ "\15\10\1\u011b\10\10\3\0\1\10\10\0\7\10\3\0"+ "\5\10\1\352\20\10\3\0\1\10\10\0\7\10\3\0"+ "\1\10\1\u011c\2\10\1\u011d\21\10\3\0\1\10\10\0"+ "\3\10\1\u011e\3\10\3\0\7\10\1\u011f\16\10\3\0"+ "\1\10\10\0\4\10\1\u0120\2\10\3\0\4\10\1\u0121"+ "\21\10\3\0\1\10\10\0\7\10\3\0\5\10\1\u0122"+ "\20\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u0123"+ "\12\10\3\0\1\10\10\0\1\u0124\6\10\3\0\2\10"+ "\1\u0125\23\10\3\0\1\10\10\0\3\10\1\u0126\1\u0127"+ "\2\10\3\0\4\10\1\u0128\1\46\20\10\3\0\1\10"+ "\10\0\4\10\1\u0129\2\10\3\0\26\10\3\0\1\10"+ "\10\0\1\u012a\3\10\1\u012b\1\10\1\u012c\3\0\13\10"+ "\1\u012d\12\10\3\0\1\10\10\0\4\10\1\46\2\10"+ "\3\0\26\10\3\0\1\10\10\0\1\u012e\6\10\3\0"+ "\26\10\3\0\1\10\10\0\1\u012f\6\10\3\0\26\10"+ "\3\0\1\10\10\0\7\10\3\0\3\10\1\u0130\22\10"+ "\3\0\1\10\10\0\7\10\3\0\5\10\1\u0131\20\10"+ "\3\0\1\10\10\0\7\10\3\0\7\10\1\46\16\10"+ "\3\0\1\10\10\0\4\10\1\u0132\2\10\3\0\26\10"+ "\3\0\1\10\10\0\4\10\1\u0133\2\10\3\0\26\10"+ "\3\0\1\10\10\0\1\u0134\6\10\3\0\26\10\3\0"+ "\1\10\10\0\5\10\1\362\1\10\3\0\26\10\3\0"+ "\1\10\10\0\7\10\3\0\1\10\1\u0135\24\10\3\0"+ "\1\10\10\0\7\10\3\0\4\10\1\u0136\3\10\1\u0137"+ "\15\10\3\0\1\10\10\0\1\u0102\6\10\3\0\14\10"+ "\1\u0138\11\10\3\0\1\10\10\0\5\10\1\u0139\1\10"+ "\3\0\4\10\1\u013a\11\10\1\133\7\10\3\0\1\10"+ "\10\0\6\10\1\u013b\3\0\26\10\3\0\1\10\10\0"+ "\2\10\1\u013c\1\10\1\363\2\10\3\0\26\10\3\0"+ "\1\10\10\0\1\u013d\5\10\1\302\3\0\26\10\16\0"+ "\1\u013e\2\0\1\u013f\25\0\1\u0140\41\0\1\u0141\1\u0142"+ "\47\0\1\u0143\42\0\1\u0144\17\0\1\u0145\43\0\1\u0146"+ "\3\0\1\u0147\3\0\1\u0148\26\0\1\u0149\24\0\1\u014a"+ "\30\0\1\u014b\15\0\1\u0148\62\0\1\u014c\47\0\1\u014d"+ "\1\0\1\u014e\34\0\1\u014f\16\0\1\u0148\32\0\1\u0150"+ "\7\0\1\u0151\5\0\1\u0152\3\0\1\u0153\27\0\1\u0154"+ "\21\0\1\u0155\27\0\1\u0156\12\0\1\u0157\62\0\1\u0158"+ "\32\0\1\u0159\24\0\1\u0148\25\0\1\u015a\61\0\1\u015b"+ "\6\0\1\u015c\25\0\1\10\10\0\7\10\3\0\4\10"+ "\1\u015d\2\10\1\u015e\16\10\3\0\1\10\10\0\1\46"+ "\6\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ "\13\10\1\365\12\10\3\0\1\10\10\0\1\u015f\6\10"+ "\3\0\26\10\3\0\1\10\10\0\5\10\1\u0160\1\10"+ "\3\0\1\10\1\u0161\11\10\1\350\12\10\3\0\1\10"+ "\10\0\7\10\3\0\16\10\1\u0162\7\10\3\0\1\10"+ "\10\0\1\46\5\10\1\u0163\3\0\7\10\1\u0164\16\10"+ "\3\0\1\10\10\0\1\u0165\6\10\3\0\26\10\3\0"+ "\1\10\10\0\2\10\1\u0166\4\10\3\0\26\10\3\0"+ "\1\10\10\0\1\224\6\10\3\0\3\10\1\u0167\22\10"+ "\3\0\1\10\10\0\1\143\6\10\3\0\26\10\3\0"+ "\1\10\10\0\7\10\3\0\10\10\1\u0168\15\10\3\0"+ "\1\10\10\0\7\10\3\0\4\10\1\366\21\10\3\0"+ "\1\10\10\0\7\10\3\0\3\10\1\173\22\10\3\0"+ "\1\10\10\0\7\10\3\0\1\10\1\124\2\10\1\u0169"+ "\21\10\3\0\1\10\10\0\7\10\3\0\10\10\1\u016a"+ "\15\10\3\0\1\10\10\0\7\10\3\0\13\10\1\46"+ "\12\10\3\0\1\10\10\0\4\10\1\u016b\2\10\3\0"+ "\26\10\3\0\1\10\10\0\7\10\3\0\11\10\1\u016c"+ "\14\10\3\0\1\10\10\0\7\10\3\0\12\10\1\u016d"+ "\13\10\3\0\1\10\10\0\5\10\1\257\1\10\3\0"+ "\26\10\3\0\1\10\10\0\1\u016e\6\10\3\0\26\10"+ "\3\0\1\10\10\0\5\10\1\u016f\1\10\3\0\10\10"+ "\1\u016d\15\10\3\0\1\10\10\0\7\10\3\0\1\10"+ "\1\u0170\24\10\3\0\1\10\10\0\2\10\1\u0171\4\10"+ "\3\0\26\10\3\0\1\10\10\0\2\10\1\u0172\4\10"+ "\3\0\26\10\3\0\1\10\10\0\3\10\1\u0173\3\10"+ "\3\0\26\10\3\0\1\10\10\0\1\341\6\10\3\0"+ "\26\10\3\0\1\10\10\0\1\u0174\6\10\3\0\17\10"+ "\1\46\6\10\3\0\1\10\10\0\4\10\1\u0175\2\10"+ "\3\0\26\10\3\0\1\10\10\0\2\10\1\366\4\10"+ "\3\0\26\10\3\0\1\10\10\0\1\362\4\10\1\257"+ "\1\10\3\0\26\10\3\0\1\10\10\0\4\10\1\u0176"+ "\2\10\3\0\26\10\3\0\1\10\10\0\1\365\6\10"+ "\3\0\26\10\3\0\1\10\10\0\1\u0177\6\10\3\0"+ "\26\10\3\0\1\10\10\0\6\10\1\302\3\0\13\10"+ "\1\u0178\12\10\3\0\1\10\10\0\1\342\6\10\3\0"+ "\26\10\3\0\1\10\10\0\7\10\3\0\10\10\1\213"+ "\15\10\3\0\1\10\10\0\7\10\3\0\13\10\1\350"+ "\12\10\3\0\1\10\10\0\5\10\1\331\1\10\3\0"+ "\11\10\1\u0179\14\10\3\0\1\10\10\0\7\10\3\0"+ "\11\10\1\u017a\14\10\3\0\1\10\10\0\7\10\3\0"+ "\7\10\1\u017b\16\10\3\0\1\10\10\0\7\10\3\0"+ "\6\10\1\u017c\17\10\3\0\1\10\10\0\5\10\1\u017d"+ "\1\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ "\1\10\1\u017e\24\10\3\0\1\10\10\0\4\10\1\u017f"+ "\2\10\3\0\26\10\3\0\1\10\10\0\3\10\1\u0180"+ "\3\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ "\4\10\1\u0181\21\10\3\0\1\10\10\0\7\10\3\0"+ "\1\10\1\u0182\24\10\3\0\1\10\10\0\1\u0183\6\10"+ "\3\0\26\10\3\0\1\10\10\0\1\u0184\6\10\3\0"+ "\26\10\3\0\1\10\10\0\2\10\1\124\4\10\3\0"+ "\26\10\3\0\1\10\10\0\7\10\3\0\4\10\1\213"+ "\21\10\3\0\1\10\10\0\7\10\3\0\7\10\1\u0185"+ "\16\10\3\0\1\10\10\0\7\10\3\0\2\10\1\u0186"+ "\23\10\3\0\1\10\10\0\7\10\3\0\1\10\1\u0187"+ "\24\10\3\0\1\10\10\0\1\u0188\4\10\1\46\1\10"+ "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\5\10"+ "\1\u0189\20\10\3\0\1\10\10\0\7\10\3\0\4\10"+ "\1\u0116\21\10\3\0\1\10\10\0\7\10\3\0\4\10"+ "\1\276\21\10\3\0\1\10\10\0\7\10\3\0\1\10"+ "\1\u018a\24\10\3\0\1\10\10\0\4\10\1\u018b\2\10"+ "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\4\10"+ "\1\353\21\10\3\0\1\10\10\0\7\10\3\0\12\10"+ "\1\u018c\13\10\3\0\1\10\10\0\7\10\3\0\14\10"+ "\1\353\11\10\3\0\1\10\10\0\7\10\3\0\4\10"+ "\1\u018d\21\10\3\0\1\10\10\0\7\10\3\0\5\10"+ "\1\364\20\10\3\0\1\10\10\0\5\10\1\46\1\10"+ "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\3\10"+ "\1\46\22\10\3\0\1\10\10\0\6\10\1\u018e\3\0"+ "\26\10\3\0\1\10\10\0\7\10\3\0\4\10\1\46"+ "\21\10\3\0\1\10\10\0\7\10\3\0\1\10\1\u0108"+ "\24\10\3\0\1\10\10\0\6\10\1\u018f\3\0\26\10"+ "\3\0\1\10\10\0\7\10\3\0\1\10\1\u0190\6\10"+ "\1\u0191\15\10\3\0\1\10\10\0\1\213\6\10\3\0"+ "\12\10\1\u0192\13\10\3\0\1\10\10\0\7\10\3\0"+ "\13\10\1\u0193\12\10\3\0\1\10\10\0\5\10\1\u0194"+ "\1\10\3\0\13\10\1\350\12\10\3\0\1\10\10\0"+ "\3\10\1\257\3\10\3\0\5\10\1\u0195\11\10\1\353"+ "\6\10\3\0\1\10\10\0\7\10\3\0\15\10\1\u0196"+ "\10\10\3\0\1\10\10\0\1\u018a\6\10\3\0\26\10"+ "\3\0\1\10\10\0\7\10\3\0\2\10\1\u0197\23\10"+ "\3\0\1\10\10\0\7\10\3\0\2\10\1\u0198\7\10"+ "\1\u0199\4\10\1\46\6\10\3\0\1\10\10\0\7\10"+ "\3\0\1\10\1\u019a\24\10\3\0\1\10\10\0\7\10"+ "\3\0\12\10\1\46\13\10\3\0\1\10\10\0\7\10"+ "\3\0\11\10\1\u0182\14\10\3\0\1\10\10\0\7\10"+ "\3\0\22\10\1\u019b\3\10\3\0\1\10\10\0\1\u019c"+ "\6\10\3\0\26\10\3\0\1\10\10\0\4\10\1\u019d"+ "\2\10\3\0\26\10\3\0\1\10\10\0\1\10\1\46"+ "\5\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ "\11\10\1\257\14\10\3\0\1\10\10\0\7\10\3\0"+ "\11\10\1\46\14\10\3\0\1\10\10\0\6\10\1\u019e"+ "\3\0\26\10\3\0\1\10\10\0\4\10\1\u019f\2\10"+ "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\11\10"+ "\1\u01a0\14\10\3\0\1\10\10\0\4\10\1\u01a1\2\10"+ "\3\0\26\10\3\0\1\10\10\0\1\u01a2\6\10\3\0"+ "\26\10\3\0\1\10\10\0\2\10\1\u01a3\4\10\3\0"+ "\4\10\1\u01a4\21\10\3\0\1\10\10\0\7\10\3\0"+ "\1\10\1\u01a5\24\10\3\0\1\10\10\0\7\10\3\0"+ "\12\10\1\u01a6\13\10\3\0\1\10\10\0\2\10\1\u01a7"+ "\4\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ "\4\10\1\u01a8\21\10\3\0\1\10\10\0\7\10\3\0"+ "\11\10\1\u01a9\3\10\1\u0182\10\10\3\0\1\10\10\0"+ "\7\10\3\0\21\10\1\147\4\10\3\0\1\10\10\0"+ "\4\10\1\353\2\10\3\0\26\10\3\0\1\10\10\0"+ "\7\10\3\0\4\10\1\u01aa\21\10\3\0\1\10\10\0"+ "\7\10\3\0\15\10\1\u01ab\10\10\3\0\1\10\10\0"+ "\6\10\1\362\3\0\26\10\3\0\1\10\10\0\7\10"+ "\3\0\13\10\1\153\5\10\1\u01ac\4\10\3\0\1\10"+ "\10\0\7\10\3\0\10\10\1\u01ad\15\10\3\0\1\10"+ "\10\0\2\10\1\u01ae\4\10\3\0\26\10\3\0\1\10"+ "\10\0\3\10\1\257\3\10\3\0\26\10\3\0\1\10"+ "\10\0\7\10\3\0\4\10\1\u01af\21\10\3\0\1\10"+ "\10\0\7\10\3\0\7\10\1\u01b0\16\10\3\0\1\10"+ "\10\0\6\10\1\u01b1\3\0\26\10\3\0\1\10\10\0"+ "\7\10\3\0\17\10\1\46\6\10\3\0\1\10\10\0"+ "\1\362\5\10\1\u01b2\3\0\26\10\3\0\1\10\10\0"+ "\4\10\1\u01b3\2\10\3\0\26\10\3\0\1\10\10\0"+ "\7\10\3\0\24\10\1\124\1\10\3\0\1\10\10\0"+ "\4\10\1\u01b4\2\10\3\0\26\10\3\0\1\10\10\0"+ "\1\u01b5\6\10\3\0\26\10\3\0\1\10\10\0\4\10"+ "\1\u01b6\2\10\3\0\26\10\3\0\1\10\10\0\7\10"+ "\3\0\11\10\1\u01b7\14\10\3\0\1\10\10\0\2\10"+ "\1\46\4\10\3\0\7\10\1\u01b8\16\10\3\0\1\10"+ "\10\0\7\10\3\0\5\10\1\u01b9\1\u01ba\17\10\3\0"+ "\1\10\10\0\1\u01bb\6\10\3\0\5\10\1\u01bc\20\10"+ "\3\0\1\10\10\0\2\10\1\u01bd\4\10\3\0\26\10"+ "\3\0\1\10\10\0\4\10\1\u01be\2\10\3\0\2\10"+ "\1\46\23\10\3\0\1\10\10\0\2\10\1\u01bf\4\10"+ "\3\0\26\10\3\0\1\10\10\0\2\10\1\u01c0\4\10"+ "\3\0\26\10\3\0\1\10\10\0\1\u01c1\6\10\3\0"+ "\26\10\3\0\1\10\10\0\1\u01c2\6\10\3\0\26\10"+ "\3\0\1\10\10\0\1\365\6\10\3\0\12\10\1\323"+ "\13\10\3\0\1\10\10\0\5\10\1\u01c3\1\u01c4\3\0"+ "\7\10\1\u01c5\16\10\3\0\1\10\10\0\7\10\3\0"+ "\4\10\1\u01c6\21\10\3\0\1\10\10\0\2\10\1\u0121"+ "\4\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ "\5\10\1\317\20\10\3\0\1\10\10\0\2\10\1\u01c7"+ "\4\10\3\0\26\10\3\0\1\10\10\0\5\10\1\u01c8"+ "\1\10\3\0\26\10\3\0\1\10\10\0\6\10\1\201"+ "\3\0\10\10\1\257\15\10\3\0\1\10\10\0\6\10"+ "\1\u01c9\3\0\26\10\3\0\1\10\10\0\3\10\1\u01ca"+ "\3\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ "\5\10\1\u01cb\20\10\3\0\1\10\10\0\2\10\1\46"+ "\4\10\3\0\4\10\1\257\21\10\33\0\1\u0148\55\0"+ "\1\u01cc\45\0\1\u01cd\54\0\1\u0151\5\0\1\u01ce\3\0"+ "\1\u01cf\51\0\1\u0155\1\u01d0\27\0\1\u0159\17\0\1\u01d1"+ "\5\0\1\u01d2\51\0\1\u01d3\32\0\1\u0147\47\0\1\u01d4"+ "\100\0\1\u0148\30\0\1\u01d5\1\0\1\u0148\63\0\1\u0140"+ "\53\0\1\u01d6\2\0\1\u01d7\4\0\1\251\54\0\1\u01d8"+ "\47\0\1\u0148\56\0\1\u01d9\50\0\1\u01da\50\0\1\u0148"+ "\50\0\1\u01d4\64\0\1\u01db\2\0\1\u01dc\45\0\1\u01dd"+ "\33\0\1\u0159\2\0\1\u01de\63\0\1\u01df\41\0\1\u013e"+ "\65\0\1\u01e0\43\0\1\u0148\71\0\1\u01e1\57\0\1\u01e2"+ "\27\0\1\u01e3\57\0\1\u01e4\34\0\1\10\10\0\7\10"+ "\3\0\7\10\1\152\16\10\3\0\1\10\10\0\7\10"+ "\3\0\1\10\1\220\24\10\3\0\1\10\10\0\7\10"+ "\3\0\12\10\1\213\13\10\3\0\1\10\10\0\7\10"+ "\3\0\13\10\1\u01e5\12\10\3\0\1\10\10\0\2\10"+ "\1\u01e6\4\10\3\0\26\10\3\0\1\10\10\0\7\10"+ "\3\0\12\10\1\u01e7\13\10\3\0\1\10\10\0\4\10"+ "\1\u01e8\2\10\3\0\26\10\3\0\1\10\10\0\7\10"+ "\3\0\13\10\1\u01e9\12\10\3\0\1\10\10\0\3\10"+ "\1\311\3\10\3\0\26\10\3\0\1\10\10\0\7\10"+ "\3\0\12\10\1\323\13\10\3\0\1\10\10\0\7\10"+ "\3\0\1\10\1\u01ea\24\10\3\0\1\10\10\0\7\10"+ "\3\0\12\10\1\u01eb\13\10\3\0\1\10\10\0\6\10"+ "\1\u01ec\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ "\12\10\1\u01ed\13\10\3\0\1\10\10\0\6\10\1\u01ee"+ "\3\0\26\10\3\0\1\10\10\0\6\10\1\u01ef\3\0"+ "\26\10\3\0\1\10\10\0\5\10\1\u01af\1\10\3\0"+ "\26\10\3\0\1\10\10\0\7\10\3\0\12\10\1\u01f0"+ "\13\10\3\0\1\10\10\0\1\u01f1\6\10\3\0\26\10"+ "\3\0\1\10\10\0\4\10\1\u01f2\2\10\3\0\26\10"+ "\3\0\1\10\10\0\7\10\3\0\7\10\1\u01f3\16\10"+ "\3\0\1\10\10\0\7\10\3\0\2\10\1\u019b\23\10"+ "\3\0\1\10\10\0\4\10\1\363\2\10\3\0\26\10"+ "\3\0\1\10\10\0\1\10\1\220\5\10\3\0\26\10"+ "\3\0\1\10\10\0\7\10\3\0\2\10\1\u01f4\23\10"+ "\3\0\1\10\10\0\7\10\3\0\4\10\1\u01f5\21\10"+ "\3\0\1\10\10\0\7\10\3\0\4\10\1\u01f6\21\10"+ "\3\0\1\10\10\0\1\u01f7\6\10\3\0\26\10\3\0"+ "\1\10\10\0\7\10\3\0\12\10\1\u01f8\13\10\3\0"+ "\1\10\10\0\4\10\1\u017d\2\10\3\0\26\10\3\0"+ "\1\10\10\0\6\10\1\u01f9\3\0\26\10\3\0\1\10"+ "\10\0\7\10\3\0\1\46\25\10\3\0\1\10\10\0"+ "\7\10\3\0\4\10\1\u01fa\21\10\3\0\1\10\10\0"+ "\7\10\3\0\1\10\1\u017d\24\10\3\0\1\10\10\0"+ "\1\u017d\6\10\3\0\26\10\3\0\1\10\10\0\6\10"+ "\1\u01fb\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ "\14\10\1\46\11\10\3\0\1\10\10\0\2\10\1\361"+ "\4\10\3\0\26\10\3\0\1\10\10\0\2\10\1\u01fc"+ "\4\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ "\7\10\1\u01fd\16\10\3\0\1\10\10\0\1\362\6\10"+ "\3\0\26\10\3\0\1\10\10\0\5\10\1\u01fe\1\10"+ "\3\0\26\10\3\0\1\10\10\0\2\10\1\u01ff\4\10"+ "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\7\10"+ "\1\u0200\16\10\3\0\1\10\10\0\4\10\1\257\2\10"+ "\3\0\26\10\3\0\1\10\10\0\1\u0201\6\10\3\0"+ "\4\10\1\u0202\21\10\3\0\1\10\10\0\7\10\3\0"+ "\1\10\1\u0203\6\10\1\u018a\15\10\3\0\1\10\10\0"+ "\7\10\3\0\5\10\1\u0204\20\10\3\0\1\10\10\0"+ "\2\10\1\u0205\4\10\3\0\26\10\3\0\1\10\10\0"+ "\7\10\3\0\7\10\1\u0206\16\10\3\0\1\10\10\0"+ "\6\10\1\153\3\0\26\10\3\0\1\10\10\0\7\10"+ "\3\0\4\10\1\153\21\10\3\0\1\10\10\0\7\10"+ "\3\0\13\10\1\u0207\12\10\3\0\1\10\10\0\7\10"+ "\3\0\21\10\1\257\4\10\3\0\1\10\10\0\7\10"+ "\3\0\1\10\1\u0208\24\10\3\0\1\10\10\0\7\10"+ "\3\0\13\10\1\u0109\12\10\3\0\1\10\10\0\7\10"+ "\3\0\11\10\1\75\14\10\3\0\1\10\10\0\1\u0183"+ "\6\10\3\0\4\10\1\u0209\21\10\3\0\1\10\10\0"+ "\7\10\3\0\4\10\1\376\21\10\3\0\1\10\10\0"+ "\5\10\1\336\1\10\3\0\26\10\3\0\1\10\10\0"+ "\5\10\1\u020a\1\10\3\0\7\10\1\u020b\16\10\3\0"+ "\1\10\10\0\7\10\3\0\13\10\1\u020c\12\10\3\0"+ "\1\10\10\0\7\10\3\0\13\10\1\u020d\12\10\3\0"+ "\1\10\10\0\7\10\3\0\7\10\1\u0116\16\10\3\0"+ "\1\10\10\0\7\10\3\0\4\10\1\u020e\21\10\3\0"+ "\1\10\10\0\7\10\3\0\1\10\1\u0116\5\10\1\353"+ "\16\10\3\0\1\10\10\0\2\10\1\u020f\4\10\3\0"+ "\26\10\3\0\1\10\10\0\7\10\3\0\2\10\1\213"+ "\23\10\3\0\1\10\10\0\7\10\3\0\5\10\1\u0210"+ "\20\10\3\0\1\10\10\0\4\10\1\u0211\2\10\3\0"+ "\26\10\3\0\1\10\10\0\4\10\1\u0212\2\10\3\0"+ "\26\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u0213"+ "\12\10\3\0\1\10\10\0\1\u0214\6\10\3\0\26\10"+ "\3\0\1\10\10\0\7\10\3\0\1\10\1\u0215\24\10"+ "\3\0\1\10\10\0\7\10\3\0\2\10\1\u0216\23\10"+ "\3\0\1\10\10\0\7\10\3\0\13\10\1\362\12\10"+ "\3\0\1\10\10\0\7\10\3\0\1\10\1\u0217\24\10"+ "\3\0\1\10\10\0\7\10\3\0\6\10\1\u0218\17\10"+ "\3\0\1\10\10\0\7\10\3\0\7\10\1\353\16\10"+ "\3\0\1\10\10\0\7\10\3\0\1\10\1\u0219\24\10"+ "\3\0\1\10\10\0\6\10\1\u018e\3\0\13\10\1\u020c"+ "\12\10\3\0\1\10\10\0\2\10\1\u021a\4\10\3\0"+ "\26\10\3\0\1\10\10\0\7\10\3\0\6\10\1\u0182"+ "\17\10\3\0\1\10\10\0\4\10\1\317\2\10\3\0"+ "\26\10\3\0\1\10\10\0\7\10\3\0\10\10\1\u021b"+ "\15\10\3\0\1\10\10\0\7\10\3\0\7\10\1\u021c"+ "\5\10\1\u0182\10\10\3\0\1\10\10\0\1\u0191\6\10"+ "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\2\10"+ "\1\u021d\4\10\1\46\16\10\3\0\1\10\10\0\7\10"+ "\3\0\10\10\1\u0109\15\10\3\0\1\10\10\0\6\10"+ "\1\u01a2\3\0\26\10\3\0\1\10\10\0\6\10\1\u021e"+ "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\16\10"+ "\1\u021f\7\10\3\0\1\10\10\0\1\u0220\6\10\3\0"+ "\26\10\3\0\1\10\10\0\4\10\1\u0221\2\10\3\0"+ "\26\10\3\0\1\10\10\0\7\10\3\0\13\10\1\353"+ "\12\10\3\0\1\10\10\0\7\10\3\0\10\10\1\353"+ "\15\10\3\0\1\10\10\0\7\10\3\0\2\10\1\u0160"+ "\23\10\3\0\1\10\10\0\7\10\3\0\4\10\1\u0222"+ "\21\10\3\0\1\10\10\0\7\10\3\0\4\10\1\u0223"+ "\21\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u0224"+ "\12\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u011c"+ "\12\10\3\0\1\10\10\0\7\10\3\0\1\10\1\u0225"+ "\24\10\3\0\1\10\10\0\5\10\1\336\1\10\3\0"+ "\12\10\1\u0226\13\10\3\0\1\10\10\0\7\10\3\0"+ "\5\10\1\220\20\10\3\0\1\10\10\0\7\10\3\0"+ "\1\10\1\u0227\24\10\3\0\1\10\10\0\7\10\3\0"+ "\1\10\1\u0228\24\10\3\0\1\10\10\0\7\10\3\0"+ "\3\10\1\213\22\10\3\0\1\10\10\0\7\10\3\0"+ "\13\10\1\u0229\12\10\14\0\1\u0148\60\0\1\u0148\75\0"+ "\1\u01dc\45\0\1\u022a\36\0\1\u01cc\53\0\1\u0150\50\0"+ "\1\u0159\101\0\1\u0140\26\0\1\u0148\54\0\1\u022b\55\0"+ "\1\u022c\46\0\1\u022d\71\0\1\u0158\63\0\1\u0148\51\0"+ "\1\u022e\27\0\1\u022f\74\0\1\u01d1\32\0\1\u0230\2\0"+ "\1\u0231\10\0\1\u0232\1\0\1\u0233\1\0\1\u0234\3\0"+ "\1\u0235\35\0\1\u01cd\60\0\1\u013f\56\0\1\u0147\62\0"+ "\1\u01d0\45\0\1\u0236\53\0\1\u0237\41\0\1\u01cc\35\0"+ "\1\10\10\0\7\10\3\0\5\10\1\u0238\20\10\3\0"+ "\1\10\10\0\7\10\3\0\5\10\1\u0239\20\10\3\0"+ "\1\10\10\0\7\10\3\0\1\10\1\u0161\24\10\3\0"+ "\1\10\10\0\5\10\1\u016f\1\10\3\0\26\10\3\0"+ "\1\10\10\0\7\10\3\0\4\10\1\u023a\21\10\3\0"+ "\1\10\10\0\7\10\3\0\4\10\1\u023b\21\10\3\0"+ "\1\10\10\0\7\10\3\0\17\10\1\u023c\6\10\3\0"+ "\1\10\10\0\2\10\1\213\4\10\3\0\26\10\3\0"+ "\1\10\10\0\7\10\3\0\6\10\1\u023d\6\10\1\u0182"+ "\10\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u023e"+ "\12\10\3\0\1\10\10\0\2\10\1\u023f\4\10\3\0"+ "\26\10\3\0\1\10\10\0\5\10\1\u0240\1\10\3\0"+ "\26\10\3\0\1\10\10\0\7\10\3\0\11\10\1\u0241"+ "\14\10\3\0\1\10\10\0\7\10\3\0\6\10\1\u0242"+ "\3\10\1\u0243\13\10\3\0\1\10\10\0\7\10\3\0"+ "\1\10\1\u0244\24\10\3\0\1\10\10\0\7\10\3\0"+ "\7\10\1\u010e\16\10\3\0\1\10\10\0\7\10\3\0"+ "\11\10\1\u0245\14\10\3\0\1\10\10\0\7\10\3\0"+ "\4\10\1\u0246\21\10\3\0\1\10\10\0\7\10\3\0"+ "\13\10\1\u0247\12\10\3\0\1\10\10\0\5\10\1\u0180"+ "\1\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ "\1\10\1\u0248\24\10\3\0\1\10\10\0\7\10\3\0"+ "\15\10\1\46\10\10\3\0\1\10\10\0\7\10\3\0"+ "\5\10\1\353\20\10\3\0\1\10\10\0\1\220\6\10"+ "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\13\10"+ "\1\u0249\12\10\3\0\1\10\10\0\7\10\3\0\5\10"+ "\1\u024a\20\10\3\0\1\10\10\0\7\10\3\0\20\10"+ "\1\46\5\10\3\0\1\10\10\0\2\10\1\u024b\4\10"+ "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\1\10"+ "\1\u024c\24\10\3\0\1\10\10\0\7\10\3\0\4\10"+ "\1\u0238\21\10\3\0\1\10\10\0\6\10\1\u024d\3\0"+ "\26\10\3\0\1\10\10\0\3\10\1\46\3\10\3\0"+ "\26\10\3\0\1\10\10\0\4\10\1\u0215\2\10\3\0"+ "\26\10\3\0\1\10\10\0\2\10\1\72\4\10\3\0"+ "\26\10\3\0\1\10\10\0\7\10\3\0\2\10\1\257"+ "\23\10\3\0\1\10\10\0\6\10\1\u024e\3\0\26\10"+ "\3\0\1\10\10\0\6\10\1\u024f\3\0\26\10\3\0"+ "\1\10\10\0\1\u024b\6\10\3\0\26\10\3\0\1\10"+ "\10\0\7\10\3\0\21\10\1\317\4\10\3\0\1\10"+ "\10\0\7\10\3\0\4\10\1\220\21\10\3\0\1\10"+ "\10\0\1\u0249\6\10\3\0\26\10\3\0\1\10\10\0"+ "\7\10\3\0\13\10\1\u018a\12\10\3\0\1\10\10\0"+ "\7\10\3\0\1\10\1\u0250\24\10\3\0\1\10\10\0"+ "\7\10\3\0\7\10\1\u015e\16\10\3\0\1\10\10\0"+ "\7\10\3\0\1\10\1\46\24\10\3\0\1\10\10\0"+ "\2\10\1\46\4\10\3\0\6\10\1\u0251\17\10\3\0"+ "\1\10\10\0\7\10\3\0\15\10\1\u0252\10\10\3\0"+ "\1\10\10\0\7\10\3\0\4\10\1\357\21\10\3\0"+ "\1\10\10\0\1\u0253\6\10\3\0\26\10\3\0\1\10"+ "\10\0\7\10\3\0\4\10\1\u0254\21\10\3\0\1\10"+ "\10\0\7\10\3\0\6\10\1\u0255\17\10\3\0\1\10"+ "\10\0\4\10\1\u0238\2\10\3\0\26\10\3\0\1\10"+ "\10\0\3\10\1\220\3\10\3\0\26\10\3\0\1\10"+ "\10\0\7\10\3\0\4\10\1\257\21\10\3\0\1\10"+ "\10\0\6\10\1\u0256\3\0\26\10\3\0\1\10\10\0"+ "\7\10\3\0\1\10\1\u0257\24\10\3\0\1\10\10\0"+ "\7\10\3\0\16\10\1\46\7\10\3\0\1\10\10\0"+ "\7\10\3\0\12\10\1\353\13\10\3\0\1\10\10\0"+ "\7\10\3\0\6\10\1\353\17\10\3\0\1\10\10\0"+ "\1\365\3\10\1\u01be\2\10\3\0\26\10\3\0\1\10"+ "\10\0\7\10\3\0\22\10\1\u0258\3\10\3\0\1\10"+ "\10\0\7\10\3\0\15\10\1\u0182\10\10\3\0\1\10"+ "\10\0\7\10\3\0\1\10\1\u01fc\24\10\3\0\1\10"+ "\10\0\7\10\3\0\21\10\1\u0238\4\10\3\0\1\10"+ "\10\0\7\10\3\0\4\10\1\u0169\21\10\3\0\1\10"+ "\10\0\7\10\3\0\15\10\1\u0186\10\10\3\0\1\10"+ "\10\0\7\10\3\0\15\10\1\u0259\10\10\3\0\1\10"+ "\10\0\7\10\3\0\22\10\1\46\3\10\34\0\1\u0234"+ "\37\0\1\u025a\71\0\1\u025b\61\0\1\u0148\30\0\1\u025c"+ "\64\0\1\u025d\65\0\1\u025e\2\0\1\u025f\20\0\1\u0158"+ "\66\0\1\u0260\64\0\1\251\51\0\1\u0261\47\0\1\u0262"+ "\35\0\1\u0263\100\0\1\u0264\15\0\1\10\10\0\1\353"+ "\6\10\3\0\26\10\3\0\1\10\10\0\4\10\1\u0265"+ "\2\10\3\0\26\10\3\0\1\10\10\0\4\10\1\u0266"+ "\2\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ "\1\10\1\u0267\24\10\3\0\1\10\10\0\1\u0182\6\10"+ "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\13\10"+ "\1\u0178\12\10\3\0\1\10\10\0\2\10\1\u01f1\4\10"+ "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\1\10"+ "\1\362\24\10\3\0\1\10\10\0\7\10\3\0\13\10"+ "\1\u0116\12\10\3\0\1\10\10\0\1\u0268\6\10\3\0"+ "\26\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u0269"+ "\12\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u026a"+ "\12\10\3\0\1\10\10\0\7\10\3\0\4\10\1\124"+ "\21\10\3\0\1\10\10\0\7\10\3\0\1\10\1\213"+ "\24\10\3\0\1\10\10\0\6\10\1\u026b\3\0\26\10"+ "\3\0\1\10\10\0\7\10\3\0\4\10\1\u026c\21\10"+ "\3\0\1\10\10\0\7\10\3\0\2\10\1\u026d\23\10"+ "\3\0\1\10\10\0\3\10\1\353\3\10\3\0\26\10"+ "\3\0\1\10\10\0\7\10\3\0\1\10\1\355\24\10"+ "\3\0\1\10\10\0\4\10\1\u026e\2\10\3\0\26\10"+ "\3\0\1\10\10\0\7\10\3\0\7\10\1\213\16\10"+ "\3\0\1\10\10\0\2\10\1\u026f\4\10\3\0\26\10"+ "\3\0\1\10\10\0\7\10\3\0\15\10\1\257\10\10"+ "\3\0\1\10\10\0\2\10\1\u0270\4\10\3\0\26\10"+ "\3\0\1\10\10\0\7\10\3\0\4\10\1\u01fc\21\10"+ "\3\0\1\10\10\0\7\10\3\0\6\10\1\46\17\10"+ "\3\0\1\10\10\0\7\10\3\0\10\10\1\u0271\15\10"+ "\3\0\1\10\10\0\7\10\3\0\25\10\1\46\3\0"+ "\1\10\10\0\6\10\1\u01af\3\0\26\10\3\0\1\10"+ "\10\0\1\u0272\6\10\3\0\26\10\3\0\1\10\10\0"+ "\7\10\3\0\23\10\1\257\2\10\3\0\1\10\10\0"+ "\7\10\3\0\4\10\1\347\21\10\3\0\1\10\10\0"+ "\6\10\1\72\3\0\26\10\3\0\1\10\10\0\5\10"+ "\1\u0273\1\10\3\0\26\10\31\0\1\u0148\55\0\1\u01cc"+ "\47\0\1\u01d9\41\0\1\u0148\52\0\1\u0274\66\0\1\u0275"+ "\45\0\1\u01cd\50\0\1\u0274\76\0\1\u013e\46\0\1\u0148"+ "\67\0\1\u0148\6\0\1\10\10\0\7\10\3\0\1\10"+ "\1\u0276\24\10\3\0\1\10\10\0\1\124\6\10\3\0"+ "\26\10\3\0\1\10\10\0\7\10\3\0\2\10\1\u0277"+ "\23\10\3\0\1\10\10\0\2\10\1\u0278\4\10\3\0"+ "\26\10\3\0\1\10\10\0\7\10\3\0\4\10\1\u0109"+ "\21\10\3\0\1\10\10\0\7\10\3\0\7\10\1\u0238"+ "\16\10\3\0\1\10\10\0\7\10\3\0\2\10\1\u017d"+ "\23\10\3\0\1\10\10\0\7\10\3\0\1\10\1\u0279"+ "\24\10\3\0\1\10\10\0\4\10\1\u027a\2\10\3\0"+ "\26\10\3\0\1\10\10\0\7\10\3\0\1\10\1\u027b"+ "\24\10\3\0\1\10\10\0\1\u0189\6\10\3\0\26\10"+ "\3\0\1\10\10\0\7\10\3\0\6\10\1\u027c\17\10"+ "\3\0\1\10\10\0\7\10\3\0\4\10\1\u0266\21\10"+ "\30\0\1\u0148\44\0\1\u0263\35\0\1\10\10\0\7\10"+ "\3\0\15\10\1\220\10\10\3\0\1\10\10\0\4\10"+ "\1\u027d\2\10\3\0\26\10\3\0\1\10\10\0\4\10"+ "\1\220\2\10\3\0\26\10\3\0\1\10\10\0\7\10"+ "\3\0\4\10\1\u027e\21\10\3\0\1\10\10\0\1\u027f"+ "\6\10\3\0\26\10\3\0\1\10\10\0\4\10\1\u0273"+ "\2\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ "\6\10\1\u027d\17\10\3\0\1\10\10\0\1\u020d\6\10"+ "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\14\10"+ "\1\u017d\11\10\3\0\1\10\10\0\7\10\3\0\4\10"+ "\1\u017d\21\10\1\0"; private static int [] zzUnpackTrans() { int [] result = new int[27016]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\5\0\2\11\3\1\1\11\12\1\3\11\23\1\1\11"+ "\1\1\2\11\1\1\2\11\1\1\1\11\2\1\1\11"+ "\144\1\21\0\1\11\220\1\7\0\1\1\2\0\1\11"+ "\24\0\157\1\12\0\1\1\16\0\105\1\16\0\42\1"+ "\13\0\17\1\2\0\12\1"; private static int [] zzUnpackAttribute() { int [] result = new int[639]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** * zzAtBOL == true <=> the scanner is currently at the beginning of a line */ private boolean zzAtBOL = true; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public SASTokenMaker() { super(); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "*", null }; } /** * Returns whether tokens of the specified type should have "mark * occurrences" enabled for the current programming language. * * @param type The token type. * @return Whether tokens of this type should have "mark occurrences" * enabled. */ @Override public boolean getMarkOccurrencesOfTokenType(int type) { return type==Token.IDENTIFIER || type==Token.VARIABLE; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.LITERAL_STRING_DOUBLE_QUOTE: state = STRING; start = text.offset; break; case Token.LITERAL_CHAR: state = CHAR; start = text.offset; break; case Token.COMMENT_MULTILINE: state = MLC; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public SASTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public SASTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 180) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; if (zzMarkedPosL > zzStartRead) { switch (zzBufferL[zzMarkedPosL-1]) { case '\n': case '\u000B': case '\u000C': case '\u0085': case '\u2028': case '\u2029': zzAtBOL = true; break; case '\r': if (zzMarkedPosL < zzEndReadL) zzAtBOL = zzBufferL[zzMarkedPosL] != '\n'; else if (zzAtEOF) zzAtBOL = false; else { boolean eof = zzRefill(); zzMarkedPosL = zzMarkedPos; zzEndReadL = zzEndRead; zzBufferL = zzBuffer; if (eof) zzAtBOL = false; else zzAtBOL = zzBufferL[zzMarkedPosL] != '\n'; } break; default: zzAtBOL = false; } } zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; if (zzAtBOL) zzState = ZZ_LEXSTATE[zzLexicalState+1]; else zzState = ZZ_LEXSTATE[zzLexicalState]; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 13: { yybegin(YYINITIAL); addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } case 21: break; case 2: { addNullToken(); return firstToken; } case 22: break; case 18: { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } case 23: break; case 17: { start = zzMarkedPos-2; yybegin(MLC); } case 24: break; case 3: { addToken(Token.WHITESPACE); } case 25: break; case 8: { start = zzMarkedPos-1; yybegin(CHAR); } case 26: break; case 5: { addToken(Token.RESERVED_WORD); } case 27: break; case 6: { addToken(Token.SEPARATOR); } case 28: break; case 16: { addToken(Token.VARIABLE); } case 29: break; case 14: { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); } case 30: break; case 1: { addToken(Token.IDENTIFIER); } case 31: break; case 20: { addToken(Token.FUNCTION); } case 32: break; case 19: { addToken(Token.DATA_TYPE); } case 33: break; case 11: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } case 34: break; case 9: { // We must do this because of how we // abuse JFlex; since we return an entire // list of tokens at once instead of a // single token at a time, the "^" regex // character doesn't really work, so we must // check that we're at the beginning of a // line ourselves. start = zzStartRead; // Might not be any whitespace. if (yylength()>1) { addToken(zzStartRead,zzMarkedPos-2, Token.WHITESPACE); zzStartRead = zzMarkedPos-1; } // Remember: zzStartRead may now be updated, // so we must check against 'start'. if (start==s.offset) { addToken(zzStartRead,zzEndRead, Token.COMMENT_EOL); addNullToken(); return firstToken; } else { addToken(zzStartRead,zzStartRead, Token.OPERATOR); } } case 35: break; case 7: { start = zzMarkedPos-1; yybegin(STRING); } case 36: break; case 4: { addToken(Token.OPERATOR); } case 37: break; case 12: { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } case 38: break; case 10: { } case 39: break; case 15: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } case 40: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case STRING: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } case 640: break; case YYINITIAL: { addNullToken(); return firstToken; } case 641: break; case MLC: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } case 642: break; case CHAR: { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } case 643: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SQLTokenMaker.flex000066400000000000000000000266021257417003700312360ustar00rootroot00000000000000/* * 02/15/2005 * * SQLTokenMaker.java - Scanner for SQL. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * This class generates tokens representing a text stream as SQL.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated SQLTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.5 * */ %% %public %class SQLTokenMaker %extends AbstractJFlexTokenMaker %unicode %ignorecase %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public SQLTokenMaker() { super(); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * Overridden to return true so paren matching occurs for * SQL. * * @return true always. */ @Override public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { return true; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "--", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.LITERAL_STRING_DOUBLE_QUOTE: state = STRING; start = text.offset; break; case Token.LITERAL_CHAR: state = CHAR; start = text.offset; break; case Token.COMMENT_MULTILINE: state = MLC; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} LineTerminator = ([\n]) Letter = ([A-Za-z]) Digit = ([0-9]) Whitespace = ([ \t]+) IdentifierStart = ({Letter}) IdentifierPart = ({IdentifierStart}|{Digit}|[_]) Identifier = ({IdentifierStart}{IdentifierPart}*) Operator = (">="|"<="|"<>"|">"|"<"|"="|"+"|"-"|"*"|"/") Separator = ([\(\)]) Parameter = ([:]{Identifier}) Integer = ({Digit}+) Float = (({Digit}+[.]{Digit}*)|([.]{Digit}*)) ApproxNum = (({Digit}+[eE][+-]?{Digit}+)|({Digit}+[.]{Digit}*[eE][+-]?[0-9]+)|([.][0-9]*[eE][+-]?[0-9]+)) CommentBegin = ("--") Comment = ({CommentBegin}.*) MLCBegin = "/*" MLCEnd = "*/" %state STRING %state CHAR %state MLC %% { /* Keywords */ "ADD" | "ALL" | "ALTER" | "AND" | "ANY" | "AS" | "ASC" | "AUTOINCREMENT" | "AVA" | "BETWEEN" | "BINARY" | "BIT" | "BOOLEAN" | "BY" | "BYTE" | "CHAR" | "CHARACTER" | "COLUMN" | "CONSTRAINT" | "COUNT" | "COUNTER" | "CREATE" | "CURRENCY" | "DATABASE" | "DATE" | "DATETIME" | "DELETE" | "DESC" | "DISALLOW" | "DISTINCT" | "DISTINCTROW" | "DOUBLE" | "DROP" | "EXISTS" | "FLOAT" | "FLOAT4" | "FLOAT8" | "FOREIGN" | "FROM" | "GENERAL" | "GROUP" | "GUID" | "HAVING" | "INNER" | "INSERT" | "IGNORE" | "IMP" | "IN" | "INDEX" | "INT" | "INTEGER" | "INTEGER1" | "INTEGER2" | "INTEGER4" | "INTO" | "IS" | "JOIN" | "KEY" | "LEFT" | "LEVEL" | "LIKE" | "LOGICAL" | "LONG" | "LONGBINARY" | "LONGTEXT" | "MAX" | "MEMO" | "MIN" | "MOD" | "MONEY" | "NOT" | "NULL" | "NUMBER" | "NUMERIC" | "OLEOBJECT" | "ON" | "OPTION" | "OR" | "ORDER" | "OUTER" | "OWNERACCESS" | "PARAMETERS" | "PASSWORD" | "PERCENT" | "PIVOT" | "PRIMARY" | "REAL" | "REFERENCES" | "RIGHT" | "SELECT" | "SET" | "SHORT" | "SINGLE" | "SMALLINT" | "SOME" | "STDEV" | "STDEVP" | "STRING" | "SUM" | "TABLE" | "TABLEID" | "TEXT" | "TIME" | "TIMESTAMP" | "TOP" | "TRANSFORM" | "TYPE" | "UNION" | "UNIQUE" | "UPDATE" | "USER" | "VALUE" | "VALUES" | "VAR" | "VARBINARY" | "VARCHAR" | "VARP" | "WHERE" | "WITH" | "YESNO" { addToken(Token.RESERVED_WORD); } /* SQL99 aggregate functions */ "AVG" | "COUNT" | "MIN" | "MAX" | "SUM" { addToken(Token.FUNCTION); } /* SQL99 built-in scalar functions */ "CURRENT_DATE" | "CURRENT_TIME" | "CURRENT_TIMESTAMP" | "CURRENT_USER" | "SESSION_USER" | "SYSTEM_USER" { addToken(Token.FUNCTION); } /* SQL99 numeric scalar functions */ "BIT_LENGTH" | "CHAR_LENGTH" | "EXTRACT" | "OCTET_LENGTH" | "POSITION" { addToken(Token.FUNCTION); } /* SQL99 string functions */ "CONCATENATE" | "CONVERT" | "LOWER" | "SUBSTRING" | "TRANSLATE" | "TRIM" | "UPPER" { addToken(Token.FUNCTION); } {LineTerminator} { addNullToken(); return firstToken; } {Identifier} { addToken(Token.IDENTIFIER); } ";" { addToken(Token.IDENTIFIER); } {Parameter} { addToken(Token.IDENTIFIER); } {Comment} { addToken(Token.COMMENT_EOL); } {MLCBegin} { start = zzMarkedPos-2; yybegin(MLC); } {Whitespace} { addToken(Token.WHITESPACE); } {Operator} { addToken(Token.OPERATOR); } {Separator} { addToken(Token.SEPARATOR); } {Integer} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {Float} { addToken(Token.LITERAL_NUMBER_FLOAT); } {ApproxNum} { addToken(Token.LITERAL_NUMBER_FLOAT); } "\"" { start = zzMarkedPos-1; yybegin(STRING); } "\'" { start = zzMarkedPos-1; yybegin(CHAR); } "["[^\]]*"]" { addToken(Token.PREPROCESSOR); } "["[^\]]* { addToken(Token.ERROR_IDENTIFIER); addNullToken(); return firstToken; } <> { addNullToken(); return firstToken; } /* Catch any other (unhandled) characters and flag them as OK; */ /* I don't know enough about SQL to know what's really invalid. */ . { addToken(Token.IDENTIFIER); } } { [^\n\"]+ {} \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } "\"\"" {} "\"" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } } { [^\n\']+ {} \n { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } "\'\'" {} "\'" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); } <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } } { [^\n\*]+ {} \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } \* {} <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SQLTokenMaker.java000066400000000000000000001201331257417003700312130ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 6/29/14 12:25 AM */ /* * 02/15/2005 * * SQLTokenMaker.java - Scanner for SQL. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * This class generates tokens representing a text stream as SQL.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated SQLTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.5 * */ public class SQLTokenMaker extends AbstractJFlexTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int STRING = 1; public static final int YYINITIAL = 0; public static final int MLC = 3; public static final int CHAR = 2; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\4\1\1\25\0\1\4\1\0\1\54\4\0\1\55\2\15"+ "\1\13\1\11\1\0\1\12\1\17\1\14\1\3\1\50\1\50\1\3"+ "\1\45\3\3\1\46\1\3\1\16\1\0\1\10\1\7\1\6\2\0"+ "\1\21\1\37\1\31\1\22\1\20\1\44\1\47\1\41\1\34\1\51"+ "\1\52\1\23\1\35\1\26\1\33\1\42\1\53\1\25\1\30\1\24"+ "\1\32\1\36\1\40\1\43\1\27\1\2\1\56\1\0\1\57\1\0"+ "\1\5\1\0\1\21\1\37\1\31\1\22\1\20\1\44\1\47\1\41"+ "\1\34\1\51\1\52\1\23\1\35\1\26\1\33\1\42\1\53\1\25"+ "\1\30\1\24\1\32\1\36\1\40\1\43\1\27\1\2\uff85\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\4\0\1\1\1\2\1\1\1\3\1\4\5\5\1\6"+ "\1\1\1\7\27\1\1\10\1\11\1\12\1\13\1\14"+ "\1\15\1\13\1\16\1\17\1\13\1\20\1\13\1\0"+ "\1\21\1\22\4\1\1\23\45\1\2\23\4\1\1\23"+ "\7\1\1\23\22\1\1\24\1\13\1\25\1\7\1\0"+ "\3\1\1\26\51\1\1\23\4\1\1\23\2\1\1\23"+ "\22\1\1\23\4\1\1\23\4\1\1\23\17\1\1\23"+ "\35\1\1\23\5\1\1\23\10\1\1\23\5\1\1\23"+ "\11\1\1\23\42\1\1\23\4\1\1\23\16\1\1\26"+ "\4\1"; private static int [] zzUnpackAction() { int [] result = new int[354]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\60\0\140\0\220\0\300\0\300\0\360\0\u0120"+ "\0\u0150\0\u0180\0\300\0\u01b0\0\u01e0\0\u0210\0\300\0\u0240"+ "\0\u0270\0\u02a0\0\u02d0\0\u0300\0\u0330\0\u0360\0\u0390\0\u03c0"+ "\0\u03f0\0\u0420\0\u0450\0\u0480\0\u04b0\0\u04e0\0\u0510\0\u0540"+ "\0\u0570\0\u05a0\0\u05d0\0\u0600\0\u0630\0\u0660\0\u0690\0\u06c0"+ "\0\300\0\300\0\u06f0\0\u0720\0\300\0\u0750\0\u0780\0\300"+ "\0\u07b0\0\u07e0\0\300\0\u0810\0\u0840\0\u0870\0\300\0\u08a0"+ "\0\u08d0\0\u0900\0\u0930\0\u0960\0\u0990\0\u09c0\0\u09f0\0\u0a20"+ "\0\u0a50\0\u0a80\0\u0ab0\0\u0ae0\0\u0b10\0\u0b40\0\u0b70\0\u0ba0"+ "\0\u0bd0\0\u0c00\0\u0c30\0\u0c60\0\u0c90\0\u0cc0\0\u0cf0\0\u0d20"+ "\0\u0d50\0\u0d80\0\u0db0\0\u0de0\0\u0e10\0\u0e40\0\u0e70\0\u0ea0"+ "\0\u0ed0\0\u0f00\0\u0f30\0\u0f60\0\u0f90\0\u0fc0\0\u0ff0\0\u1020"+ "\0\u1050\0\u1080\0\360\0\u10b0\0\u10e0\0\u1110\0\u1140\0\u1170"+ "\0\u11a0\0\u11d0\0\u1200\0\u1230\0\u1260\0\u1290\0\u12c0\0\u12f0"+ "\0\u1320\0\u1350\0\u1380\0\u13b0\0\u13e0\0\u1410\0\u1440\0\u1470"+ "\0\u14a0\0\u14d0\0\u1500\0\u1530\0\u1560\0\u1590\0\u15c0\0\u15f0"+ "\0\u1620\0\u1650\0\300\0\300\0\300\0\u1680\0\u1680\0\u16b0"+ "\0\u16e0\0\u1710\0\360\0\u1740\0\u0960\0\u1770\0\u17a0\0\u17d0"+ "\0\u1800\0\u1830\0\u1860\0\u1890\0\u18c0\0\u18f0\0\u1920\0\u1950"+ "\0\u1980\0\u19b0\0\u19e0\0\u1a10\0\u1a40\0\u1a70\0\u1aa0\0\u1ad0"+ "\0\u1b00\0\u1b30\0\u1b60\0\u1b90\0\u1bc0\0\u1bf0\0\u1c20\0\u1c50"+ "\0\u1c80\0\u1cb0\0\u1ce0\0\u1d10\0\u1d40\0\u1d70\0\u1da0\0\u1dd0"+ "\0\u1e00\0\u1e30\0\u1e60\0\u1e90\0\u1ec0\0\u1ef0\0\u1f20\0\u1f50"+ "\0\u1f80\0\u1fb0\0\u1fe0\0\u2010\0\u2040\0\u2070\0\u20a0\0\u20d0"+ "\0\u2100\0\u2130\0\u2160\0\u2190\0\u21c0\0\u21f0\0\u2220\0\u2250"+ "\0\u2280\0\u22b0\0\u22e0\0\u2310\0\u2340\0\u2370\0\u12f0\0\u23a0"+ "\0\u23d0\0\u2400\0\u2430\0\u2460\0\u2490\0\u24c0\0\u24f0\0\u2520"+ "\0\u2550\0\u2580\0\u25b0\0\u25e0\0\u2610\0\u2640\0\u2670\0\u26a0"+ "\0\u26d0\0\u2700\0\u2730\0\u2760\0\u2790\0\u27c0\0\u27f0\0\u2820"+ "\0\u2850\0\u2880\0\u28b0\0\u28e0\0\u2910\0\u2940\0\u2970\0\u29a0"+ "\0\u29d0\0\u2a00\0\u2a30\0\u2a60\0\u2a90\0\u2ac0\0\u2af0\0\u2b20"+ "\0\u2b50\0\u2b80\0\u2bb0\0\u2be0\0\u2c10\0\u2c40\0\u2c70\0\u2ca0"+ "\0\u2cd0\0\u2d00\0\u2d30\0\u2d60\0\u2d90\0\u2dc0\0\u2df0\0\u15f0"+ "\0\u2e20\0\u2e50\0\u2e80\0\u2eb0\0\u2ee0\0\u0c30\0\u2f10\0\u2f40"+ "\0\u2f70\0\u2fa0\0\u2fd0\0\u3000\0\u3030\0\u3060\0\u0ff0\0\u3090"+ "\0\u30c0\0\u2040\0\u30f0\0\u3120\0\u2ca0\0\u3150\0\u3180\0\u31b0"+ "\0\u31e0\0\u3210\0\u3240\0\u3270\0\u32a0\0\u32d0\0\u3300\0\u3330"+ "\0\u3360\0\u3390\0\u33c0\0\u33f0\0\u3420\0\u3450\0\u3480\0\u34b0"+ "\0\u34e0\0\u3510\0\u3540\0\u3570\0\u35a0\0\u35d0\0\u3600\0\u3630"+ "\0\u3660\0\u3690\0\u36c0\0\u36f0\0\u3720\0\u3750\0\u3780\0\u37b0"+ "\0\u37e0\0\u3810\0\u3840\0\u3870\0\u38a0\0\u38d0\0\u3900\0\u3930"+ "\0\u3960\0\u3990\0\u39c0\0\u39f0\0\u3a20\0\u3a50\0\u3a80\0\u3ab0"+ "\0\u3ae0\0\u3b10\0\u3b40\0\u3b70\0\u3ba0\0\u3bd0\0\u3c00\0\u3c30"+ "\0\u3c60\0\u3c90\0\u3cc0\0\u3cf0\0\u3d20\0\u3d50\0\u3d80\0\u3db0"+ "\0\u3de0\0\u3e10"; private static int [] zzUnpackRowMap() { int [] result = new int[354]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\5\1\6\1\7\1\10\1\11\1\5\1\12\1\13"+ "\1\14\1\13\1\15\1\13\1\16\1\17\1\20\1\21"+ "\1\22\1\23\1\24\1\25\1\26\1\27\1\30\1\31"+ "\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41"+ "\1\42\1\43\1\44\1\7\1\45\2\10\1\46\1\10"+ "\1\47\1\50\1\7\1\51\1\52\1\53\1\5\1\54"+ "\1\55\52\54\1\56\3\54\1\57\1\60\53\57\1\61"+ "\2\57\1\62\1\63\11\62\1\64\44\62\62\0\2\7"+ "\1\0\1\7\12\0\34\7\7\0\1\10\13\0\1\21"+ "\1\65\24\0\2\10\1\0\1\10\13\0\1\11\62\0"+ "\1\13\56\0\2\13\62\0\1\66\60\0\1\67\46\0"+ "\1\7\15\0\25\7\2\0\1\7\1\0\3\7\7\0"+ "\1\21\14\0\1\65\24\0\2\21\1\0\1\21\11\0"+ "\2\7\1\0\1\7\12\0\23\7\1\70\10\7\6\0"+ "\2\7\1\0\1\7\12\0\2\7\1\71\1\72\2\7"+ "\1\73\1\7\1\74\1\7\1\75\3\7\1\76\15\7"+ "\6\0\2\7\1\0\1\7\12\0\1\77\1\100\3\7"+ "\1\101\5\7\1\102\1\103\17\7\6\0\2\7\1\0"+ "\1\7\12\0\1\104\12\7\1\105\1\106\17\7\6\0"+ "\2\7\1\0\1\7\12\0\1\107\1\110\3\7\1\111"+ "\1\7\1\112\3\7\1\113\1\114\17\7\6\0\2\7"+ "\1\0\1\7\12\0\1\115\13\7\1\116\17\7\6\0"+ "\2\7\1\0\1\7\12\0\12\7\1\117\1\120\20\7"+ "\6\0\2\7\1\0\1\7\12\0\1\121\33\7\6\0"+ "\2\7\1\0\1\7\12\0\1\122\3\7\1\123\2\7"+ "\1\124\2\7\1\125\1\126\1\127\1\130\3\7\1\131"+ "\12\7\6\0\2\7\1\0\1\7\12\0\5\7\1\132"+ "\4\7\1\133\1\134\5\7\1\135\12\7\6\0\2\7"+ "\1\0\1\7\12\0\6\7\1\136\1\7\1\137\11\7"+ "\1\140\11\7\6\0\2\7\1\0\1\7\12\0\3\7"+ "\1\141\1\7\1\142\1\143\2\7\1\144\1\145\5\7"+ "\1\146\1\7\1\147\11\7\6\0\2\7\1\0\1\7"+ "\12\0\6\7\1\150\1\7\1\143\4\7\1\113\11\7"+ "\1\151\4\7\6\0\2\7\1\0\1\7\12\0\1\152"+ "\1\153\11\7\1\154\1\155\17\7\6\0\2\7\1\0"+ "\1\7\12\0\1\7\1\156\32\7\6\0\2\7\1\0"+ "\1\7\12\0\1\157\6\7\1\160\3\7\1\161\1\162"+ "\17\7\6\0\2\7\1\0\1\7\12\0\14\7\1\163"+ "\4\7\1\164\12\7\6\0\2\7\1\0\1\7\12\0"+ "\1\7\1\165\32\7\6\0\2\7\1\0\1\7\12\0"+ "\1\166\1\167\3\7\1\170\5\7\1\171\1\172\17\7"+ "\6\0\2\7\1\0\1\7\12\0\3\7\1\173\1\7"+ "\1\174\5\7\1\175\20\7\6\0\2\7\1\0\1\7"+ "\12\0\1\176\4\7\1\177\4\7\1\200\21\7\6\0"+ "\2\7\1\0\1\7\12\0\13\7\1\201\20\7\6\0"+ "\2\7\1\0\1\7\12\0\1\202\33\7\4\0\57\53"+ "\1\203\1\54\1\0\52\54\1\0\3\54\54\0\1\204"+ "\3\0\1\57\1\0\53\57\1\0\2\57\55\0\1\204"+ "\2\0\1\62\1\0\11\62\1\0\44\62\14\0\1\205"+ "\46\0\1\206\5\0\2\207\32\0\2\206\1\0\1\206"+ "\7\0\1\66\1\0\56\66\2\0\2\7\1\0\1\7"+ "\12\0\4\7\1\210\7\7\1\211\17\7\6\0\2\7"+ "\1\0\1\7\12\0\2\7\1\143\31\7\6\0\2\7"+ "\1\0\1\7\12\0\3\7\1\143\1\137\27\7\6\0"+ "\2\7\1\0\1\7\12\0\2\7\1\143\4\7\1\143"+ "\24\7\6\0\2\7\1\0\1\7\12\0\11\7\1\143"+ "\22\7\6\0\2\7\1\0\1\7\12\0\4\7\1\212"+ "\27\7\6\0\2\7\1\0\1\7\12\0\1\7\1\143"+ "\25\7\1\213\4\7\6\0\2\7\1\0\1\7\12\0"+ "\3\7\1\214\4\7\1\215\23\7\6\0\2\7\1\0"+ "\1\7\12\0\4\7\1\216\27\7\6\0\2\7\1\0"+ "\1\7\12\0\13\7\1\113\20\7\6\0\2\7\1\0"+ "\1\7\12\0\12\7\1\217\21\7\6\0\2\7\1\0"+ "\1\7\12\0\10\7\1\220\23\7\6\0\2\7\1\0"+ "\1\7\12\0\16\7\1\221\5\7\1\120\7\7\6\0"+ "\2\7\1\0\1\7\12\0\6\7\1\222\11\7\1\223"+ "\6\7\1\224\4\7\6\0\2\7\1\0\1\7\12\0"+ "\32\7\1\225\1\7\6\0\2\7\1\0\1\7\12\0"+ "\23\7\1\120\10\7\6\0\2\7\1\0\1\7\12\0"+ "\17\7\1\226\14\7\6\0\2\7\1\0\1\7\12\0"+ "\1\7\1\227\12\7\1\230\17\7\6\0\2\7\1\0"+ "\1\7\12\0\22\7\1\225\11\7\6\0\2\7\1\0"+ "\1\7\12\0\22\7\1\143\11\7\6\0\2\7\1\0"+ "\1\7\12\0\15\7\1\231\16\7\6\0\2\7\1\0"+ "\1\7\12\0\1\7\1\232\22\7\1\233\7\7\6\0"+ "\2\7\1\0\1\7\12\0\27\7\1\234\4\7\6\0"+ "\2\7\1\0\1\7\12\0\3\7\1\232\11\7\1\235"+ "\16\7\6\0\2\7\1\0\1\7\12\0\4\7\1\143"+ "\27\7\6\0\2\7\1\0\1\7\12\0\10\7\1\236"+ "\23\7\6\0\2\7\1\0\1\7\12\0\3\7\1\237"+ "\1\143\3\7\1\240\23\7\6\0\2\7\1\0\1\7"+ "\12\0\2\7\1\241\2\7\1\242\26\7\6\0\2\7"+ "\1\0\1\7\12\0\10\7\1\243\23\7\6\0\2\7"+ "\1\0\1\7\12\0\15\7\1\143\1\7\1\244\14\7"+ "\6\0\2\7\1\0\1\7\12\0\15\7\1\225\16\7"+ "\6\0\2\7\1\0\1\7\12\0\6\7\1\245\25\7"+ "\6\0\2\7\1\0\1\7\12\0\1\7\1\246\32\7"+ "\6\0\2\7\1\0\1\7\12\0\13\7\1\247\20\7"+ "\6\0\2\7\1\0\1\7\12\0\1\250\33\7\6\0"+ "\2\7\1\0\1\7\12\0\5\7\1\251\26\7\6\0"+ "\2\7\1\0\1\7\12\0\3\7\1\252\2\7\1\253"+ "\3\7\1\254\21\7\6\0\2\7\1\0\1\7\12\0"+ "\1\7\1\255\32\7\6\0\2\7\1\0\1\7\12\0"+ "\14\7\1\256\17\7\6\0\2\7\1\0\1\7\12\0"+ "\1\257\33\7\6\0\2\7\1\0\1\7\12\0\2\7"+ "\1\250\17\7\1\223\11\7\6\0\2\7\1\0\1\7"+ "\12\0\1\260\33\7\6\0\2\7\1\0\1\7\12\0"+ "\2\7\1\137\31\7\6\0\2\7\1\0\1\7\12\0"+ "\4\7\1\261\27\7\6\0\2\7\1\0\1\7\12\0"+ "\4\7\1\137\27\7\6\0\2\7\1\0\1\7\12\0"+ "\6\7\1\262\25\7\6\0\2\7\1\0\1\7\12\0"+ "\4\7\1\263\27\7\6\0\2\7\1\0\1\7\12\0"+ "\2\7\1\264\1\7\1\265\1\7\1\137\1\7\1\266"+ "\23\7\6\0\2\7\1\0\1\7\12\0\6\7\1\267"+ "\25\7\6\0\2\7\1\0\1\7\12\0\15\7\1\270"+ "\16\7\6\0\2\7\1\0\1\7\12\0\23\7\1\143"+ "\10\7\6\0\2\7\1\0\1\7\12\0\2\7\1\143"+ "\3\7\1\50\25\7\6\0\2\7\1\0\1\7\12\0"+ "\6\7\1\143\25\7\6\0\2\7\1\0\1\7\12\0"+ "\3\7\1\271\1\7\1\272\26\7\6\0\2\7\1\0"+ "\1\7\12\0\4\7\1\273\27\7\6\0\2\7\1\0"+ "\1\7\12\0\4\7\1\225\27\7\6\0\2\7\1\0"+ "\1\7\12\0\13\7\1\274\20\7\6\0\2\7\1\0"+ "\1\7\12\0\4\7\1\275\1\7\1\276\25\7\6\0"+ "\2\7\1\0\1\7\12\0\4\7\1\277\27\7\6\0"+ "\2\7\1\0\1\7\12\0\1\300\33\7\6\0\2\7"+ "\1\0\1\7\12\0\16\7\1\242\15\7\6\0\2\7"+ "\1\0\1\7\12\0\5\7\1\301\26\7\6\0\2\7"+ "\1\0\1\7\12\0\5\7\1\302\2\7\1\303\23\7"+ "\6\0\2\7\1\0\1\7\12\0\14\7\1\304\17\7"+ "\6\0\2\7\1\0\1\7\12\0\10\7\1\305\23\7"+ "\6\0\2\7\1\0\1\7\12\0\16\7\1\306\15\7"+ "\6\0\2\7\1\0\1\7\12\0\13\7\1\307\20\7"+ "\6\0\2\7\1\0\1\7\12\0\13\7\1\310\20\7"+ "\6\0\2\7\1\0\1\7\12\0\5\7\1\311\26\7"+ "\6\0\2\7\1\0\1\7\12\0\6\7\1\312\25\7"+ "\6\0\2\7\1\0\1\7\12\0\13\7\1\313\20\7"+ "\6\0\2\7\1\0\1\7\12\0\14\7\1\71\17\7"+ "\6\0\2\7\1\0\1\7\12\0\14\7\1\155\17\7"+ "\6\0\2\7\1\0\1\7\12\0\7\7\1\143\24\7"+ "\7\0\1\206\41\0\2\206\1\0\1\206\11\0\2\7"+ "\1\0\1\7\12\0\5\7\1\314\26\7\6\0\2\7"+ "\1\0\1\7\12\0\10\7\1\315\23\7\6\0\2\7"+ "\1\0\1\7\12\0\13\7\1\316\20\7\6\0\2\7"+ "\1\0\1\7\12\0\1\317\33\7\6\0\2\7\1\0"+ "\1\7\12\0\1\320\1\321\32\7\6\0\2\7\1\0"+ "\1\7\12\0\17\7\1\322\14\7\6\0\2\7\1\0"+ "\1\7\12\0\1\7\1\323\2\7\1\324\27\7\6\0"+ "\2\7\1\0\1\7\12\0\1\232\33\7\6\0\2\7"+ "\1\0\1\7\12\0\27\7\1\325\4\7\6\0\2\7"+ "\1\0\1\7\12\0\1\326\33\7\6\0\2\7\1\0"+ "\1\7\12\0\14\7\1\327\17\7\6\0\2\7\1\0"+ "\1\7\12\0\1\143\33\7\6\0\2\7\1\0\1\7"+ "\12\0\3\7\1\330\30\7\6\0\2\7\1\0\1\7"+ "\12\0\6\7\1\331\25\7\6\0\2\7\1\0\1\7"+ "\12\0\15\7\1\213\16\7\6\0\2\7\1\0\1\7"+ "\12\0\1\332\33\7\6\0\2\7\1\0\1\7\12\0"+ "\3\7\1\143\30\7\6\0\2\7\1\0\1\7\12\0"+ "\1\333\33\7\6\0\2\7\1\0\1\7\12\0\21\7"+ "\1\120\12\7\6\0\2\7\1\0\1\7\12\0\1\334"+ "\16\7\1\137\14\7\6\0\2\7\1\0\1\7\12\0"+ "\6\7\1\270\25\7\6\0\2\7\1\0\1\7\12\0"+ "\1\335\33\7\6\0\2\7\1\0\1\7\12\0\10\7"+ "\1\336\23\7\6\0\2\7\1\0\1\7\12\0\1\337"+ "\33\7\6\0\2\7\1\0\1\7\12\0\14\7\1\340"+ "\17\7\6\0\2\7\1\0\1\7\12\0\4\7\1\341"+ "\27\7\6\0\2\7\1\0\1\7\12\0\10\7\1\342"+ "\23\7\6\0\2\7\1\0\1\7\12\0\27\7\1\322"+ "\4\7\6\0\2\7\1\0\1\7\12\0\3\7\1\343"+ "\30\7\6\0\2\7\1\0\1\7\12\0\5\7\1\120"+ "\26\7\6\0\2\7\1\0\1\7\12\0\1\7\1\317"+ "\32\7\6\0\2\7\1\0\1\7\12\0\5\7\1\344"+ "\26\7\6\0\2\7\1\0\1\7\12\0\12\7\1\345"+ "\21\7\6\0\2\7\1\0\1\7\12\0\10\7\1\346"+ "\1\347\4\7\1\350\15\7\6\0\2\7\1\0\1\7"+ "\12\0\6\7\1\351\25\7\6\0\2\7\1\0\1\7"+ "\12\0\5\7\1\352\26\7\6\0\2\7\1\0\1\7"+ "\12\0\13\7\1\155\17\7\1\353\6\0\2\7\1\0"+ "\1\7\12\0\5\7\1\143\26\7\6\0\2\7\1\0"+ "\1\7\12\0\13\7\1\354\20\7\6\0\2\7\1\0"+ "\1\7\12\0\1\355\33\7\6\0\2\7\1\0\1\7"+ "\12\0\1\356\33\7\6\0\2\7\1\0\1\7\12\0"+ "\14\7\1\357\17\7\6\0\2\7\1\0\1\7\12\0"+ "\1\153\33\7\6\0\2\7\1\0\1\7\12\0\1\360"+ "\12\7\1\143\20\7\6\0\2\7\1\0\1\7\12\0"+ "\1\247\33\7\6\0\2\7\1\0\1\7\12\0\13\7"+ "\1\300\20\7\6\0\2\7\1\0\1\7\12\0\13\7"+ "\1\143\20\7\6\0\2\7\1\0\1\7\12\0\12\7"+ "\1\361\21\7\6\0\2\7\1\0\1\7\12\0\11\7"+ "\1\362\5\7\1\363\2\7\1\143\11\7\6\0\2\7"+ "\1\0\1\7\12\0\20\7\1\364\13\7\6\0\2\7"+ "\1\0\1\7\12\0\3\7\1\365\30\7\6\0\2\7"+ "\1\0\1\366\12\0\34\7\6\0\2\7\1\0\1\7"+ "\12\0\1\7\1\367\32\7\6\0\2\7\1\0\1\7"+ "\12\0\21\7\1\143\12\7\6\0\2\7\1\0\1\7"+ "\12\0\5\7\1\225\26\7\6\0\2\7\1\0\1\7"+ "\12\0\11\7\1\370\22\7\6\0\2\7\1\0\1\7"+ "\12\0\1\7\1\371\32\7\6\0\2\7\1\0\1\7"+ "\12\0\10\7\1\372\23\7\6\0\2\7\1\0\1\7"+ "\12\0\15\7\1\276\16\7\6\0\2\7\1\0\1\7"+ "\12\0\14\7\1\373\17\7\6\0\2\7\1\0\1\7"+ "\12\0\13\7\1\120\20\7\6\0\2\7\1\0\1\7"+ "\12\0\1\7\1\374\32\7\6\0\2\7\1\0\1\7"+ "\12\0\15\7\1\143\16\7\6\0\2\7\1\0\1\7"+ "\12\0\1\375\33\7\6\0\2\7\1\0\1\7\12\0"+ "\1\376\33\7\6\0\2\7\1\0\1\7\12\0\12\7"+ "\1\113\21\7\6\0\2\7\1\0\1\7\12\0\1\7"+ "\1\377\32\7\6\0\2\7\1\0\1\7\12\0\4\7"+ "\1\u0100\27\7\6\0\2\7\1\0\1\7\12\0\14\7"+ "\1\u0101\17\7\6\0\2\7\1\0\1\7\12\0\4\7"+ "\1\u0102\27\7\6\0\2\7\1\0\1\7\12\0\17\7"+ "\1\u0103\14\7\6\0\2\7\1\0\1\7\12\0\3\7"+ "\1\225\30\7\6\0\2\7\1\0\1\7\12\0\3\7"+ "\1\u0104\30\7\6\0\2\7\1\0\1\7\12\0\14\7"+ "\1\u0105\17\7\6\0\2\7\1\0\1\7\12\0\4\7"+ "\1\u0106\12\7\1\363\14\7\6\0\2\7\1\0\1\7"+ "\12\0\5\7\1\213\26\7\6\0\2\7\1\0\1\7"+ "\12\0\11\7\1\u0107\22\7\6\0\2\7\1\0\1\7"+ "\12\0\1\u0108\33\7\6\0\2\7\1\0\1\7\12\0"+ "\10\7\1\u0109\23\7\6\0\2\7\1\0\1\7\12\0"+ "\10\7\1\u010a\23\7\6\0\2\7\1\0\1\7\12\0"+ "\5\7\1\u010b\26\7\6\0\2\7\1\0\1\7\12\0"+ "\5\7\1\u010c\26\7\6\0\2\7\1\0\1\7\12\0"+ "\11\7\1\120\22\7\6\0\2\7\1\0\1\7\12\0"+ "\14\7\1\u010d\17\7\6\0\2\7\1\0\1\7\12\0"+ "\16\7\1\u010e\15\7\6\0\2\7\1\0\1\7\12\0"+ "\6\7\1\u010f\25\7\6\0\2\7\1\0\1\7\12\0"+ "\1\u0110\33\7\6\0\2\7\1\0\1\7\12\0\4\7"+ "\1\u0111\27\7\6\0\2\7\1\0\1\7\12\0\3\7"+ "\1\u0112\30\7\6\0\2\7\1\0\1\7\12\0\1\u0113"+ "\33\7\6\0\2\7\1\0\1\7\12\0\15\7\1\155"+ "\16\7\6\0\2\7\1\0\1\7\12\0\4\7\1\u0114"+ "\27\7\6\0\2\7\1\0\1\7\12\0\1\7\1\u0115"+ "\32\7\6\0\2\7\1\0\1\7\12\0\1\u0116\33\7"+ "\6\0\2\7\1\0\1\7\12\0\4\7\1\u0117\27\7"+ "\6\0\2\7\1\0\1\366\12\0\1\7\1\u0118\32\7"+ "\6\0\2\7\1\0\1\7\12\0\12\7\1\225\21\7"+ "\6\0\2\7\1\0\1\7\12\0\17\7\1\u0119\14\7"+ "\6\0\2\7\1\0\1\7\12\0\4\7\1\u011a\27\7"+ "\6\0\2\7\1\0\1\7\12\0\5\7\1\u011b\26\7"+ "\6\0\2\7\1\0\1\7\12\0\13\7\1\155\20\7"+ "\6\0\2\7\1\0\1\7\12\0\27\7\1\u011c\4\7"+ "\6\0\2\7\1\0\1\7\12\0\1\u011d\33\7\6\0"+ "\2\7\1\0\1\7\12\0\21\7\1\u011e\12\7\6\0"+ "\2\7\1\0\1\7\12\0\14\7\1\u011f\17\7\6\0"+ "\2\7\1\0\1\7\12\0\1\u0120\33\7\6\0\2\7"+ "\1\0\1\7\12\0\1\u0121\33\7\6\0\2\7\1\0"+ "\1\7\12\0\3\7\1\u0122\30\7\6\0\2\7\1\0"+ "\1\7\12\0\5\7\1\202\26\7\6\0\2\7\1\0"+ "\1\7\12\0\1\u0123\33\7\6\0\2\7\1\0\1\7"+ "\12\0\15\7\1\u0124\16\7\6\0\2\7\1\0\1\7"+ "\12\0\20\7\1\u0125\13\7\6\0\2\7\1\0\1\7"+ "\12\0\4\7\1\u0126\27\7\6\0\2\7\1\0\1\7"+ "\12\0\4\7\1\u0127\27\7\6\0\2\7\1\0\1\7"+ "\12\0\14\7\1\u0128\17\7\6\0\2\7\1\0\1\7"+ "\12\0\5\7\1\u0107\26\7\6\0\2\7\1\0\1\7"+ "\12\0\11\7\1\u0129\22\7\6\0\2\7\1\0\1\7"+ "\12\0\10\7\1\143\23\7\6\0\2\7\1\0\1\7"+ "\12\0\6\7\1\u012a\25\7\6\0\2\7\1\0\1\7"+ "\12\0\14\7\1\126\17\7\6\0\2\7\1\0\1\7"+ "\12\0\1\7\1\u012b\32\7\6\0\2\7\1\0\1\7"+ "\12\0\3\7\1\u012c\30\7\6\0\2\7\1\0\1\7"+ "\12\0\6\7\1\u012d\25\7\6\0\2\7\1\0\1\7"+ "\12\0\1\107\33\7\6\0\2\7\1\0\1\7\12\0"+ "\1\7\1\232\32\7\6\0\2\7\1\0\1\7\12\0"+ "\3\7\1\u012e\20\7\1\u012f\7\7\6\0\2\7\1\0"+ "\1\7\12\0\4\7\1\u0130\27\7\6\0\2\7\1\0"+ "\1\7\12\0\1\u0131\33\7\6\0\2\7\1\0\1\7"+ "\12\0\14\7\1\215\17\7\6\0\2\7\1\0\1\7"+ "\12\0\13\7\1\u0132\20\7\6\0\2\7\1\0\1\7"+ "\12\0\27\7\1\143\4\7\6\0\2\7\1\0\1\7"+ "\12\0\15\7\1\u0133\16\7\6\0\2\7\1\0\1\7"+ "\12\0\5\7\1\u0134\26\7\6\0\2\7\1\0\1\7"+ "\12\0\14\7\1\u0123\17\7\6\0\2\7\1\0\1\7"+ "\12\0\6\7\1\u0135\25\7\6\0\2\7\1\0\1\7"+ "\12\0\5\7\1\u0136\26\7\6\0\2\7\1\0\1\7"+ "\12\0\4\7\1\u0137\27\7\6\0\2\7\1\0\1\7"+ "\12\0\5\7\1\u0129\26\7\6\0\2\7\1\0\1\7"+ "\12\0\11\7\1\145\22\7\6\0\2\7\1\0\1\7"+ "\12\0\31\7\1\237\2\7\6\0\2\7\1\0\1\7"+ "\12\0\1\7\1\u0138\32\7\6\0\2\7\1\0\1\7"+ "\12\0\1\u0139\33\7\6\0\2\7\1\0\1\7\12\0"+ "\1\7\1\257\32\7\6\0\2\7\1\0\1\7\12\0"+ "\6\7\1\276\25\7\6\0\2\7\1\0\1\7\12\0"+ "\1\155\33\7\6\0\2\7\1\0\1\7\12\0\1\7"+ "\1\155\32\7\6\0\2\7\1\0\1\7\12\0\1\u013a"+ "\33\7\6\0\2\7\1\0\1\7\12\0\6\7\1\120"+ "\25\7\6\0\2\7\1\0\1\7\12\0\1\u013b\33\7"+ "\6\0\2\7\1\0\1\7\12\0\13\7\1\u013c\20\7"+ "\6\0\2\7\1\0\1\7\12\0\14\7\1\u013d\17\7"+ "\6\0\2\7\1\0\1\7\12\0\25\7\2\143\5\7"+ "\6\0\2\7\1\0\1\7\12\0\27\7\1\155\4\7"+ "\6\0\2\7\1\0\1\7\12\0\4\7\1\213\27\7"+ "\6\0\2\7\1\0\1\7\12\0\11\7\1\u013e\22\7"+ "\6\0\2\7\1\0\1\7\12\0\10\7\1\225\23\7"+ "\6\0\2\7\1\0\1\7\12\0\13\7\1\u013f\20\7"+ "\6\0\2\7\1\0\1\7\12\0\11\7\1\u0140\22\7"+ "\6\0\2\7\1\0\1\7\12\0\1\7\1\u0141\32\7"+ "\6\0\2\7\1\0\1\7\12\0\13\7\1\u0142\20\7"+ "\6\0\2\7\1\0\1\7\12\0\1\7\1\u0143\32\7"+ "\6\0\2\7\1\0\1\7\12\0\6\7\1\u0144\25\7"+ "\6\0\2\7\1\0\1\7\12\0\6\7\1\u0133\25\7"+ "\6\0\2\7\1\0\1\u0145\12\0\34\7\6\0\2\7"+ "\1\0\1\7\12\0\14\7\1\u0146\17\7\6\0\2\7"+ "\1\0\1\7\12\0\4\7\1\u0147\4\7\1\202\22\7"+ "\6\0\2\7\1\0\1\7\12\0\1\7\1\u0112\32\7"+ "\6\0\2\7\1\0\1\7\12\0\1\u0148\33\7\6\0"+ "\2\7\1\0\1\7\12\0\11\7\1\u0149\22\7\6\0"+ "\2\7\1\0\1\7\12\0\5\7\1\u014a\26\7\6\0"+ "\2\7\1\0\1\7\12\0\6\7\1\u014b\25\7\6\0"+ "\2\7\1\0\1\7\12\0\4\7\1\u014c\27\7\6\0"+ "\2\7\1\0\1\7\12\0\5\7\1\71\26\7\6\0"+ "\2\7\1\0\1\7\12\0\13\7\1\u014d\20\7\6\0"+ "\2\7\1\0\1\7\12\0\5\7\1\u014e\26\7\6\0"+ "\2\7\1\0\1\7\12\0\20\7\1\143\13\7\6\0"+ "\2\7\1\0\1\7\12\0\4\7\1\u014f\27\7\6\0"+ "\2\7\1\0\1\7\12\0\4\7\1\u0150\27\7\6\0"+ "\2\7\1\0\1\7\12\0\5\7\1\310\26\7\6\0"+ "\2\7\1\0\1\7\12\0\15\7\1\113\16\7\6\0"+ "\2\7\1\0\1\7\12\0\11\7\1\u0151\22\7\6\0"+ "\2\7\1\0\1\7\12\0\12\7\1\u0152\21\7\6\0"+ "\2\7\1\0\1\7\12\0\6\7\1\u0153\25\7\6\0"+ "\2\7\1\0\1\u0154\12\0\34\7\6\0\2\7\1\0"+ "\1\7\12\0\6\7\1\u012e\25\7\6\0\2\7\1\0"+ "\1\7\12\0\11\7\1\u0155\22\7\6\0\2\7\1\0"+ "\1\7\12\0\25\7\1\143\2\7\1\143\3\7\6\0"+ "\2\7\1\0\1\7\12\0\27\7\1\u0156\4\7\6\0"+ "\2\7\1\0\1\7\12\0\1\u0157\33\7\6\0\2\7"+ "\1\0\1\7\12\0\6\7\1\213\25\7\6\0\2\7"+ "\1\0\1\7\12\0\1\u0158\33\7\6\0\2\7\1\0"+ "\1\7\12\0\5\7\1\u012c\26\7\6\0\2\7\1\0"+ "\1\7\12\0\1\213\33\7\6\0\2\7\1\0\1\7"+ "\12\0\1\u0100\33\7\6\0\2\7\1\0\1\7\12\0"+ "\10\7\1\223\23\7\6\0\2\7\1\0\1\7\12\0"+ "\27\7\1\213\4\7\6\0\2\7\1\0\1\7\12\0"+ "\2\7\1\u012e\1\7\1\u0159\5\7\1\u0152\21\7\6\0"+ "\2\7\1\0\1\7\12\0\1\u015a\33\7\6\0\2\7"+ "\1\0\1\7\12\0\4\7\1\u015b\27\7\6\0\2\7"+ "\1\0\1\7\12\0\5\7\1\u0100\26\7\6\0\2\7"+ "\1\0\1\7\12\0\15\7\1\370\16\7\6\0\2\7"+ "\1\0\1\7\12\0\14\7\1\u015c\17\7\6\0\2\7"+ "\1\0\1\7\12\0\10\7\1\u0100\23\7\6\0\2\7"+ "\1\0\1\7\12\0\21\7\1\213\12\7\6\0\2\7"+ "\1\0\1\7\12\0\15\7\1\u015d\16\7\6\0\2\7"+ "\1\0\1\7\12\0\1\u015e\33\7\6\0\2\7\1\0"+ "\1\7\12\0\10\7\1\u015f\23\7\6\0\2\7\1\0"+ "\1\7\12\0\4\7\1\u0160\27\7\6\0\2\7\1\0"+ "\1\7\12\0\1\7\1\u0161\32\7\6\0\2\7\1\0"+ "\1\7\12\0\15\7\1\u0162\16\7\6\0\2\7\1\0"+ "\1\7\12\0\22\7\1\213\11\7\4\0"; private static int [] zzUnpackTrans() { int [] result = new int[15936]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\4\0\2\11\4\1\1\11\3\1\1\11\31\1\2\11"+ "\2\1\1\11\2\1\1\11\2\1\1\11\1\1\1\0"+ "\1\1\1\11\113\1\3\11\1\1\1\0\333\1"; private static int [] zzUnpackAttribute() { int [] result = new int[354]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public SQLTokenMaker() { super(); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * Overridden to return true so paren matching occurs for * SQL. * * @return true always. */ @Override public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { return true; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "--", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { case Token.LITERAL_STRING_DOUBLE_QUOTE: state = STRING; start = text.offset; break; case Token.LITERAL_CHAR: state = CHAR; start = text.offset; break; case Token.COMMENT_MULTILINE: state = MLC; start = text.offset; break; default: state = Token.NULL; } s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public SQLTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public SQLTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 178) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 20: { addToken(Token.PREPROCESSOR); } case 23: break; case 2: { addNullToken(); return firstToken; } case 24: break; case 21: { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } case 25: break; case 18: { start = zzMarkedPos-2; yybegin(MLC); } case 26: break; case 4: { addToken(Token.WHITESPACE); } case 27: break; case 14: { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } case 28: break; case 9: { start = zzMarkedPos-1; yybegin(CHAR); } case 29: break; case 7: { addToken(Token.LITERAL_NUMBER_FLOAT); } case 30: break; case 19: { addToken(Token.RESERVED_WORD); } case 31: break; case 6: { addToken(Token.SEPARATOR); } case 32: break; case 15: { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); } case 33: break; case 1: { addToken(Token.IDENTIFIER); } case 34: break; case 22: { addToken(Token.FUNCTION); } case 35: break; case 12: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } case 36: break; case 17: { addToken(Token.COMMENT_EOL); } case 37: break; case 8: { start = zzMarkedPos-1; yybegin(STRING); } case 38: break; case 3: { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } case 39: break; case 5: { addToken(Token.OPERATOR); } case 40: break; case 13: { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } case 41: break; case 10: { addToken(Token.ERROR_IDENTIFIER); addNullToken(); return firstToken; } case 42: break; case 11: { } case 43: break; case 16: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } case 44: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case STRING: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } case 355: break; case YYINITIAL: { addNullToken(); return firstToken; } case 356: break; case MLC: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } case 357: break; case CHAR: { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } case 358: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ScalaTokenMaker.flex000066400000000000000000000267311257417003700316250ustar00rootroot00000000000000/* * 8/19/2009 * * ScalaTokenMaker.java - Scanner for the Scala programming language. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for the Scala programming language.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated ScalaTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.5 * */ %% %public %class ScalaTokenMaker %extends AbstractJFlexCTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public ScalaTokenMaker() { } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addHyperlinkToken(int, int, int) */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, false); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. * @param hyperlink Whether this token is a hyperlink. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset, boolean hyperlink) { super.addToken(array, start,end, tokenType, startOffset, hyperlink); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = YYINITIAL; switch (initialTokenType) { case Token.LITERAL_STRING_DOUBLE_QUOTE: state = MULTILINE_STRING_DOUBLE; break; case Token.COMMENT_MULTILINE: state = MLC; break; default: state = YYINITIAL; } s = text; start = text.offset; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) throws IOException { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} /***** BEGIN SCALA-SPECIFIC CHANGES *********/ Upper = ([A-Z\$\_]) /* Plus Unicode category Lu */ Lower = ([a-z]) /* Plus Unicode category Ll */ Letter = ({Upper}|{Lower}) /*Plus Unicode categories Lo, Lt, Nl */ Digit = ([0-9]) OpChar = ([^A-Z\$\_a-z0-9\(\[\]\)\. \t\f]) Op = ({OpChar}+) IdRest = (({Letter}|{Digit})*([\_]{Op})?) VarId = ({Lower}{IdRest}) PlainId = ({Upper}{IdRest}|{VarId}) /*|{Op})*/ Id = ({PlainId}) /*({PlainId}|[\']{StringLit}[\'])*/ IntegerLiteral = ({Digit}+[Ll]?) HexDigit = ({Digit}|[A-Fa-f]) HexLiteral = ("0x"{HexDigit}+) ExponentPart = ([Ee][+\-]?{Digit}+) FloatType = ([FfDd]) FloatingPointLiteral = ({Digit}+[\.]{Digit}*{ExponentPart}?{FloatType}? | [\.]{Digit}+{ExponentPart}?{FloatType}? | {Digit}+{ExponentPart}{FloatType}? | {Digit}+{ExponentPart}?{FloatType}) UnclosedCharLiteral = ([\']([\\].|[^\\\'])*[^\']?) CharLiteral = ({UnclosedCharLiteral}[\']) UnclosedStringLiteral = ([\"]([\\].|[^\\\"])*[^\"]?) StringLiteral = ({UnclosedStringLiteral}[\"]) UnclosedBacktickLiteral = ([\`][^\`]+) BacktickLiteral = ({UnclosedBacktickLiteral}[\`]) /* TODO: Multiline strings */ MLCBegin = ("/*") MLCEnd = ("*/") LineCommentBegin = ("//") /***** END SCALA-SPECIFIC CHANGES *********/ Whitespace = ([ \t\f]+) LineTerminator = ([\n]) Separator = ([\(\)\{\}\[\]]) URLGenDelim = ([:\/\?#\[\]@]) URLSubDelim = ([\!\$&'\(\)\*\+,;=]) URLUnreserved = ({Letter}|[\_]|{Digit}|[\-\.\~]) URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) URLCharacters = ({URLCharacter}*) URLEndCharacter = ([\/\$]|{Letter}|{Digit}) URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) %state MULTILINE_STRING_DOUBLE %state MLC %state EOL_COMMENT %% { /* Keywords */ "abstract" | "case" | "catch" | "class" | "def" | "do" | "else" | "extends" | "false" | "final" | "finally" | "for" | "forSome" | "if" | "implicit" | "import" | "lazy" | "match" | "new" | "null" | "object" | "override" | "package" | "private" | "protected" | "requires" | "return" | "sealed" | "super" | "this" | "throw" | "trait" | "try" | "true" | "type" | "val" | "var" | "while" | "with" | "yield" { addToken(Token.RESERVED_WORD); } {LineTerminator} { addNullToken(); return firstToken; } {Id} { addToken(Token.IDENTIFIER); } {Whitespace} { addToken(Token.WHITESPACE); } /* String/Character literals. */ \"\"\" { start = zzMarkedPos-3; yybegin(MULTILINE_STRING_DOUBLE); } {UnclosedCharLiteral} { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; } {CharLiteral} { addToken(Token.LITERAL_CHAR); } {UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } {StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } {UnclosedBacktickLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } {BacktickLiteral} { addToken(Token.LITERAL_BACKQUOTE); } /* Comment literals. */ {MLCBegin} { start = zzMarkedPos-2; yybegin(MLC); } {LineCommentBegin} { start = zzMarkedPos-2; yybegin(EOL_COMMENT); } {Separator} { addToken(Token.SEPARATOR); } {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } {FloatingPointLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } /* Ended with a line not in a string or comment. */ <> { addNullToken(); return firstToken; } /* Catch any other (unhandled) characters. */ . { addToken(Token.IDENTIFIER); } } { [^\"\\\n]* {} \\.? { /* Skip escaped chars, handles case: '\"""'. */ } \"\"\" { addToken(start,zzStartRead+2, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(YYINITIAL); } \" {} \n | <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } } { [^hwf\n\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } [hwf] {} {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } \* {} \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } } { [^hwf\n]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } [hwf] {} \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ScalaTokenMaker.java000066400000000000000000001023601257417003700316010ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 11/10/12 10:31 PM */ /* * 8/19/2009 * * ScalaTokenMaker.java - Scanner for the Scala programming language. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for the Scala programming language.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated ScalaTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.5 * */ public class ScalaTokenMaker extends AbstractJFlexCTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int EOL_COMMENT = 3; public static final int MULTILINE_STRING_DOUBLE = 1; public static final int YYINITIAL = 0; public static final int MLC = 2; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\31\1\24\1\0\1\31\23\0\1\31\1\33\1\25\1\33"+ "\1\1\1\33\1\33\1\22\2\4\1\30\1\16\1\33\1\16\1\21"+ "\1\27\1\12\11\3\1\42\1\33\1\0\1\33\1\0\2\33\3\10"+ "\1\17\1\14\1\17\5\1\1\6\6\1\1\52\7\1\1\4\1\23"+ "\1\4\1\0\1\5\1\26\1\44\1\45\1\11\1\20\1\15\1\40"+ "\1\61\1\34\1\41\1\56\1\60\1\7\1\53\1\50\1\47\1\36"+ "\1\2\1\46\1\37\1\35\1\55\1\57\1\43\1\13\1\51\1\54"+ "\1\32\1\0\1\32\1\33\uff81\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\1\0\1\1\2\0\2\2\1\3\1\4\2\2\1\3"+ "\3\2\1\5\1\6\1\7\2\2\1\10\15\2\1\1"+ "\1\11\1\12\2\1\1\13\5\1\1\14\3\1\1\2"+ "\1\3\1\0\2\15\3\2\1\0\3\2\1\16\1\17"+ "\1\5\2\7\1\20\1\7\1\21\1\22\26\2\1\11"+ "\1\0\1\23\10\0\1\2\1\15\1\0\4\2\1\24"+ "\1\2\1\20\1\25\1\26\11\2\1\16\12\2\1\27"+ "\10\0\21\2\2\0\1\30\2\0\1\31\4\2\1\16"+ "\6\2\4\0\3\2"; private static int [] zzUnpackAction() { int [] result = new int[184]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\62\0\144\0\226\0\310\0\372\0\u012c\0\310"+ "\0\u015e\0\u0190\0\u01c2\0\u01f4\0\u0226\0\u0258\0\u028a\0\310"+ "\0\u02bc\0\u02ee\0\u0320\0\u0352\0\u0384\0\u03b6\0\u03e8\0\u041a"+ "\0\u044c\0\u047e\0\u04b0\0\u04e2\0\u0514\0\u0546\0\u0578\0\u05aa"+ "\0\u05dc\0\u060e\0\u0640\0\310\0\u0672\0\u06a4\0\310\0\u06d6"+ "\0\u0708\0\u073a\0\u076c\0\u079e\0\310\0\u07d0\0\u0802\0\u0834"+ "\0\u0866\0\310\0\u0898\0\310\0\u08ca\0\u08fc\0\u092e\0\u0960"+ "\0\u0992\0\u09c4\0\u09f6\0\u0a28\0\372\0\310\0\u0a5a\0\u0a8c"+ "\0\u0abe\0\u0af0\0\u0b22\0\310\0\310\0\u0b54\0\u0b86\0\u0bb8"+ "\0\u0bea\0\u0c1c\0\u0c4e\0\u0c80\0\u0cb2\0\u0ce4\0\u0d16\0\u0d48"+ "\0\u0d7a\0\u0dac\0\u0dde\0\u0e10\0\u0e42\0\u0e74\0\u0ea6\0\u0ed8"+ "\0\u0f0a\0\u0f3c\0\u0f6e\0\310\0\u0fa0\0\310\0\u0fd2\0\u1004"+ "\0\u1036\0\u1068\0\u109a\0\u10cc\0\u10fe\0\u1130\0\u1162\0\u1194"+ "\0\u11c6\0\u11f8\0\u122a\0\u125c\0\u128e\0\u0992\0\u12c0\0\310"+ "\0\310\0\310\0\u12f2\0\u1324\0\u1356\0\u1388\0\u13ba\0\u13ec"+ "\0\u141e\0\u1450\0\u1482\0\u14b4\0\u14e6\0\u1518\0\u154a\0\u157c"+ "\0\u15ae\0\u15e0\0\u1612\0\u1644\0\u1676\0\u16a8\0\310\0\u16da"+ "\0\u170c\0\u173e\0\u1770\0\u17a2\0\u17d4\0\u1806\0\u1838\0\u186a"+ "\0\u189c\0\u18ce\0\u1900\0\u1932\0\u1964\0\u1996\0\u19c8\0\u19fa"+ "\0\u1a2c\0\u1a5e\0\u1a90\0\u1ac2\0\u1af4\0\u1b26\0\u1b58\0\u1b8a"+ "\0\u1bbc\0\u1bee\0\u1c20\0\u1c52\0\u1c84\0\u1cb6\0\u1ce8\0\u1d1a"+ "\0\u1d4c\0\u1d7e\0\u1db0\0\u1de2\0\u1e14\0\u1e46\0\u1e78\0\u1eaa"+ "\0\u1edc\0\u1f0e\0\u1c20\0\u1f40\0\u1cb6\0\u1f72\0\u1fa4\0\u1fd6"; private static int [] zzUnpackRowMap() { int [] result = new int[184]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\5\2\6\1\7\1\10\2\6\1\11\1\6\1\12"+ "\1\13\2\6\1\14\1\5\1\6\1\15\1\16\1\17"+ "\1\5\1\20\1\21\1\22\1\23\1\5\1\24\1\10"+ "\1\5\1\6\1\25\1\26\1\27\1\30\1\31\1\5"+ "\1\32\1\33\1\6\1\34\1\35\1\36\1\37\1\6"+ "\1\40\3\6\1\41\2\6\23\42\1\43\1\44\1\45"+ "\34\42\24\46\1\47\3\46\1\50\3\46\1\51\3\46"+ "\1\52\2\46\1\53\16\46\24\54\1\55\7\54\1\56"+ "\3\54\1\57\2\54\1\60\16\54\63\0\3\6\1\0"+ "\1\61\10\6\1\0\2\6\13\0\6\6\1\0\17\6"+ "\3\0\1\7\2\0\2\62\2\0\1\7\1\0\2\63"+ "\1\0\2\64\1\65\16\0\1\64\22\0\3\6\1\0"+ "\1\61\10\6\1\0\2\6\13\0\6\6\1\0\1\6"+ "\1\66\15\6\1\0\3\6\1\0\1\61\1\6\1\67"+ "\6\6\1\0\2\6\13\0\6\6\1\0\1\6\1\70"+ "\15\6\3\0\1\7\2\0\2\62\2\0\1\7\1\71"+ "\2\63\1\0\2\64\1\65\16\0\1\64\22\0\3\6"+ "\1\0\1\61\1\6\1\72\3\6\1\73\2\6\1\0"+ "\2\6\13\0\6\6\1\0\17\6\1\0\3\6\1\0"+ "\1\61\7\6\1\74\1\0\2\6\13\0\6\6\1\0"+ "\4\6\1\75\12\6\3\0\1\65\6\0\1\65\47\0"+ "\22\17\1\76\1\77\36\17\23\100\1\101\1\100\1\102"+ "\34\100\26\103\1\0\33\103\27\0\1\104\1\105\62\0"+ "\1\24\31\0\3\6\1\0\1\61\10\6\1\0\2\6"+ "\13\0\1\106\5\6\1\0\3\6\1\107\2\6\1\110"+ "\10\6\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ "\13\0\6\6\1\0\1\6\1\111\1\6\1\112\13\6"+ "\1\0\3\6\1\0\1\61\7\6\1\113\1\0\2\6"+ "\13\0\6\6\1\0\12\6\1\114\4\6\1\0\3\6"+ "\1\0\1\61\10\6\1\0\2\6\13\0\5\6\1\115"+ "\1\0\1\6\1\116\2\6\1\117\12\6\1\0\3\6"+ "\1\0\1\61\10\6\1\0\2\6\13\0\4\6\1\75"+ "\1\6\1\0\10\6\1\120\6\6\1\0\3\6\1\0"+ "\1\61\10\6\1\0\2\6\13\0\1\121\4\6\1\122"+ "\1\0\17\6\1\0\3\6\1\0\1\61\10\6\1\0"+ "\2\6\13\0\6\6\1\0\2\6\1\123\14\6\1\0"+ "\3\6\1\0\1\61\7\6\1\124\1\0\2\6\13\0"+ "\6\6\1\0\17\6\1\0\3\6\1\0\1\61\10\6"+ "\1\0\2\6\13\0\6\6\1\0\2\6\1\125\11\6"+ "\1\126\2\6\1\0\3\6\1\0\1\61\7\6\1\127"+ "\1\0\2\6\13\0\6\6\1\0\12\6\1\130\4\6"+ "\1\0\3\6\1\0\1\61\10\6\1\0\2\6\13\0"+ "\5\6\1\131\1\0\17\6\1\0\3\6\1\0\1\61"+ "\10\6\1\0\2\6\13\0\6\6\1\0\1\6\1\132"+ "\15\6\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ "\13\0\6\6\1\0\1\6\1\133\15\6\23\42\3\0"+ "\34\42\24\134\1\0\35\134\25\0\1\135\34\0\24\46"+ "\1\0\3\46\1\0\3\46\1\0\3\46\1\0\2\46"+ "\1\0\16\46\27\0\1\136\67\0\1\137\61\0\1\140"+ "\3\0\1\141\63\0\1\142\16\0\24\54\1\0\7\54"+ "\1\0\3\54\1\0\2\54\1\0\16\54\35\0\1\143"+ "\61\0\1\144\3\0\1\145\63\0\1\146\16\0\1\147"+ "\3\6\1\0\1\61\10\6\1\147\2\6\1\0\7\147"+ "\1\0\2\147\6\6\1\147\17\6\3\0\1\150\6\0"+ "\1\150\3\0\1\151\46\0\1\65\6\0\1\65\1\0"+ "\2\63\1\0\2\64\17\0\1\64\22\0\3\6\1\0"+ "\1\61\10\6\1\0\2\6\13\0\6\6\1\0\11\6"+ "\1\152\5\6\1\0\3\6\1\0\1\61\10\6\1\0"+ "\2\6\13\0\6\6\1\0\1\6\1\153\15\6\1\0"+ "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\1\6"+ "\1\154\1\6\1\155\2\6\1\0\17\6\3\0\1\156"+ "\4\0\3\156\1\0\2\156\1\0\2\156\17\0\1\156"+ "\3\0\2\156\15\0\3\6\1\0\1\61\10\6\1\0"+ "\2\6\13\0\3\6\1\155\2\6\1\0\17\6\1\0"+ "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\1\6"+ "\1\157\4\6\1\0\17\6\1\0\3\6\1\0\1\61"+ "\10\6\1\0\2\6\13\0\4\6\1\75\1\6\1\0"+ "\17\6\24\17\1\0\35\17\23\100\1\101\1\100\1\160"+ "\60\100\1\0\35\100\25\0\1\161\34\0\26\103\1\162"+ "\33\103\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ "\13\0\5\6\1\163\1\0\3\6\1\164\13\6\1\0"+ "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\6\6"+ "\1\0\1\6\1\165\4\6\1\75\3\6\1\155\4\6"+ "\1\0\3\6\1\0\1\61\10\6\1\0\2\6\13\0"+ "\2\6\1\155\3\6\1\0\17\6\1\0\3\6\1\0"+ "\1\61\3\6\1\166\4\6\1\0\2\6\13\0\6\6"+ "\1\0\17\6\1\0\3\6\1\0\1\61\10\6\1\0"+ "\2\6\13\0\5\6\1\167\1\0\4\6\1\170\12\6"+ "\1\0\3\6\1\0\1\61\10\6\1\0\2\6\13\0"+ "\6\6\1\0\1\6\1\171\15\6\1\0\3\6\1\0"+ "\1\61\10\6\1\0\2\6\13\0\2\6\1\172\3\6"+ "\1\0\17\6\1\0\3\6\1\0\1\61\10\6\1\0"+ "\2\6\13\0\6\6\1\0\5\6\1\173\11\6\1\0"+ "\3\6\1\0\1\61\1\6\1\72\6\6\1\0\2\6"+ "\13\0\6\6\1\0\17\6\1\0\3\6\1\0\1\61"+ "\10\6\1\0\2\6\13\0\6\6\1\0\3\6\1\174"+ "\13\6\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ "\13\0\2\6\1\175\3\6\1\0\17\6\1\0\3\6"+ "\1\0\1\61\10\6\1\0\2\6\13\0\5\6\1\176"+ "\1\0\17\6\1\0\3\6\1\0\1\61\10\6\1\0"+ "\2\6\13\0\1\6\1\177\4\6\1\0\17\6\1\0"+ "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\3\6"+ "\1\200\2\6\1\0\17\6\1\0\1\6\1\201\1\6"+ "\1\0\1\61\10\6\1\0\2\6\13\0\1\6\1\202"+ "\4\6\1\0\17\6\1\0\3\6\1\0\1\61\10\6"+ "\1\0\2\6\13\0\6\6\1\0\13\6\1\203\3\6"+ "\1\0\3\6\1\0\1\61\7\6\1\204\1\0\2\6"+ "\13\0\6\6\1\0\17\6\1\0\3\6\1\0\1\61"+ "\10\6\1\0\2\6\13\0\6\6\1\0\1\75\16\6"+ "\1\0\3\6\1\0\1\61\1\6\1\205\6\6\1\0"+ "\2\6\13\0\6\6\1\0\17\6\1\0\3\6\1\0"+ "\1\61\7\6\1\206\1\0\2\6\13\0\6\6\1\0"+ "\17\6\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ "\13\0\1\6\1\154\4\6\1\0\17\6\1\0\3\6"+ "\1\0\1\61\1\6\1\75\6\6\1\0\2\6\13\0"+ "\6\6\1\0\3\6\1\75\13\6\25\0\1\207\71\0"+ "\1\210\62\0\1\211\32\0\1\212\115\0\1\213\53\0"+ "\1\214\62\0\1\215\32\0\1\216\115\0\1\217\16\0"+ "\1\147\15\0\1\147\3\0\7\147\1\0\2\147\6\0"+ "\1\147\22\0\1\150\6\0\1\150\4\0\2\64\17\0"+ "\1\64\24\0\1\150\6\0\1\150\50\0\3\6\1\0"+ "\1\61\10\6\1\0\2\6\13\0\6\6\1\0\6\6"+ "\1\75\10\6\1\0\3\6\1\0\1\61\10\6\1\0"+ "\2\6\13\0\3\6\1\163\2\6\1\0\17\6\1\0"+ "\3\6\1\0\1\61\3\6\1\177\4\6\1\0\2\6"+ "\13\0\6\6\1\0\17\6\1\0\3\6\1\0\1\61"+ "\7\6\1\75\1\0\2\6\13\0\6\6\1\0\17\6"+ "\1\0\3\6\1\0\1\61\7\6\1\220\1\0\2\6"+ "\13\0\6\6\1\0\17\6\1\0\3\6\1\0\1\61"+ "\10\6\1\0\2\6\13\0\3\6\1\75\2\6\1\0"+ "\17\6\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ "\13\0\6\6\1\0\4\6\1\127\12\6\1\0\3\6"+ "\1\0\1\61\10\6\1\0\2\6\13\0\5\6\1\221"+ "\1\0\17\6\1\0\3\6\1\0\1\61\10\6\1\0"+ "\2\6\13\0\6\6\1\0\15\6\1\222\1\6\1\0"+ "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\6\6"+ "\1\0\14\6\1\223\2\6\1\0\3\6\1\0\1\61"+ "\10\6\1\0\2\6\13\0\1\6\1\224\4\6\1\0"+ "\17\6\1\0\3\6\1\0\1\61\1\6\1\225\6\6"+ "\1\0\2\6\13\0\6\6\1\0\17\6\1\0\3\6"+ "\1\0\1\61\7\6\1\226\1\0\2\6\13\0\6\6"+ "\1\0\17\6\1\0\3\6\1\0\1\61\10\6\1\0"+ "\2\6\13\0\6\6\1\0\1\6\1\227\15\6\1\0"+ "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\6\6"+ "\1\0\7\6\1\230\7\6\1\0\3\6\1\0\1\61"+ "\1\6\1\231\6\6\1\0\2\6\13\0\6\6\1\0"+ "\4\6\1\232\12\6\1\0\3\6\1\0\1\61\1\6"+ "\1\155\6\6\1\0\2\6\13\0\6\6\1\0\17\6"+ "\1\0\3\6\1\0\1\61\10\6\1\0\2\6\13\0"+ "\1\75\5\6\1\0\17\6\1\0\3\6\1\0\1\61"+ "\10\6\1\0\2\6\13\0\1\6\1\233\4\6\1\0"+ "\17\6\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ "\13\0\6\6\1\0\12\6\1\234\4\6\1\0\3\6"+ "\1\0\1\61\10\6\1\0\2\6\13\0\6\6\1\0"+ "\12\6\1\235\4\6\1\0\3\6\1\0\1\61\7\6"+ "\1\236\1\0\2\6\13\0\6\6\1\0\17\6\1\0"+ "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\6\6"+ "\1\0\3\6\1\237\13\6\1\0\3\6\1\0\1\61"+ "\1\6\1\75\6\6\1\0\2\6\13\0\6\6\1\0"+ "\17\6\1\0\3\6\1\0\1\61\1\6\1\240\6\6"+ "\1\0\2\6\13\0\6\6\1\0\17\6\36\0\1\241"+ "\65\0\1\242\34\0\1\211\65\0\1\243\76\0\1\244"+ "\65\0\1\245\34\0\1\215\65\0\1\246\41\0\3\6"+ "\1\0\1\61\10\6\1\0\2\6\13\0\6\6\1\0"+ "\5\6\1\247\11\6\1\0\3\6\1\0\1\61\10\6"+ "\1\0\2\6\13\0\1\6\1\75\4\6\1\0\17\6"+ "\1\0\3\6\1\0\1\61\10\6\1\0\2\6\13\0"+ "\6\6\1\0\1\6\1\250\15\6\1\0\3\6\1\0"+ "\1\61\10\6\1\0\2\6\13\0\6\6\1\0\1\6"+ "\1\251\15\6\1\0\3\6\1\0\1\61\7\6\1\252"+ "\1\0\2\6\13\0\6\6\1\0\17\6\1\0\3\6"+ "\1\0\1\61\7\6\1\240\1\0\2\6\13\0\6\6"+ "\1\0\17\6\1\0\3\6\1\0\1\61\10\6\1\0"+ "\2\6\13\0\6\6\1\0\3\6\1\75\13\6\1\0"+ "\3\6\1\0\1\61\1\6\1\253\6\6\1\0\2\6"+ "\13\0\6\6\1\0\17\6\1\0\3\6\1\0\1\61"+ "\10\6\1\0\2\6\13\0\6\6\1\0\4\6\1\254"+ "\12\6\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ "\13\0\5\6\1\255\1\0\17\6\1\0\3\6\1\0"+ "\1\61\10\6\1\0\2\6\13\0\6\6\1\0\3\6"+ "\1\221\13\6\1\0\3\6\1\0\1\61\10\6\1\0"+ "\2\6\13\0\6\6\1\0\3\6\1\256\13\6\1\0"+ "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\5\6"+ "\1\257\1\0\17\6\1\0\3\6\1\0\1\61\10\6"+ "\1\0\2\6\13\0\6\6\1\0\3\6\1\260\13\6"+ "\1\0\3\6\1\0\1\61\3\6\1\221\4\6\1\0"+ "\2\6\13\0\6\6\1\0\17\6\1\0\3\6\1\0"+ "\1\61\10\6\1\0\2\6\13\0\6\6\1\0\3\6"+ "\1\261\13\6\1\0\3\6\1\0\1\61\10\6\1\0"+ "\1\6\1\75\13\0\6\6\1\0\17\6\37\0\1\211"+ "\2\0\1\242\46\0\1\262\33\0\3\243\1\263\11\243"+ "\1\263\2\243\2\263\4\0\1\243\1\263\2\0\1\263"+ "\6\243\1\263\17\243\37\0\1\215\2\0\1\245\46\0"+ "\1\264\33\0\3\246\1\265\11\246\1\265\2\246\2\265"+ "\4\0\1\246\1\265\2\0\1\265\6\246\1\265\17\246"+ "\1\0\3\6\1\0\1\61\10\6\1\0\1\6\1\163"+ "\13\0\6\6\1\0\17\6\1\0\3\6\1\0\1\61"+ "\10\6\1\0\2\6\13\0\6\6\1\0\16\6\1\155"+ "\1\0\3\6\1\0\1\61\10\6\1\0\2\6\13\0"+ "\1\6\1\155\4\6\1\0\17\6\1\0\3\6\1\0"+ "\1\61\3\6\1\266\4\6\1\0\2\6\13\0\6\6"+ "\1\0\17\6\1\0\3\6\1\0\1\61\1\6\1\152"+ "\6\6\1\0\2\6\13\0\6\6\1\0\17\6\1\0"+ "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\6\6"+ "\1\0\10\6\1\155\6\6\1\0\3\6\1\0\1\61"+ "\3\6\1\165\4\6\1\0\2\6\13\0\6\6\1\0"+ "\17\6\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ "\13\0\6\6\1\0\1\6\1\236\15\6\1\0\3\6"+ "\1\0\1\61\10\6\1\0\2\6\13\0\6\6\1\0"+ "\3\6\1\267\13\6\1\0\3\6\1\0\1\61\10\6"+ "\1\0\2\6\13\0\6\6\1\0\5\6\1\75\11\6"+ "\1\0\3\6\1\0\1\61\10\6\1\0\2\6\13\0"+ "\5\6\1\270\1\0\17\6\27\0\1\243\61\0\1\246"+ "\33\0\3\6\1\0\1\61\10\6\1\0\2\6\13\0"+ "\1\6\1\225\4\6\1\0\17\6\1\0\3\6\1\0"+ "\1\61\7\6\1\163\1\0\2\6\13\0\6\6\1\0"+ "\17\6\1\0\3\6\1\0\1\61\10\6\1\0\1\6"+ "\1\155\13\0\6\6\1\0\17\6"; private static int [] zzUnpackTrans() { int [] result = new int[8200]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\1\0\1\1\2\0\1\11\2\1\1\11\7\1\1\11"+ "\23\1\1\11\2\1\1\11\5\1\1\11\4\1\1\11"+ "\1\0\1\11\4\1\1\0\4\1\1\11\5\1\2\11"+ "\26\1\1\11\1\0\1\11\10\0\2\1\1\0\6\1"+ "\3\11\24\1\1\11\10\0\21\1\2\0\1\1\2\0"+ "\14\1\4\0\3\1"; private static int [] zzUnpackAttribute() { int [] result = new int[184]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public ScalaTokenMaker() { } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addHyperlinkToken(int, int, int) */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, false); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. * @param hyperlink Whether this token is a hyperlink. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset, boolean hyperlink) { super.addToken(array, start,end, tokenType, startOffset, hyperlink); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = YYINITIAL; switch (initialTokenType) { case Token.LITERAL_STRING_DOUBLE_QUOTE: state = MULTILINE_STRING_DOUBLE; break; case Token.COMMENT_MULTILINE: state = MLC; break; default: state = YYINITIAL; } s = text; start = text.offset; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) throws IOException { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public ScalaTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public ScalaTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 150) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 6: { addNullToken(); return firstToken; } case 26: break; case 15: { addToken(Token.LITERAL_CHAR); } case 27: break; case 21: { start = zzMarkedPos-3; yybegin(MULTILINE_STRING_DOUBLE); } case 28: break; case 19: { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } case 29: break; case 18: { start = zzMarkedPos-2; yybegin(MLC); } case 30: break; case 8: { addToken(Token.WHITESPACE); } case 31: break; case 20: { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } case 32: break; case 13: { addToken(Token.LITERAL_NUMBER_FLOAT); } case 33: break; case 14: { addToken(Token.RESERVED_WORD); } case 34: break; case 4: { addToken(Token.SEPARATOR); } case 35: break; case 22: { addToken(Token.LITERAL_BACKQUOTE); } case 36: break; case 9: { /* Skip escaped chars, handles case: '\"""'. */ } case 37: break; case 2: { addToken(Token.IDENTIFIER); } case 38: break; case 12: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } case 39: break; case 17: { start = zzMarkedPos-2; yybegin(EOL_COMMENT); } case 40: break; case 23: { addToken(start,zzStartRead+2, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(YYINITIAL); } case 41: break; case 5: { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; } case 42: break; case 7: { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } case 43: break; case 16: { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } case 44: break; case 10: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } case 45: break; case 25: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } case 46: break; case 24: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } case 47: break; case 3: { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } case 48: break; case 1: { } case 49: break; case 11: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } case 50: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case EOL_COMMENT: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } case 185: break; case MULTILINE_STRING_DOUBLE: { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } case 186: break; case YYINITIAL: { addNullToken(); return firstToken; } case 187: break; case MLC: { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } case 188: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/TclTokenMaker.flex000066400000000000000000000373331257417003700313240ustar00rootroot00000000000000/* * 10/03/2007 * * TclTokenMaker.java - Scanner for the Tcl programming language. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for the Tcl programming language.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated TclTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.5 * */ %% %public %class TclTokenMaker %extends AbstractJFlexCTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public TclTokenMaker() { } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} Letter = [A-Za-z] NonzeroDigit = [1-9] Digit = ("0"|{NonzeroDigit}) HexDigit = ({Digit}|[A-Fa-f]) OctalDigit = ([0-7]) EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\") IdentifierStart = ({Letter}|"_"|"$") IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) LineTerminator = (\n) WhiteSpace = ([ \t\f]) UnclosedStringLiteral = ([\"]([\\].|[^\\\"])*[^\"]?) StringLiteral = ({UnclosedStringLiteral}[\"]) LineCommentBegin = "#" IntegerHelper1 = (({NonzeroDigit}{Digit}*)|"0") IntegerHelper2 = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) IntegerLiteral = ({IntegerHelper1}[lL]?) HexLiteral = ({IntegerHelper2}[lL]?) FloatHelper1 = ([fFdD]?) FloatHelper2 = ([eE][+-]?{Digit}+{FloatHelper1}) FloatLiteral1 = ({Digit}+"."({FloatHelper1}|{FloatHelper2}|{Digit}+({FloatHelper1}|{FloatHelper2}))) FloatLiteral2 = ("."{Digit}+({FloatHelper1}|{FloatHelper2})) FloatLiteral3 = ({Digit}+{FloatHelper2}) FloatLiteral = ({FloatLiteral1}|{FloatLiteral2}|{FloatLiteral3}|({Digit}+[fFdD])) ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+) Separator = ([\(\)\{\}\[\]]) Separator2 = ([\;,.]) Operator = ("="|"!"|"+"|"-"|"*"|"/"|">"=?|"<"=?|"%"|"&"|"|"|"^"|"~") Identifier = ({IdentifierStart}{IdentifierPart}*) ErrorIdentifier = ({NonSeparator}+) %% /* Keywords */ "append" { addToken(Token.RESERVED_WORD); } "array" { addToken(Token.RESERVED_WORD); } "auto_mkindex" { addToken(Token.RESERVED_WORD); } "concat" { addToken(Token.RESERVED_WORD); } "console" { addToken(Token.RESERVED_WORD); } "eval" { addToken(Token.RESERVED_WORD); } "expr" { addToken(Token.RESERVED_WORD); } "format" { addToken(Token.RESERVED_WORD); } "global" { addToken(Token.RESERVED_WORD); } "set" { addToken(Token.RESERVED_WORD); } "trace" { addToken(Token.RESERVED_WORD); } "unset" { addToken(Token.RESERVED_WORD); } "upvar" { addToken(Token.RESERVED_WORD); } "join" { addToken(Token.RESERVED_WORD); } "lappend" { addToken(Token.RESERVED_WORD); } "lindex" { addToken(Token.RESERVED_WORD); } "linsert" { addToken(Token.RESERVED_WORD); } "list" { addToken(Token.RESERVED_WORD); } "llength" { addToken(Token.RESERVED_WORD); } "lrange" { addToken(Token.RESERVED_WORD); } "lreplace" { addToken(Token.RESERVED_WORD); } "lsearch" { addToken(Token.RESERVED_WORD); } "lsort" { addToken(Token.RESERVED_WORD); } "split" { addToken(Token.RESERVED_WORD); } "scan" { addToken(Token.RESERVED_WORD); } "string" { addToken(Token.RESERVED_WORD); } "regexp" { addToken(Token.RESERVED_WORD); } "regsub" { addToken(Token.RESERVED_WORD); } "if" { addToken(Token.RESERVED_WORD); } "else" { addToken(Token.RESERVED_WORD); } "elseif" { addToken(Token.RESERVED_WORD); } "switch" { addToken(Token.RESERVED_WORD); } "for" { addToken(Token.RESERVED_WORD); } "foreach" { addToken(Token.RESERVED_WORD); } "while" { addToken(Token.RESERVED_WORD); } "break" { addToken(Token.RESERVED_WORD); } "continue" { addToken(Token.RESERVED_WORD); } "proc" { addToken(Token.RESERVED_WORD); } "return" { addToken(Token.RESERVED_WORD); } "source" { addToken(Token.RESERVED_WORD); } "unkown" { addToken(Token.RESERVED_WORD); } "uplevel" { addToken(Token.RESERVED_WORD); } "cd" { addToken(Token.RESERVED_WORD); } "close" { addToken(Token.RESERVED_WORD); } "eof" { addToken(Token.RESERVED_WORD); } "file" { addToken(Token.RESERVED_WORD); } "flush" { addToken(Token.RESERVED_WORD); } "gets" { addToken(Token.RESERVED_WORD); } "glob" { addToken(Token.RESERVED_WORD); } "open" { addToken(Token.RESERVED_WORD); } "read" { addToken(Token.RESERVED_WORD); } "puts" { addToken(Token.RESERVED_WORD); } "pwd" { addToken(Token.RESERVED_WORD); } "seek" { addToken(Token.RESERVED_WORD); } "tell" { addToken(Token.RESERVED_WORD); } "catch" { addToken(Token.RESERVED_WORD); } "error" { addToken(Token.RESERVED_WORD); } "exec" { addToken(Token.RESERVED_WORD); } "pid" { addToken(Token.RESERVED_WORD); } "after" { addToken(Token.RESERVED_WORD); } "time" { addToken(Token.RESERVED_WORD); } "exit" { addToken(Token.RESERVED_WORD); } "history" { addToken(Token.RESERVED_WORD); } "rename" { addToken(Token.RESERVED_WORD); } "info" { addToken(Token.RESERVED_WORD); } "ceil" { addToken(Token.RESERVED_WORD); } "floor" { addToken(Token.RESERVED_WORD); } "round" { addToken(Token.RESERVED_WORD); } "incr" { addToken(Token.RESERVED_WORD); } "hypot" { addToken(Token.RESERVED_WORD); } "abs" { addToken(Token.RESERVED_WORD); } "acos" { addToken(Token.RESERVED_WORD); } "cos" { addToken(Token.RESERVED_WORD); } "cosh" { addToken(Token.RESERVED_WORD); } "asin" { addToken(Token.RESERVED_WORD); } "sin" { addToken(Token.RESERVED_WORD); } "sinh" { addToken(Token.RESERVED_WORD); } "atan" { addToken(Token.RESERVED_WORD); } "atan2" { addToken(Token.RESERVED_WORD); } "tan" { addToken(Token.RESERVED_WORD); } "tanh" { addToken(Token.RESERVED_WORD); } "log" { addToken(Token.RESERVED_WORD); } "log10" { addToken(Token.RESERVED_WORD); } "fmod" { addToken(Token.RESERVED_WORD); } "pow" { addToken(Token.RESERVED_WORD); } "hypot" { addToken(Token.RESERVED_WORD); } "sqrt" { addToken(Token.RESERVED_WORD); } "double" { addToken(Token.RESERVED_WORD); } "int" { addToken(Token.RESERVED_WORD); } "bind" { addToken(Token.RESERVED_WORD); } "button" { addToken(Token.RESERVED_WORD); } "canvas" { addToken(Token.RESERVED_WORD); } "checkbutton" { addToken(Token.RESERVED_WORD); } "destroy" { addToken(Token.RESERVED_WORD); } "entry" { addToken(Token.RESERVED_WORD); } "focus" { addToken(Token.RESERVED_WORD); } "frame" { addToken(Token.RESERVED_WORD); } "grab" { addToken(Token.RESERVED_WORD); } "image" { addToken(Token.RESERVED_WORD); } "label" { addToken(Token.RESERVED_WORD); } "listbox" { addToken(Token.RESERVED_WORD); } "lower" { addToken(Token.RESERVED_WORD); } "menu" { addToken(Token.RESERVED_WORD); } "menubutton" { addToken(Token.RESERVED_WORD); } "message" { addToken(Token.RESERVED_WORD); } "option" { addToken(Token.RESERVED_WORD); } "pack" { addToken(Token.RESERVED_WORD); } "placer" { addToken(Token.RESERVED_WORD); } "radiobutton" { addToken(Token.RESERVED_WORD); } "raise" { addToken(Token.RESERVED_WORD); } "scale" { addToken(Token.RESERVED_WORD); } "scrollbar" { addToken(Token.RESERVED_WORD); } "selection" { addToken(Token.RESERVED_WORD); } "send" { addToken(Token.RESERVED_WORD); } "text" { addToken(Token.RESERVED_WORD); } "tk" { addToken(Token.RESERVED_WORD); } "tkerror" { addToken(Token.RESERVED_WORD); } "tkwait" { addToken(Token.RESERVED_WORD); } "toplevel" { addToken(Token.RESERVED_WORD); } "update" { addToken(Token.RESERVED_WORD); } "winfo" { addToken(Token.RESERVED_WORD); } "wm" { addToken(Token.RESERVED_WORD); } { {LineTerminator} { addNullToken(); return firstToken; } {Identifier} { addToken(Token.IDENTIFIER); } {WhiteSpace}+ { addToken(Token.WHITESPACE); } /* String/Character literals. */ {StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } {UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } /* Comment literals. */ {LineCommentBegin}.* { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; } /* Separators. */ {Separator} { addToken(Token.SEPARATOR); } {Separator2} { addToken(Token.IDENTIFIER); } /* Operators. */ {Operator} { addToken(Token.OPERATOR); } /* Numbers */ {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } {FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } {ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } /* Ended with a line not in a string or comment. */ <> { addNullToken(); return firstToken; } /* Catch any other (unhandled) characters and flag them as bad. */ . { addToken(Token.ERROR_IDENTIFIER); } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/TclTokenMaker.java000066400000000000000000001127251257417003700313060ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 10/10/10 10:56 PM */ /* * 10/03/2007 * * TclTokenMaker.java - Scanner for the Tcl programming language. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for the Tcl programming language.

* * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated TclTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.5 * */ public class TclTokenMaker extends AbstractJFlexCTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int YYINITIAL = 0; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\14\1\13\1\0\1\14\1\7\22\0\1\14\1\27\1\15"+ "\1\10\1\1\1\27\1\27\1\7\2\24\1\27\1\22\1\25\1\22"+ "\1\23\1\27\1\3\1\61\1\60\5\5\2\2\1\7\1\25\1\30"+ "\1\26\1\30\1\7\1\0\3\4\1\20\1\21\1\20\5\1\1\17"+ "\13\1\1\16\2\1\1\24\1\11\1\24\1\27\1\12\1\0\1\31"+ "\1\54\1\46\1\35\1\33\1\52\1\53\1\56\1\44\1\55\1\43"+ "\1\50\1\42\1\34\1\41\1\32\1\62\1\36\1\47\1\40\1\6"+ "\1\51\1\57\1\45\1\37\1\1\1\24\1\27\1\24\1\27\uff81\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\1\0\1\1\1\2\2\3\1\2\1\1\1\4\1\5"+ "\1\6\1\7\1\10\1\2\1\11\1\2\1\10\22\2"+ "\1\1\1\12\1\3\1\13\1\12\1\13\1\12\1\14"+ "\1\12\2\2\1\7\1\15\35\2\1\16\5\2\1\16"+ "\40\2\1\1\1\13\1\0\2\14\5\2\1\15\25\2"+ "\1\16\30\2\1\16\4\2\1\16\11\2\1\1\5\2"+ "\2\16\6\2\1\16\15\2\1\16\3\2\1\16\1\2"+ "\1\1\14\2\1\1\6\2"; private static int [] zzUnpackAction() { int [] result = new int[241]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\63\0\146\0\231\0\314\0\377\0\u0132\0\u0165"+ "\0\u0132\0\u0198\0\u01cb\0\u0132\0\u01fe\0\u0132\0\u0132\0\u0231"+ "\0\u0264\0\u0297\0\u02ca\0\u02fd\0\u0330\0\u0363\0\u0396\0\u03c9"+ "\0\u03fc\0\u042f\0\u0462\0\u0495\0\u04c8\0\u04fb\0\u052e\0\u0561"+ "\0\u0594\0\u05c7\0\u05fa\0\u062d\0\u062d\0\u062d\0\u0660\0\u0693"+ "\0\u06c6\0\u06f9\0\u072c\0\u075f\0\u0792\0\u07c5\0\u0132\0\u07f8"+ "\0\u082b\0\u085e\0\u0891\0\u08c4\0\u08f7\0\u092a\0\u095d\0\u0990"+ "\0\u09c3\0\u09f6\0\u0a29\0\u0a5c\0\u0a8f\0\u0ac2\0\u0af5\0\u0b28"+ "\0\u0b5b\0\u0b8e\0\u0bc1\0\u0bf4\0\u0c27\0\u0c5a\0\u0c8d\0\u0cc0"+ "\0\u0cf3\0\u0d26\0\u0d59\0\u0d8c\0\u0dbf\0\u0df2\0\u0e25\0\u0e58"+ "\0\u0e8b\0\u0ebe\0\146\0\u0ef1\0\u0f24\0\u0f57\0\u0f8a\0\u0fbd"+ "\0\u0ff0\0\u1023\0\u1056\0\u1089\0\u10bc\0\u10ef\0\u1122\0\u1155"+ "\0\u1188\0\u11bb\0\u11ee\0\u1221\0\u1254\0\u1287\0\u12ba\0\u12ed"+ "\0\u1320\0\u1353\0\u1386\0\u13b9\0\u13ec\0\u141f\0\u1452\0\u1485"+ "\0\u14b8\0\u14eb\0\u151e\0\u1551\0\u1584\0\u15b7\0\u062d\0\u15ea"+ "\0\u161d\0\u1650\0\u1683\0\u16b6\0\u16e9\0\u01cb\0\u171c\0\u174f"+ "\0\u1782\0\u17b5\0\u17e8\0\u181b\0\u184e\0\u1881\0\u18b4\0\u18e7"+ "\0\u191a\0\u194d\0\u1980\0\u19b3\0\u19e6\0\u1a19\0\u1a4c\0\u1a7f"+ "\0\u1ab2\0\u1ae5\0\u1b18\0\u1b4b\0\u1b7e\0\u1bb1\0\u1be4\0\u1c17"+ "\0\u1c4a\0\u1c7d\0\u1cb0\0\u1ce3\0\u1d16\0\u1d49\0\u1d7c\0\u1daf"+ "\0\u1de2\0\u1e15\0\u1e48\0\u1e7b\0\u1eae\0\u1ee1\0\u1f14\0\u1f47"+ "\0\u1f7a\0\u1fad\0\u1fe0\0\u2013\0\u2046\0\u2079\0\u20ac\0\u20df"+ "\0\u2112\0\u2145\0\u2178\0\u21ab\0\u21de\0\u2211\0\u2244\0\u2277"+ "\0\u22aa\0\u22dd\0\u2310\0\u2343\0\u2376\0\u23a9\0\u23dc\0\u240f"+ "\0\u2442\0\u2475\0\u24a8\0\u24db\0\u250e\0\u2541\0\u2574\0\u25a7"+ "\0\u25da\0\u260d\0\u2640\0\u1b4b\0\u2673\0\u26a6\0\u26d9\0\u270c"+ "\0\u273f\0\u2772\0\u27a5\0\u27d8\0\u280b\0\u283e\0\u2871\0\u28a4"+ "\0\u28d7\0\u290a\0\u293d\0\u0bc1\0\u2970\0\u29a3\0\u29d6\0\u2a09"+ "\0\u260d\0\u2a3c\0\u2a6f\0\u2aa2\0\u2ad5\0\u2b08\0\u2b3b\0\u2b6e"+ "\0\u2ba1\0\u2bd4\0\u2c07\0\u2c3a\0\u2c6d\0\u2ca0\0\u2cd3\0\u2d06"+ "\0\u2d39"; private static int [] zzUnpackRowMap() { int [] result = new int[241]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\2\1\3\1\4\1\5\1\3\1\4\1\6\1\7"+ "\1\10\1\2\1\3\1\11\1\12\1\13\4\3\1\14"+ "\1\15\1\16\1\17\2\14\1\20\1\21\1\22\1\23"+ "\1\3\1\24\1\25\1\3\1\26\1\27\1\30\1\3"+ "\1\31\1\3\1\32\1\33\1\34\1\3\1\35\1\36"+ "\1\37\1\40\1\41\1\42\2\4\1\3\7\2\1\0"+ "\3\2\3\0\4\2\7\0\33\2\6\3\1\0\1\2"+ "\1\43\1\3\3\0\4\3\7\0\32\3\2\44\2\4"+ "\1\44\1\4\1\44\1\0\3\44\3\0\1\44\1\45"+ "\1\46\1\47\1\0\1\50\5\0\2\44\1\47\1\44"+ "\1\46\12\44\1\45\1\44\1\46\5\44\2\4\3\44"+ "\1\51\1\52\1\44\1\52\1\44\1\0\3\44\3\0"+ "\1\53\1\45\1\46\1\47\1\0\1\50\5\0\2\44"+ "\1\47\1\44\1\46\7\44\1\53\2\44\1\45\1\44"+ "\1\46\5\44\2\52\1\44\1\2\6\3\1\0\1\2"+ "\1\43\1\3\3\0\4\3\7\0\1\3\1\54\1\3"+ "\1\55\26\3\63\0\13\10\1\0\47\10\14\0\1\12"+ "\46\0\11\13\1\56\3\13\1\57\45\13\2\0\2\50"+ "\1\0\1\50\52\0\2\50\27\0\1\14\34\0\1\2"+ "\5\3\1\60\1\0\1\2\1\43\1\3\3\0\4\3"+ "\7\0\1\3\1\61\3\3\1\62\1\3\1\63\5\3"+ "\1\64\1\65\2\3\1\66\1\3\1\67\6\3\1\2"+ "\5\3\1\70\1\0\1\2\1\43\1\3\3\0\4\3"+ "\7\0\1\71\4\3\1\72\2\3\1\73\2\3\1\74"+ "\3\3\1\75\6\3\1\74\3\3\1\2\6\3\1\0"+ "\1\2\1\43\1\3\3\0\4\3\7\0\3\3\1\76"+ "\1\3\1\77\2\3\1\100\3\3\1\101\2\3\1\102"+ "\1\103\11\3\1\2\6\3\1\0\1\2\1\43\1\3"+ "\3\0\4\3\7\0\2\3\1\104\5\3\1\105\21\3"+ "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ "\7\0\1\106\1\3\1\107\5\3\1\110\21\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\1\111\1\3\1\112\2\3\1\113\2\3\1\114\1\3"+ "\1\115\1\116\16\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\1\3\1\117\30\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\2\3\1\120\27\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\3\3\1\121\5\3\1\122"+ "\7\3\1\123\10\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\1\124\1\3\1\125\1\3"+ "\1\123\3\3\1\126\6\3\1\127\5\3\1\130\4\3"+ "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ "\7\0\1\3\1\131\1\132\4\3\1\133\1\134\2\3"+ "\1\111\1\3\1\135\10\3\1\136\2\3\1\137\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\1\140\4\3\1\141\2\3\1\142\2\3\1\143\2\3"+ "\1\144\1\145\12\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\5\3\1\146\2\3\1\147"+ "\1\150\1\3\1\151\3\3\1\152\12\3\1\2\6\3"+ "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\2\3"+ "\1\70\2\3\1\153\11\3\1\154\12\3\1\2\5\3"+ "\1\155\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\5\3\1\156\5\3\1\157\16\3\1\2\6\3\1\0"+ "\1\2\1\43\1\3\3\0\4\3\7\0\10\3\1\65"+ "\21\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\6\3\1\160\4\3\1\161\16\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\11\3\1\123\1\3\1\162\11\3\1\163\4\3\6\2"+ "\1\164\1\0\3\2\3\0\4\2\7\0\32\2\7\44"+ "\1\0\3\44\3\0\4\44\7\0\34\44\2\165\1\44"+ "\1\165\1\44\1\0\3\44\3\0\4\44\1\166\6\0"+ "\27\44\2\165\3\44\2\50\1\44\1\50\1\44\1\0"+ "\3\44\3\0\2\44\1\46\1\47\7\0\2\44\1\47"+ "\1\44\1\46\14\44\1\46\5\44\2\50\3\44\2\51"+ "\1\44\1\51\1\44\1\0\3\44\3\0\2\44\1\46"+ "\1\47\1\0\1\50\5\0\2\44\1\47\1\44\1\46"+ "\14\44\1\46\5\44\2\51\3\44\1\51\1\52\1\44"+ "\1\52\1\44\1\0\3\44\3\0\1\44\1\167\1\46"+ "\1\47\1\0\1\50\5\0\2\44\1\47\1\44\1\46"+ "\12\44\1\167\1\44\1\46\5\44\2\52\3\44\4\170"+ "\1\44\1\0\3\44\3\0\2\44\2\170\7\0\1\170"+ "\1\44\1\170\1\44\1\170\10\44\1\170\3\44\1\170"+ "\1\44\1\170\3\44\2\170\1\44\1\2\6\3\1\0"+ "\1\2\1\43\1\3\3\0\4\3\7\0\4\3\1\171"+ "\12\3\1\172\1\173\11\3\1\2\6\3\1\0\1\2"+ "\1\43\1\3\3\0\4\3\7\0\12\3\1\174\3\3"+ "\1\175\13\3\13\13\1\0\1\13\1\176\45\13\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\7\3\1\177\22\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\1\3\1\200\30\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\5\3\1\201\24\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\1\202\31\3\1\2\6\3"+ "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\10\3"+ "\1\67\21\3\1\2\6\3\1\0\1\2\1\43\1\3"+ "\3\0\4\3\7\0\13\3\1\203\16\3\1\2\6\3"+ "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\7\3"+ "\1\204\22\3\1\2\6\3\1\0\1\2\1\43\1\3"+ "\3\0\4\3\7\0\16\3\1\123\13\3\1\2\6\3"+ "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\7\3"+ "\1\67\22\3\1\2\6\3\1\0\1\2\1\43\1\3"+ "\3\0\4\3\7\0\15\3\1\205\14\3\1\2\6\3"+ "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\10\3"+ "\1\206\21\3\1\2\6\3\1\0\1\2\1\43\1\3"+ "\3\0\4\3\7\0\26\3\1\123\3\3\1\2\6\3"+ "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\4\3"+ "\1\123\25\3\1\2\6\3\1\0\1\2\1\43\1\3"+ "\3\0\4\3\7\0\1\207\31\3\1\2\6\3\1\0"+ "\1\2\1\43\1\3\3\0\4\3\7\0\7\3\1\210"+ "\22\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\5\3\1\211\24\3\1\2\6\3\1\0"+ "\1\2\1\43\1\3\3\0\4\3\7\0\21\3\1\123"+ "\10\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\1\3\1\212\1\206\10\3\1\213\16\3"+ "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ "\7\0\16\3\1\214\13\3\1\2\6\3\1\0\1\2"+ "\1\43\1\3\3\0\4\3\7\0\1\215\31\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\16\3\1\216\13\3\1\2\5\3\1\217\1\0\1\2"+ "\1\43\1\3\3\0\4\3\7\0\32\3\1\2\6\3"+ "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\4\3"+ "\1\220\6\3\1\221\16\3\1\2\6\3\1\0\1\2"+ "\1\43\1\3\3\0\4\3\7\0\1\74\2\3\1\146"+ "\3\3\1\222\12\3\1\223\7\3\1\2\5\3\1\157"+ "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\32\3"+ "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ "\7\0\3\3\1\224\26\3\1\2\6\3\1\0\1\2"+ "\1\43\1\3\3\0\4\3\7\0\14\3\1\213\2\3"+ "\1\215\12\3\1\2\6\3\1\0\1\2\1\43\1\3"+ "\3\0\4\3\7\0\1\225\31\3\1\2\6\3\1\0"+ "\1\2\1\43\1\3\3\0\4\3\7\0\1\3\1\226"+ "\30\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\2\3\1\227\23\3\1\230\3\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\11\3\1\231\20\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\2\3\1\203\4\3\1\232"+ "\22\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\3\3\1\233\12\3\1\234\13\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\7\3\1\123\5\3\1\212\3\3\1\235\10\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\1\236\31\3\1\2\6\3\1\0\1\2\1\43\1\3"+ "\3\0\4\3\7\0\3\3\1\237\3\3\1\240\22\3"+ "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ "\7\0\13\3\1\215\16\3\1\2\6\3\1\0\1\2"+ "\1\43\1\3\3\0\4\3\7\0\3\3\1\241\12\3"+ "\1\224\13\3\1\2\6\3\1\0\1\2\1\43\1\3"+ "\3\0\4\3\7\0\10\3\1\221\21\3\1\2\6\3"+ "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\2\3"+ "\1\242\27\3\1\2\6\3\1\0\1\2\1\43\1\3"+ "\3\0\4\3\7\0\17\3\1\243\12\3\1\2\6\3"+ "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\2\3"+ "\1\205\1\74\3\3\1\123\7\3\1\244\12\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\5\3\1\245\24\3\1\2\5\3\1\246\1\0\1\2"+ "\1\43\1\3\3\0\4\3\7\0\32\3\1\2\6\3"+ "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\1\247"+ "\4\3\1\250\24\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\13\3\1\251\16\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\5\3\1\213\24\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\1\3\1\61\21\3\1\252"+ "\6\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\1\253\1\3\1\254\27\3\1\2\6\3"+ "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\22\3"+ "\1\255\3\3\1\204\3\3\1\2\6\3\1\0\1\2"+ "\1\43\1\3\3\0\4\3\7\0\3\3\1\256\12\3"+ "\1\257\13\3\1\2\6\3\1\0\1\2\1\43\1\3"+ "\3\0\4\3\7\0\2\3\1\260\5\3\1\137\21\3"+ "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ "\7\0\2\3\1\261\27\3\1\2\6\3\1\0\1\2"+ "\1\43\1\3\3\0\4\3\7\0\1\116\31\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\5\3\1\262\7\3\1\263\14\3\1\2\6\3\1\0"+ "\1\2\1\43\1\3\3\0\4\3\7\0\10\3\1\74"+ "\21\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\17\3\1\231\12\3\1\2\5\3\1\264"+ "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\10\3"+ "\1\211\21\3\1\2\6\3\1\0\1\2\1\43\1\3"+ "\3\0\4\3\7\0\1\265\31\3\1\2\6\3\1\0"+ "\1\2\1\43\1\3\3\0\4\3\7\0\10\3\1\266"+ "\21\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\7\3\1\267\22\3\1\2\6\3\1\0"+ "\1\2\1\43\1\3\3\0\4\3\7\0\2\3\1\270"+ "\27\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\3\3\1\74\26\3\1\2\6\3\1\0"+ "\1\2\1\43\1\3\3\0\4\3\7\0\1\3\1\271"+ "\30\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\16\3\1\272\13\3\1\2\6\3\1\0"+ "\1\2\1\43\1\3\3\0\4\3\7\0\3\3\1\273"+ "\26\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\13\3\1\151\16\3\2\2\4\274\1\2"+ "\1\0\3\2\3\0\2\2\2\274\7\0\1\274\1\2"+ "\1\274\1\2\1\274\10\2\1\274\3\2\1\274\1\2"+ "\1\274\3\2\2\274\1\2\2\44\2\165\1\44\1\165"+ "\1\44\1\0\3\44\3\0\2\44\1\46\1\44\7\0"+ "\4\44\1\46\14\44\1\46\5\44\2\165\1\44\2\0"+ "\2\165\1\0\1\165\52\0\2\165\1\0\2\44\4\170"+ "\1\44\1\0\3\44\3\0\1\44\1\167\2\170\7\0"+ "\1\170\1\44\1\170\1\44\1\170\10\44\1\170\1\44"+ "\1\167\1\44\1\170\1\44\1\170\3\44\2\170\1\44"+ "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ "\7\0\1\275\31\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\2\3\1\276\27\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\1\212\31\3\1\2\6\3\1\0\1\2\1\43\1\3"+ "\3\0\4\3\7\0\10\3\1\277\21\3\1\2\6\3"+ "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\2\3"+ "\1\213\27\3\1\2\6\3\1\0\1\2\1\43\1\3"+ "\3\0\4\3\7\0\10\3\1\300\21\3\1\2\6\3"+ "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\2\3"+ "\1\157\27\3\1\2\6\3\1\0\1\2\1\43\1\3"+ "\3\0\4\3\7\0\1\301\31\3\1\2\6\3\1\0"+ "\1\2\1\43\1\3\3\0\4\3\7\0\3\3\1\302"+ "\26\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\3\3\1\123\26\3\1\2\6\3\1\0"+ "\1\2\1\43\1\3\3\0\4\3\7\0\2\3\1\212"+ "\27\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\12\3\1\123\17\3\1\2\6\3\1\0"+ "\1\2\1\43\1\3\3\0\4\3\7\0\15\3\1\123"+ "\14\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\15\3\1\204\14\3\1\2\6\3\1\0"+ "\1\2\1\43\1\3\3\0\4\3\7\0\5\3\1\301"+ "\24\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\10\3\1\212\21\3\1\2\6\3\1\0"+ "\1\2\1\43\1\3\3\0\4\3\7\0\5\3\1\123"+ "\24\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\7\3\1\123\22\3\1\2\6\3\1\0"+ "\1\2\1\43\1\3\3\0\4\3\7\0\2\3\1\303"+ "\27\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\17\3\1\123\12\3\1\2\6\3\1\0"+ "\1\2\1\43\1\3\3\0\4\3\7\0\7\3\1\304"+ "\22\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\23\3\1\151\6\3\1\2\6\3\1\0"+ "\1\2\1\43\1\3\3\0\4\3\7\0\13\3\1\305"+ "\16\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\16\3\1\231\13\3\1\2\5\3\1\306"+ "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\32\3"+ "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ "\7\0\2\3\1\307\13\3\1\310\13\3\1\2\6\3"+ "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\25\3"+ "\1\123\4\3\1\2\6\3\1\0\1\2\1\43\1\3"+ "\3\0\4\3\7\0\15\3\1\231\14\3\1\2\6\3"+ "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\17\3"+ "\1\172\12\3\1\2\6\3\1\0\1\2\1\43\1\3"+ "\3\0\4\3\7\0\5\3\1\77\24\3\1\2\6\3"+ "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\1\243"+ "\31\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\2\3\1\123\27\3\1\2\6\3\1\0"+ "\1\2\1\43\1\3\3\0\4\3\7\0\13\3\1\311"+ "\16\3\1\2\5\3\1\312\1\0\1\2\1\43\1\3"+ "\3\0\4\3\7\0\32\3\1\2\6\3\1\0\1\2"+ "\1\43\1\3\3\0\4\3\7\0\16\3\1\122\13\3"+ "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ "\7\0\10\3\1\123\21\3\1\2\6\3\1\0\1\2"+ "\1\43\1\3\3\0\4\3\7\0\22\3\1\231\7\3"+ "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ "\7\0\20\3\1\313\11\3\1\2\6\3\1\0\1\2"+ "\1\43\1\3\3\0\4\3\7\0\15\3\1\314\14\3"+ "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ "\7\0\7\3\1\315\5\3\1\316\1\317\13\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\15\3\1\320\14\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\13\3\1\213\16\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\2\3\1\321\27\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\13\3\1\322\16\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\5\3\1\225\24\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\3\3\1\123\13\3\1\231"+ "\12\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\10\3\1\323\21\3\1\2\6\3\1\0"+ "\1\2\1\43\1\3\3\0\4\3\7\0\7\3\1\240"+ "\22\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\2\3\1\215\27\3\1\2\6\3\1\0"+ "\1\2\1\43\1\3\3\0\4\3\7\0\3\3\1\236"+ "\26\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\1\3\1\324\30\3\1\2\6\3\1\0"+ "\1\2\1\43\1\3\3\0\4\3\7\0\30\3\1\325"+ "\1\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\4\3\1\326\11\3\1\327\13\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\7\3\1\330\22\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\1\331\31\3\1\2\6\3"+ "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\3\3"+ "\1\332\26\3\1\2\6\3\1\0\1\2\1\43\1\3"+ "\3\0\4\3\7\0\2\3\1\333\6\3\1\316\20\3"+ "\1\2\5\3\1\67\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\32\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\16\3\1\314\13\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\23\3\1\123\6\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\23\3\1\334\6\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\7\3\1\311\22\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\1\205\31\3\1\2\6\3"+ "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\10\3"+ "\1\213\21\3\1\2\6\3\1\0\1\2\1\43\1\3"+ "\3\0\4\3\7\0\7\3\1\335\22\3\1\2\6\3"+ "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\21\3"+ "\1\235\10\3\2\2\4\336\1\2\1\0\3\2\3\0"+ "\2\2\2\336\7\0\1\336\1\2\1\336\1\2\1\336"+ "\10\2\1\336\3\2\1\336\1\2\1\336\3\2\2\336"+ "\2\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ "\7\0\7\3\1\231\22\3\1\2\6\3\1\0\1\2"+ "\1\43\1\3\3\0\4\3\7\0\20\3\1\252\11\3"+ "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ "\7\0\26\3\1\203\3\3\1\2\6\3\1\0\1\2"+ "\1\43\1\337\3\0\4\3\7\0\32\3\1\2\6\3"+ "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\6\3"+ "\1\123\23\3\1\2\6\3\1\0\1\2\1\43\1\3"+ "\3\0\4\3\7\0\27\3\1\123\2\3\1\2\6\3"+ "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\13\3"+ "\1\100\16\3\1\2\6\3\1\0\1\2\1\43\1\3"+ "\3\0\4\3\7\0\5\3\1\340\24\3\1\2\6\3"+ "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\10\3"+ "\1\341\21\3\1\2\6\3\1\0\1\2\1\43\1\3"+ "\3\0\4\3\7\0\5\3\1\203\24\3\1\2\6\3"+ "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\14\3"+ "\1\342\15\3\1\2\5\3\1\265\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\32\3\1\2\6\3\1\0"+ "\1\2\1\43\1\3\3\0\4\3\7\0\10\3\1\203"+ "\21\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\23\3\1\343\6\3\1\2\6\3\1\0"+ "\1\2\1\43\1\3\3\0\4\3\7\0\1\67\31\3"+ "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ "\7\0\13\3\1\344\16\3\1\2\6\3\1\0\1\2"+ "\1\43\1\3\3\0\4\3\7\0\1\213\31\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\10\3\1\151\21\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\12\3\1\341\17\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\15\3\1\345\14\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\3\3\1\346\26\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\17\3\1\347\12\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\17\3\1\113\12\3\1\2"+ "\2\3\1\123\3\3\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\32\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\2\3\1\350\27\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\2\3\1\137\27\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\23\3\1\351\6\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\5\3\1\240\24\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\22\3\1\352\7\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\1\240\31\3\1\2\6\3\1\0\1\2\1\43\1\3"+ "\3\0\4\3\7\0\10\3\1\210\21\3\2\2\4\353"+ "\1\2\1\0\3\2\3\0\2\2\2\353\7\0\1\353"+ "\1\2\1\353\1\2\1\353\10\2\1\353\3\2\1\353"+ "\1\2\1\353\3\2\2\353\2\2\6\3\1\0\1\2"+ "\1\43\1\3\3\0\4\3\7\0\11\3\1\354\20\3"+ "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ "\7\0\10\3\1\301\21\3\1\2\6\3\1\0\1\2"+ "\1\43\1\3\3\0\4\3\7\0\1\3\1\123\30\3"+ "\1\2\5\3\1\155\1\0\1\2\1\43\1\3\3\0"+ "\4\3\7\0\32\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\3\3\1\355\26\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\7\3\1\232\22\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\22\3\1\123\7\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\17\3\1\356\12\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\14\3\1\123\15\3\1\2"+ "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ "\10\3\1\350\21\3\1\2\6\3\1\0\1\2\1\43"+ "\1\3\3\0\4\3\7\0\7\3\1\314\22\3\2\2"+ "\4\3\1\2\1\0\3\2\3\0\2\2\2\3\7\0"+ "\1\3\1\2\1\3\1\2\1\3\10\2\1\3\3\2"+ "\1\3\1\2\1\3\3\2\2\3\2\2\6\3\1\0"+ "\1\2\1\43\1\3\3\0\4\3\7\0\12\3\1\357"+ "\17\3\1\2\5\3\1\231\1\0\1\2\1\43\1\3"+ "\3\0\4\3\7\0\32\3\1\2\6\3\1\0\1\2"+ "\1\43\1\3\3\0\4\3\7\0\23\3\1\173\6\3"+ "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ "\7\0\13\3\1\360\16\3\1\2\6\3\1\0\1\2"+ "\1\43\1\3\3\0\4\3\7\0\3\3\1\361\26\3"+ "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ "\7\0\4\3\1\326\25\3"; private static int [] zzUnpackTrans() { int [] result = new int[11628]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\1\0\5\1\1\11\1\1\1\11\2\1\1\11\1\1"+ "\2\11\37\1\1\11\106\1\1\0\173\1"; private static int [] zzUnpackAttribute() { int [] result = new int[241]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public TclTokenMaker() { } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = Token.NULL; s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public TclTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public TclTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 160) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 14: { addToken(Token.RESERVED_WORD); } case 15: break; case 2: { addToken(Token.IDENTIFIER); } case 16: break; case 13: { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } case 17: break; case 11: { addToken(Token.LITERAL_NUMBER_FLOAT); } case 18: break; case 4: { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; } case 19: break; case 6: { addToken(Token.WHITESPACE); } case 20: break; case 10: { addToken(Token.ERROR_NUMBER_FORMAT); } case 21: break; case 1: { addToken(Token.ERROR_IDENTIFIER); } case 22: break; case 12: { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } case 23: break; case 8: { addToken(Token.OPERATOR); } case 24: break; case 3: { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } case 25: break; case 7: { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } case 26: break; case 5: { addNullToken(); return firstToken; } case 27: break; case 9: { addToken(Token.SEPARATOR); } case 28: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case YYINITIAL: { addNullToken(); return firstToken; } case 242: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/UnixShellTokenMaker.java000066400000000000000000001143661257417003700325020ustar00rootroot00000000000000/* * 03/16/2004 * * UnixShellTokenMaker.java - Scanner for UNIX shell scripts. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * A token maker that turns text into a linked list of Tokens * for syntax highlighting UNIX shell scripts. * * @author Robert Futrell * @version 0.1 */ public class UnixShellTokenMaker extends AbstractTokenMaker { protected final String operators = "=|><&"; protected final String separators = "()[]"; protected final String separators2 = ".,;"; // Characters you don't want syntax highlighted but separate identifiers. protected final String shellVariables = "#-?$!*@_"; // Characters that are part of "$" shell variables; e.g., "$_". private int currentTokenStart; private int currentTokenType; /** * Constructor. */ public UnixShellTokenMaker() { super(); // Initializes tokensToHighlight. } /** * Checks the token to give it the exact ID it deserves before * being passed up to the super method. * * @param segment Segment to get text from. * @param start Start offset in segment of token. * @param end End offset in segment of token. * @param tokenType The token's type. * @param startOffset The offset in the document at which the token occurs. */ @Override public void addToken(Segment segment, int start, int end, int tokenType, int startOffset) { switch (tokenType) { // Since reserved words, functions, and data types are all passed into here // as "identifiers," we have to see what the token really is... case Token.IDENTIFIER: int value = wordsToHighlight.get(segment, start,end); if (value!=-1) tokenType = value; break; case Token.WHITESPACE: case Token.SEPARATOR: case Token.OPERATOR: case Token.LITERAL_NUMBER_DECIMAL_INT: case Token.LITERAL_STRING_DOUBLE_QUOTE: case Token.LITERAL_CHAR: case Token.LITERAL_BACKQUOTE: case Token.COMMENT_EOL: case Token.PREPROCESSOR: case Token.VARIABLE: break; default: tokenType = Token.IDENTIFIER; break; } super.addToken(segment, start, end, tokenType, startOffset); } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "#", null }; } /** * Returns whether tokens of the specified type should have "mark * occurrences" enabled for the current programming language. * * @param type The token type. * @return Whether tokens of this type should have "mark occurrences" * enabled. */ @Override public boolean getMarkOccurrencesOfTokenType(int type) { return type==Token.IDENTIFIER || type==Token.VARIABLE; } /** * Returns the words to highlight for UNIX shell scripts. * * @return A TokenMap containing the words to highlight for * UNIX shell scripts. * @see org.fife.ui.rsyntaxtextarea.AbstractTokenMaker#getWordsToHighlight */ @Override public TokenMap getWordsToHighlight() { TokenMap tokenMap = new TokenMap(); int reservedWord = Token.RESERVED_WORD; tokenMap.put("case", reservedWord); tokenMap.put("do", reservedWord); tokenMap.put("done", reservedWord); tokenMap.put("elif", reservedWord); tokenMap.put("else", reservedWord); tokenMap.put("esac", reservedWord); tokenMap.put("fi", reservedWord); tokenMap.put("for", reservedWord); tokenMap.put("if", reservedWord); tokenMap.put("in", reservedWord); tokenMap.put("select", reservedWord); tokenMap.put("then", reservedWord); tokenMap.put("until", reservedWord); tokenMap.put("while", reservedWord); int function = Token.FUNCTION; tokenMap.put("addbib", function); tokenMap.put("admin", function); tokenMap.put("alias", function); tokenMap.put("apropos", function); tokenMap.put("ar", function); tokenMap.put("at", function); tokenMap.put("awk", function); tokenMap.put("banner", function); tokenMap.put("basename", function); tokenMap.put("batch", function); tokenMap.put("bg", function); tokenMap.put("biff", function); tokenMap.put("bin-mail", function); tokenMap.put("binmail", function); tokenMap.put("break", function); tokenMap.put("cal", function); tokenMap.put("calendar", function); tokenMap.put("cancel", function); tokenMap.put("cat", function); tokenMap.put("cb", function); tokenMap.put("cc", function); tokenMap.put("cd", function); tokenMap.put("cdc", function); tokenMap.put("chdir", function); tokenMap.put("checkeq", function); tokenMap.put("checknr", function); tokenMap.put("chfn", function); tokenMap.put("chgrp", function); tokenMap.put("chmod", function); tokenMap.put("chown", function); tokenMap.put("chsh", function); tokenMap.put("clear", function); tokenMap.put("cmp", function); tokenMap.put("colcrt", function); tokenMap.put("comb", function); tokenMap.put("comm", function); tokenMap.put("command", function); tokenMap.put("compress", function); tokenMap.put("continue", function); tokenMap.put("cp", function); tokenMap.put("cpio", function); tokenMap.put("cpp", function); tokenMap.put("crontab", function); tokenMap.put("csh", function); tokenMap.put("ctags", function); tokenMap.put("cut", function); tokenMap.put("cvs", function); tokenMap.put("date", function); tokenMap.put("dbx", function); tokenMap.put("delta", function); tokenMap.put("deroff", function); tokenMap.put("df", function); tokenMap.put("diff", function); tokenMap.put("dtree", function); tokenMap.put("du", function); tokenMap.put("e", function); tokenMap.put("echo", function); tokenMap.put("ed", function); tokenMap.put("edit", function); tokenMap.put("enscript", function); tokenMap.put("eqn", function); tokenMap.put("error", function); tokenMap.put("eval", function); tokenMap.put("ex", function); tokenMap.put("exec", function); tokenMap.put("exit", function); tokenMap.put("expand", function); tokenMap.put("export", function); tokenMap.put("expr", function); tokenMap.put("false", function); tokenMap.put("fc", function); tokenMap.put("fg", function); tokenMap.put("file", function); tokenMap.put("find", function); tokenMap.put("finger", function); tokenMap.put("fmt", function); tokenMap.put("fmt_mail", function); tokenMap.put("fold", function); tokenMap.put("ftp", function); tokenMap.put("function", function); tokenMap.put("gcore", function); tokenMap.put("get", function); tokenMap.put("getopts", function); tokenMap.put("gprof", function); tokenMap.put("grep", function); tokenMap.put("groups", function); tokenMap.put("gunzip", function); tokenMap.put("gzip", function); tokenMap.put("hashcheck", function); tokenMap.put("hashmake", function); tokenMap.put("head", function); tokenMap.put("help", function); tokenMap.put("history", function); tokenMap.put("imake", function); tokenMap.put("indent", function); tokenMap.put("install", function); tokenMap.put("jobs", function); tokenMap.put("join", function); tokenMap.put("kill", function); tokenMap.put("last", function); tokenMap.put("ld", function); tokenMap.put("leave", function); tokenMap.put("less", function); tokenMap.put("let", function); tokenMap.put("lex", function); tokenMap.put("lint", function); tokenMap.put("ln", function); tokenMap.put("login", function); tokenMap.put("look", function); tokenMap.put("lookbib", function); tokenMap.put("lorder", function); tokenMap.put("lp", function); tokenMap.put("lpq", function); tokenMap.put("lpr", function); tokenMap.put("lprm", function); tokenMap.put("ls", function); tokenMap.put("mail", function); tokenMap.put("Mail", function); tokenMap.put("make", function); tokenMap.put("man", function); tokenMap.put("md", function); tokenMap.put("mesg", function); tokenMap.put("mkdir", function); tokenMap.put("mkstr", function); tokenMap.put("more", function); tokenMap.put("mount", function); tokenMap.put("mv", function); tokenMap.put("nawk", function); tokenMap.put("neqn", function); tokenMap.put("nice", function); tokenMap.put("nm", function); tokenMap.put("nroff", function); tokenMap.put("od", function); tokenMap.put("page", function); tokenMap.put("passwd", function); tokenMap.put("paste", function); tokenMap.put("pr", function); tokenMap.put("print", function); tokenMap.put("printf", function); tokenMap.put("printenv", function); tokenMap.put("prof", function); tokenMap.put("prs", function); tokenMap.put("prt", function); tokenMap.put("ps", function); tokenMap.put("ptx", function); tokenMap.put("pwd", function); tokenMap.put("quota", function); tokenMap.put("ranlib", function); tokenMap.put("rcp", function); tokenMap.put("rcs", function); tokenMap.put("rcsdiff", function); tokenMap.put("read", function); tokenMap.put("readonly", function); tokenMap.put("red", function); tokenMap.put("return", function); tokenMap.put("rev", function); tokenMap.put("rlogin", function); tokenMap.put("rm", function); tokenMap.put("rmdel", function); tokenMap.put("rmdir", function); tokenMap.put("roffbib", function); tokenMap.put("rsh", function); tokenMap.put("rup", function); tokenMap.put("ruptime", function); tokenMap.put("rusers", function); tokenMap.put("rwall", function); tokenMap.put("rwho", function); tokenMap.put("sact", function); tokenMap.put("sccs", function); tokenMap.put("sccsdiff", function); tokenMap.put("script", function); tokenMap.put("sed", function); tokenMap.put("set", function); tokenMap.put("setgroups", function); tokenMap.put("setsenv", function); tokenMap.put("sh", function); tokenMap.put("shift", function); tokenMap.put("size", function); tokenMap.put("sleep", function); tokenMap.put("sort", function); tokenMap.put("sortbib", function); tokenMap.put("spell", function); tokenMap.put("split", function); tokenMap.put("ssh", function); tokenMap.put("strings", function); tokenMap.put("strip", function); tokenMap.put("stty", function); tokenMap.put("su", function); tokenMap.put("sudo", function); tokenMap.put("symorder", function); tokenMap.put("tabs", function); tokenMap.put("tail", function); tokenMap.put("talk", function); tokenMap.put("tar", function); tokenMap.put("tbl", function); tokenMap.put("tee", function); tokenMap.put("telnet", function); tokenMap.put("test", function); tokenMap.put("tftp", function); tokenMap.put("time", function); tokenMap.put("times", function); tokenMap.put("touch", function); tokenMap.put("trap", function); tokenMap.put("troff", function); tokenMap.put("true", function); tokenMap.put("tsort", function); tokenMap.put("tty", function); tokenMap.put("type", function); tokenMap.put("typeset", function); tokenMap.put("ue", function); tokenMap.put("ul", function); tokenMap.put("ulimit", function); tokenMap.put("umask", function); tokenMap.put("unalias", function); tokenMap.put("uncompress", function); tokenMap.put("unexpand", function); tokenMap.put("unget", function); tokenMap.put("unifdef", function); tokenMap.put("uniq", function); tokenMap.put("units", function); tokenMap.put("unset", function); tokenMap.put("uptime", function); tokenMap.put("users", function); tokenMap.put("uucp", function); tokenMap.put("uudecode", function); tokenMap.put("uuencode", function); tokenMap.put("uulog", function); tokenMap.put("uuname", function); tokenMap.put("uusend", function); tokenMap.put("uux", function); tokenMap.put("vacation", function); tokenMap.put("val", function); tokenMap.put("vedit", function); tokenMap.put("vgrind", function); tokenMap.put("vi", function); tokenMap.put("view", function); tokenMap.put("vtroff", function); tokenMap.put("w", function); tokenMap.put("wait", function); tokenMap.put("wall", function); tokenMap.put("wc", function); tokenMap.put("wait", function); tokenMap.put("what", function); tokenMap.put("whatis", function); tokenMap.put("whence", function); tokenMap.put("whereis", function); tokenMap.put("which", function); tokenMap.put("who", function); tokenMap.put("whoami", function); tokenMap.put("write", function); tokenMap.put("xargs", function); tokenMap.put("xstr", function); tokenMap.put("yacc", function); tokenMap.put("yes", function); tokenMap.put("zcat", function); return tokenMap; } /** * Returns a list of tokens representing the given text. * * @param text The text to break into tokens. * @param startTokenType The token with which to start tokenizing. * @param startOffset The offset at which the line of tokens begins. * @return A linked list of tokens representing text. */ public Token getTokenList(Segment text, int startTokenType, final int startOffset) { resetTokenList(); char[] array = text.array; int offset = text.offset; int count = text.count; int end = offset + count; // See, when we find a token, its starting position is always of the form: // 'startOffset + (currentTokenStart-offset)'; but since startOffset and // offset are constant, tokens' starting positions become: // 'newStartOffset+currentTokenStart' for one less subraction operation. int newStartOffset = startOffset - offset; currentTokenStart = offset; currentTokenType = startTokenType; boolean backslash = false; //beginning: for (int i=offset; i call '`' an identifier.. addToken(text, currentTokenStart,i, Token.IDENTIFIER, newStartOffset+currentTokenStart); backslash = false; } else { currentTokenType = Token.LITERAL_BACKQUOTE; } break; case '"': if (backslash) { // Escaped double quote => call '"' an identifier.. addToken(text, currentTokenStart,i, Token.IDENTIFIER, newStartOffset+currentTokenStart); backslash = false; } else { currentTokenType = Token.LITERAL_STRING_DOUBLE_QUOTE; } break; case '\'': if (backslash) { // Escaped single quote => call '\'' an identifier. addToken(text, currentTokenStart,i, Token.IDENTIFIER, newStartOffset+currentTokenStart); backslash = false; } else { currentTokenType = Token.LITERAL_CHAR; } break; case '\\': addToken(text, currentTokenStart,i, Token.IDENTIFIER, newStartOffset+currentTokenStart); currentTokenType = Token.NULL; backslash = !backslash; break; case '$': if (backslash) { // Escaped dollar sign => call '$' an identifier.. addToken(text, currentTokenStart,i, Token.IDENTIFIER, newStartOffset+currentTokenStart); backslash = false; } else { currentTokenType = Token.VARIABLE; } break; case '#': backslash = false; currentTokenType = Token.COMMENT_EOL; break; default: if (RSyntaxUtilities.isDigit(c)) { currentTokenType = Token.LITERAL_NUMBER_DECIMAL_INT; break; } else if (RSyntaxUtilities.isLetter(c) || c=='/' || c=='_') { currentTokenType = Token.IDENTIFIER; break; } int indexOf = operators.indexOf(c,0); if (indexOf>-1) { addToken(text, currentTokenStart,i, Token.OPERATOR, newStartOffset+currentTokenStart); currentTokenType = Token.NULL; break; } indexOf = separators.indexOf(c,0); if (indexOf>-1) { addToken(text, currentTokenStart,i, Token.SEPARATOR, newStartOffset+currentTokenStart); currentTokenType = Token.NULL; break; } indexOf = separators2.indexOf(c,0); if (indexOf>-1) { addToken(text, currentTokenStart,i, Token.IDENTIFIER, newStartOffset+currentTokenStart); currentTokenType = Token.NULL; break; } else { currentTokenType = Token.IDENTIFIER; break; } } // End of switch (c). break; case Token.WHITESPACE: switch (c) { case ' ': case '\t': break; // Still whitespace. case '\\': addToken(text, currentTokenStart,i-1, Token.WHITESPACE, newStartOffset+currentTokenStart); addToken(text, i,i, Token.IDENTIFIER, newStartOffset+i); currentTokenType = Token.NULL; backslash = true; // Previous char whitespace => this must be first backslash. break; case '`': // Don't need to worry about backslashes as previous char is space. addToken(text, currentTokenStart,i-1, Token.WHITESPACE, newStartOffset+currentTokenStart); currentTokenStart = i; currentTokenType = Token.LITERAL_BACKQUOTE; backslash = false; break; case '"': // Don't need to worry about backslashes as previous char is space. addToken(text, currentTokenStart,i-1, Token.WHITESPACE, newStartOffset+currentTokenStart); currentTokenStart = i; currentTokenType = Token.LITERAL_STRING_DOUBLE_QUOTE; backslash = false; break; case '\'': // Don't need to worry about backslashes as previous char is space. addToken(text, currentTokenStart,i-1, Token.WHITESPACE, newStartOffset+currentTokenStart); currentTokenStart = i; currentTokenType = Token.LITERAL_CHAR; backslash = false; break; case '$': // Don't need to worry about backslashes as previous char is space. addToken(text, currentTokenStart,i-1, Token.WHITESPACE, newStartOffset+currentTokenStart); currentTokenStart = i; currentTokenType = Token.VARIABLE; backslash = false; break; case '#': addToken(text, currentTokenStart,i-1, Token.WHITESPACE, newStartOffset+currentTokenStart); currentTokenStart = i; currentTokenType = Token.COMMENT_EOL; break; default: // Add the whitespace token and start anew. addToken(text, currentTokenStart,i-1, Token.WHITESPACE, newStartOffset+currentTokenStart); currentTokenStart = i; if (RSyntaxUtilities.isDigit(c)) { currentTokenType = Token.LITERAL_NUMBER_DECIMAL_INT; break; } else if (RSyntaxUtilities.isLetter(c) || c=='/' || c=='_') { currentTokenType = Token.IDENTIFIER; break; } int indexOf = operators.indexOf(c,0); if (indexOf>-1) { addToken(text, i,i, Token.OPERATOR, newStartOffset+i); currentTokenType = Token.NULL; break; } indexOf = separators.indexOf(c,0); if (indexOf>-1) { addToken(text, i,i, Token.SEPARATOR, newStartOffset+i); currentTokenType = Token.NULL; break; } indexOf = separators2.indexOf(c,0); if (indexOf>-1) { addToken(text, i,i, Token.IDENTIFIER, newStartOffset+i); currentTokenType = Token.NULL; break; } else { currentTokenType = Token.IDENTIFIER; } } // End of switch (c). break; default: // Should never happen case Token.IDENTIFIER: switch (c) { case ' ': case '\t': addToken(text, currentTokenStart,i-1, Token.IDENTIFIER, newStartOffset+currentTokenStart); currentTokenStart = i; currentTokenType = Token.WHITESPACE; break; case '/': // Special-case to colorize commands like "echo" in "/bin/echo" addToken(text, currentTokenStart,i, Token.IDENTIFIER, newStartOffset+currentTokenStart); currentTokenStart = i+1; currentTokenType = Token.NULL; break; case '`': // Don't need to worry about backslashes as previous char is space. addToken(text, currentTokenStart,i-1, Token.IDENTIFIER, newStartOffset+currentTokenStart); currentTokenStart = i; currentTokenType = Token.LITERAL_BACKQUOTE; backslash = false; break; case '"': // Don't need to worry about backslashes as previous char is non-backslash. addToken(text, currentTokenStart,i-1, Token.IDENTIFIER, newStartOffset+currentTokenStart); currentTokenStart = i; currentTokenType = Token.LITERAL_STRING_DOUBLE_QUOTE; backslash = false; break; case '\'': // Don't need to worry about backslashes as previous char is non-backslash. addToken(text, currentTokenStart,i-1, Token.IDENTIFIER, newStartOffset+currentTokenStart); currentTokenStart = i; currentTokenType = Token.LITERAL_CHAR; backslash = false; break; case '\\': addToken(text, currentTokenStart,i-1, Token.IDENTIFIER, newStartOffset+currentTokenStart); addToken(text, i,i, Token.IDENTIFIER, newStartOffset+i); currentTokenType = Token.NULL; backslash = true; break; case '$': // Don't need to worry about backslashes as previous char is non-backslash. addToken(text, currentTokenStart,i-1, Token.IDENTIFIER, newStartOffset+currentTokenStart); currentTokenStart = i; currentTokenType = Token.VARIABLE; backslash = false; break; case '=': // Special case here; when you have "identifier=" in shell, "identifier" is a variable. addToken(text, currentTokenStart,i-1, Token.VARIABLE, newStartOffset+currentTokenStart); addToken(text, i,i, Token.OPERATOR, newStartOffset+i); currentTokenType = Token.NULL; break; default: if (RSyntaxUtilities.isLetterOrDigit(c) || c=='/' || c=='_') { break; // Still an identifier of some type. } int indexOf = operators.indexOf(c); if (indexOf>-1) { addToken(text, currentTokenStart,i-1, Token.IDENTIFIER, newStartOffset+currentTokenStart); addToken(text, i,i, Token.OPERATOR, newStartOffset+i); currentTokenType = Token.NULL; break; } indexOf = separators.indexOf(c,0); if (indexOf>-1) { addToken(text, currentTokenStart,i-1, Token.IDENTIFIER, newStartOffset+currentTokenStart); addToken(text, i,i, Token.SEPARATOR, newStartOffset+i); currentTokenType = Token.NULL; break; } indexOf = separators2.indexOf(c,0); if (indexOf>-1) { addToken(text, currentTokenStart,i-1, Token.IDENTIFIER, newStartOffset+currentTokenStart); addToken(text, i,i, Token.IDENTIFIER, newStartOffset+i); currentTokenType = Token.NULL; break; } // Otherwise, we're still an identifier (?). } // End of switch (c). break; case Token.LITERAL_NUMBER_DECIMAL_INT: switch (c) { case ' ': case '\t': addToken(text, currentTokenStart,i-1, Token.LITERAL_NUMBER_DECIMAL_INT, newStartOffset+currentTokenStart); currentTokenStart = i; currentTokenType = Token.WHITESPACE; break; case '`': // Don't need to worry about backslashes as previous char is space. addToken(text, currentTokenStart,i-1, Token.LITERAL_NUMBER_DECIMAL_INT, newStartOffset+currentTokenStart); currentTokenStart = i; currentTokenType = Token.LITERAL_BACKQUOTE; backslash = false; break; case '"': // Don't need to worry about backslashes as previous char is non-backslash. addToken(text, currentTokenStart,i-1, Token.LITERAL_NUMBER_DECIMAL_INT, newStartOffset+currentTokenStart); currentTokenStart = i; currentTokenType = Token.LITERAL_STRING_DOUBLE_QUOTE; backslash = false; break; case '\'': // Don't need to worry about backslashes as previous char is non-backslash. addToken(text, currentTokenStart,i-1, Token.LITERAL_NUMBER_DECIMAL_INT, newStartOffset+currentTokenStart); currentTokenStart = i; currentTokenType = Token.LITERAL_CHAR; backslash = false; break; case '$': // Don't need to worry about backslashes as previous char is non-backslash. addToken(text, currentTokenStart,i-1, Token.LITERAL_NUMBER_DECIMAL_INT, newStartOffset+currentTokenStart); currentTokenStart = i; currentTokenType = Token.VARIABLE; backslash = false; break; case '\\': addToken(text, currentTokenStart,i-1, Token.LITERAL_NUMBER_DECIMAL_INT, newStartOffset+currentTokenStart); addToken(text, i,i, Token.IDENTIFIER, newStartOffset+i); currentTokenType = Token.NULL; backslash = true; break; default: if (RSyntaxUtilities.isDigit(c)) { break; // Still a literal number. } int indexOf = operators.indexOf(c); if (indexOf>-1) { addToken(text, currentTokenStart,i-1, Token.LITERAL_NUMBER_DECIMAL_INT, newStartOffset+currentTokenStart); addToken(text, i,i, Token.OPERATOR, newStartOffset+i); currentTokenType = Token.NULL; break; } indexOf = separators.indexOf(c); if (indexOf>-1) { addToken(text, currentTokenStart,i-1, Token.LITERAL_NUMBER_DECIMAL_INT, newStartOffset+currentTokenStart); addToken(text, i,i, Token.SEPARATOR, newStartOffset+i); currentTokenType = Token.NULL; break; } indexOf = separators2.indexOf(c); if (indexOf>-1) { addToken(text, currentTokenStart,i-1, Token.LITERAL_NUMBER_DECIMAL_INT, newStartOffset+currentTokenStart); addToken(text, i,i, Token.IDENTIFIER, newStartOffset+i); currentTokenType = Token.NULL; break; } // Otherwise, remember this was a number and start over. addToken(text, currentTokenStart,i-1, Token.LITERAL_NUMBER_DECIMAL_INT, newStartOffset+currentTokenStart); i--; currentTokenType = Token.NULL; } // End of switch (c). break; case Token.VARIABLE: // Note that we first arrive here AFTER the '$' character. // First check if the variable name is enclosed in '{' and '}' characters. if (c=='{') { while (++iJFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated VisualBasicTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 1.0 */ %% %public %class VisualBasicTokenMaker %extends AbstractJFlexTokenMaker %unicode %ignorecase %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public VisualBasicTokenMaker() { } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addHyperlinkToken(int, int, int) */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, false); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. * @param hyperlink Whether this token is a hyperlink. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset, boolean hyperlink) { super.addToken(array, start,end, tokenType, startOffset, hyperlink); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "'", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = YYINITIAL; s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} Letter = [A-Za-z] LetterOrUnderscore = ({Letter}|"_") NonzeroDigit = [1-9] Digit = ("0"|{NonzeroDigit}) HexDigit = ({Digit}|[A-Fa-f]) NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\") IdentifierStart = ({LetterOrUnderscore}|"$") IdentifierPart = ({IdentifierStart}|{Digit}) LineTerminator = (\n) WhiteSpace = ([ \t\f]) UnclosedStringLiteral = ([\"][^\"]*) StringLiteral = ({UnclosedStringLiteral}[\"]) LineCommentBegin = "'" NumTypeSuffix = (([DRI\&SF]|"UI"|"UL"|"US")?) IntegerLiteral = ({Digit}+{NumTypeSuffix}) HexLiteral = ("&h"{HexDigit}+{NumTypeSuffix}) FloatHelper = ([eE][+-]?{Digit}+{NumTypeSuffix}) FloatLiteral1 = ({Digit}+"."({NumTypeSuffix}|{FloatHelper}|{Digit}+({NumTypeSuffix}|{FloatHelper}))) FloatLiteral2 = ("."{Digit}+({NumTypeSuffix}|{FloatHelper})) FloatLiteral3 = ({Digit}+({NumTypeSuffix}|{FloatHelper})) FloatLiteral = ({FloatLiteral1}|{FloatLiteral2}|{FloatLiteral3}) ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+) BooleanLiteral = ("true"|"false") Separator = ([\(\)]) Separator2 = ([\;,.]) Operator = ("&"|"&="|"*"|"*="|"+"|"+="|"="|"-"|"-="|"<<"|"<<="|">>"|">>="|"/"|"/="|"\\"|"\\="|"^"|"^=") Identifier = ({IdentifierStart}{IdentifierPart}*) ErrorIdentifier = ({NonSeparator}+) URLGenDelim = ([:\/\?#\[\]@]) URLSubDelim = ([\!\$&'\(\)\*\+,;=]) URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) URLCharacters = ({URLCharacter}*) URLEndCharacter = ([\/\$]|{Letter}|{Digit}) URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) %state EOL_COMMENT %% { /* Keywords */ "AddHandler" | "AddressOf" | "Alias" | "And" | "AndAlso" | "As" | "ByRef" | "ByVal" | "Call" | "Case" | "Catch" | "CBool" | "CByte" | "CChar" | "CDate" | "CDbl" | "CDec" | "CInt" | "Class" | "CLng" | "CObj" | "Const" | "Continue" | "CSByte" | "CShort" | "CSng" | "CStr" | "CType" | "CUInt" | "CULng" | "CUShort" | "Declare" | "Default" | "Delegate" | "Dim" | "DirectCast" | "Do" | "Each" | "Else" | "ElseIf" | "End" | "EndIf" | "Enum" | "Erase" | "Error" | "Event" | "Exit" | "Finally" | "For" | "Friend" | "Function" | "Get" | "GetType" | "GetXMLNamespace" | "Global" | "GoSub" | "GoTo" | "Handles" | "If" | "If" | "Implements" | "Imports" | "In" | "Inherits" | "Interface" | "Is" | "IsNot" | "Let" | "Lib" | "Like" | "Loop" | "Me" | "Mod" | "Module" | "Module Statement" | "MustInherit" | "MustOverride" | "MyBase" | "MyClass" | "Namespace" | "Narrowing" | "New" | "New" | "Next" | "Not" | "Nothing" | "NotInheritable" | "NotOverridable" | "Of" | "On" | "Operator" | "Option" | "Optional" | "Or" | "OrElse" | "Out" | "Overloads" | "Overridable" | "Overrides" | "ParamArray" | "Partial" | "Private" | "Property" | "Protected" | "Public" | "RaiseEvent" | "ReadOnly" | "ReDim" | "REM" | "RemoveHandler" | "Resume" | "Select" | "Set" | "Shadows" | "Shared" | "Static" | "Step" | "Stop" | "Structure" | "Sub" | "SyncLock" | "Then" | "Throw" | "To" | "Try" | "TryCast" | "TypeOf" | "Using" | "Variant" | "Wend" | "When" | "While" | "Widening" | "With" | "WithEvents" | "WriteOnly" | "Xor" { addToken(Token.RESERVED_WORD); } "Return" { addToken(Token.RESERVED_WORD_2); } /* Data types. */ "Boolean" | "Byte" | "Char" | "Date" | "Decimal" | "Double" | "Integer" | "Long" | "Object" | "SByte" | "Short" | "Single" | "String" | "UInteger" | "ULong" | "UShort" { addToken(Token.DATA_TYPE); } {BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } {LineTerminator} { addNullToken(); return firstToken; } {Identifier} { addToken(Token.IDENTIFIER); } {WhiteSpace}+ { addToken(Token.WHITESPACE); } {StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } {UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } {LineCommentBegin} { start = zzMarkedPos-1; yybegin(EOL_COMMENT); } {Separator} { addToken(Token.SEPARATOR); } {Separator2} { addToken(Token.IDENTIFIER); } {Operator} { addToken(Token.OPERATOR); } {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } {FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } {ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } /* Ended with a line not in a string or comment. */ <> { addNullToken(); return firstToken; } /* Catch any other (unhandled) characters. */ . { addToken(Token.IDENTIFIER); } } { [^hwf\n]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } [hwf] {} \n { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/VisualBasicTokenMaker.java000066400000000000000000001723101257417003700327650ustar00rootroot00000000000000/* The following code was generated by JFlex 1.4.1 on 3/24/13 12:59 AM */ /* * 03/24/2013 * * VisualBasicTokenMaker.java - Scanner for Visual Basic * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for Visual Basic. * * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated VisualBasicTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 1.0 */ public class VisualBasicTokenMaker extends AbstractJFlexTokenMaker { /** This character denotes the end of file */ public static final int YYEOF = -1; /** lexical states */ public static final int EOL_COMMENT = 1; public static final int YYINITIAL = 0; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\11\1\10\1\0\1\11\1\5\22\0\1\64\1\37\1\12"+ "\1\6\1\1\1\37\1\16\1\13\2\36\1\41\1\27\1\37\1\27"+ "\1\30\1\44\1\3\11\3\1\47\1\37\1\42\1\40\1\43\1\37"+ "\1\6\1\35\1\54\1\4\1\15\1\26\1\34\1\57\1\25\1\21"+ "\1\60\1\63\1\22\1\61\1\52\1\53\1\46\1\1\1\14\1\24"+ "\1\31\1\17\1\56\1\50\1\62\1\55\1\1\1\37\1\7\1\37"+ "\1\45\1\2\1\0\1\35\1\54\1\4\1\51\1\26\1\33\1\57"+ "\1\65\1\20\1\60\1\63\1\22\1\61\1\52\1\53\1\46\1\1"+ "\1\32\1\23\1\31\1\17\1\56\1\66\1\62\1\55\1\1\3\5"+ "\1\37\uff81\0"; /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\2\0\1\1\1\2\1\3\2\2\1\4\1\5\1\6"+ "\1\7\1\10\2\2\1\4\6\2\1\4\4\2\1\11"+ "\1\4\13\2\1\12\1\13\6\12\1\14\1\3\2\14"+ "\1\15\13\2\1\16\5\2\1\17\1\0\3\2\3\17"+ "\47\2\1\17\14\2\1\12\2\0\3\12\2\0\1\15"+ "\1\0\1\15\1\14\24\2\1\17\7\2\1\20\24\2"+ "\1\17\2\2\1\17\11\2\1\17\13\2\1\17\12\2"+ "\1\17\3\2\1\17\2\2\1\12\2\0\3\12\2\0"+ "\2\2\1\21\14\2\1\20\1\14\16\2\1\22\17\2"+ "\1\17\17\2\1\12\1\0\2\12\1\23\1\0\52\2"+ "\1\0\1\12\1\0\1\2\1\24\21\2\1\17\6\2"+ "\1\17\14\2\1\0\10\2\1\0\3\2\1\0\2\2"+ "\6\0\1\17"; private static int [] zzUnpackAction() { int [] result = new int[417]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\67\0\156\0\245\0\334\0\u0113\0\u014a\0\u0181"+ "\0\u014a\0\u01b8\0\u01ef\0\u014a\0\u0226\0\u025d\0\u0294\0\u02cb"+ "\0\u0302\0\u0339\0\u0370\0\u03a7\0\u03de\0\u0415\0\u044c\0\u0483"+ "\0\u04ba\0\u04f1\0\u014a\0\u014a\0\u0528\0\u055f\0\u0596\0\u05cd"+ "\0\u0604\0\u063b\0\u0672\0\u06a9\0\u06e0\0\u0717\0\u074e\0\u0785"+ "\0\u014a\0\u07bc\0\u07f3\0\u082a\0\u0861\0\u0898\0\u08cf\0\u0906"+ "\0\u0906\0\u093d\0\u0974\0\u09ab\0\u09e2\0\u0a19\0\u0a50\0\u0a87"+ "\0\u0abe\0\u0af5\0\u0b2c\0\u0b63\0\u0b9a\0\u0bd1\0\u0c08\0\u014a"+ "\0\u0c3f\0\u0c76\0\u0cad\0\u0ce4\0\u0d1b\0\u0d52\0\u0d89\0\u0dc0"+ "\0\u0df7\0\u0e2e\0\u0e65\0\245\0\u0e9c\0\u0ed3\0\u0f0a\0\u0f41"+ "\0\u0f78\0\u0faf\0\u0fe6\0\u101d\0\u1054\0\u108b\0\u10c2\0\u10f9"+ "\0\u1130\0\u1167\0\u119e\0\u11d5\0\u120c\0\u1243\0\u127a\0\u12b1"+ "\0\u12e8\0\u131f\0\u1356\0\u138d\0\u13c4\0\u13fb\0\u1432\0\u1469"+ "\0\u14a0\0\u14d7\0\u150e\0\u1545\0\u157c\0\u15b3\0\u15ea\0\u1621"+ "\0\u1658\0\u168f\0\u16c6\0\u16fd\0\u1734\0\u176b\0\u17a2\0\u17d9"+ "\0\u1810\0\u1847\0\u187e\0\u18b5\0\u18ec\0\u1923\0\u195a\0\u1991"+ "\0\u19c8\0\u19ff\0\u1a36\0\u1a6d\0\u1aa4\0\u1adb\0\u1b12\0\u1b49"+ "\0\u1b80\0\u1bb7\0\u1bee\0\u0906\0\u1c25\0\u1c5c\0\u1c93\0\u1cca"+ "\0\u1d01\0\u1d38\0\u1d6f\0\u1da6\0\u1ddd\0\u1e14\0\u1e4b\0\u1e82"+ "\0\u1eb9\0\u1ef0\0\u1f27\0\u1f5e\0\u1f95\0\u1fcc\0\u2003\0\u203a"+ "\0\u2071\0\u20a8\0\u20df\0\u2116\0\u214d\0\u2184\0\u21bb\0\u21f2"+ "\0\u2229\0\u2260\0\u2297\0\u22ce\0\u2305\0\u233c\0\u2373\0\u23aa"+ "\0\u23e1\0\u2418\0\u244f\0\u2486\0\u24bd\0\u24f4\0\u252b\0\u2562"+ "\0\u2599\0\u25d0\0\u2607\0\u263e\0\u2675\0\u26ac\0\u26e3\0\u271a"+ "\0\u2751\0\u2788\0\u27bf\0\u27f6\0\u282d\0\u2864\0\u289b\0\u28d2"+ "\0\u2909\0\u2940\0\u2977\0\u29ae\0\u29e5\0\u2a1c\0\u2a53\0\u2a8a"+ "\0\u2ac1\0\u2af8\0\u2b2f\0\u2b66\0\u2b9d\0\u2bd4\0\u2c0b\0\u2c42"+ "\0\u2c79\0\u2cb0\0\u2ce7\0\u2d1e\0\u2d55\0\u2d8c\0\u2dc3\0\u2dfa"+ "\0\u2e31\0\u2e68\0\u2e9f\0\u2ed6\0\u2f0d\0\u2f44\0\u2f7b\0\u2fb2"+ "\0\u2fe9\0\u3020\0\u3057\0\u308e\0\u30c5\0\u30fc\0\u3133\0\u316a"+ "\0\u31a1\0\u31d8\0\u320f\0\245\0\u3246\0\u327d\0\u32b4\0\u32eb"+ "\0\u3322\0\u3359\0\u3390\0\u33c7\0\u33fe\0\u3435\0\u346c\0\u34a3"+ "\0\u0906\0\u34da\0\u3511\0\u3548\0\u357f\0\u35b6\0\u35ed\0\u3624"+ "\0\u365b\0\u3692\0\u36c9\0\u3700\0\u3737\0\u376e\0\u37a5\0\u37dc"+ "\0\245\0\u3813\0\u384a\0\u3881\0\u38b8\0\u38ef\0\u3926\0\u395d"+ "\0\u3994\0\u39cb\0\u3a02\0\u3a39\0\u3a70\0\u3aa7\0\u3ade\0\u3b15"+ "\0\u3b4c\0\u3b83\0\u3bba\0\u3bf1\0\u3c28\0\u3c5f\0\u3c96\0\u3ccd"+ "\0\u3d04\0\u3d3b\0\u3d72\0\u3da9\0\u3de0\0\u3e17\0\u3e4e\0\u3e85"+ "\0\u3ebc\0\u3ef3\0\u3f2a\0\u3f61\0\u3f98\0\u3fcf\0\u4006\0\u403d"+ "\0\u4074\0\u40ab\0\u40e2\0\u4119\0\u4150\0\u4187\0\u41be\0\u41f5"+ "\0\u422c\0\u4263\0\u429a\0\u42d1\0\u4308\0\u433f\0\u4376\0\u43ad"+ "\0\u43e4\0\u441b\0\u4452\0\u4489\0\u44c0\0\u44f7\0\u452e\0\u4565"+ "\0\u459c\0\u45d3\0\u460a\0\u4641\0\u4678\0\u46af\0\u46e6\0\u471d"+ "\0\u4754\0\u478b\0\u47c2\0\u47f9\0\u4830\0\u4867\0\u489e\0\u48d5"+ "\0\u490c\0\u4943\0\u3f98\0\u497a\0\245\0\u49b1\0\u49e8\0\u2788"+ "\0\u4a1f\0\u4a56\0\u4a8d\0\u4ac4\0\u4afb\0\u4b32\0\u4b69\0\u4ba0"+ "\0\u4bd7\0\u4c0e\0\u4c45\0\u4c7c\0\u4cb3\0\u4cea\0\u2dfa\0\u4d21"+ "\0\u4d58\0\u4d8f\0\u4dc6\0\u4dfd\0\u4e34\0\u4e6b\0\u4ea2\0\u4ed9"+ "\0\u4f10\0\u4f47\0\u4f7e\0\u4fb5\0\u4fec\0\u5023\0\u505a\0\u5091"+ "\0\u50c8\0\u50ff\0\u5136\0\u516d\0\u51a4\0\u51db\0\u5212\0\u5249"+ "\0\u5280\0\u52b7\0\u52ee\0\u5325\0\u535c\0\u5393\0\u53ca\0\u5401"+ "\0\u5438\0\u546f\0\u54a6\0\u54dd\0\u5514\0\u554b\0\u5582\0\u55b9"+ "\0\u014a"; private static int [] zzUnpackRowMap() { int [] result = new int[417]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = "\1\3\2\4\1\5\1\6\1\7\1\3\1\10\1\11"+ "\1\12\1\13\1\14\1\15\1\16\1\17\1\20\2\21"+ "\1\22\2\23\1\24\1\25\1\26\1\27\1\30\1\15"+ "\2\31\1\32\1\33\1\7\1\34\1\26\1\35\1\36"+ "\2\26\1\37\1\7\1\40\1\16\1\41\1\42\1\43"+ "\1\4\1\44\1\45\1\4\1\46\1\47\1\4\1\12"+ "\1\24\1\40\10\50\1\51\14\50\1\52\5\50\1\53"+ "\1\54\13\50\1\55\14\50\1\56\1\57\5\3\1\0"+ "\2\3\4\0\2\3\1\0\10\3\2\0\5\3\10\0"+ "\1\3\1\0\14\3\1\0\3\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\10\4\2\0\5\4\10\0\1\4"+ "\1\0\14\4\1\0\2\4\3\60\1\5\1\60\1\0"+ "\2\60\4\0\3\61\1\62\1\60\1\61\2\60\1\61"+ "\1\60\1\63\1\0\1\64\3\60\1\61\1\60\10\0"+ "\1\60\1\0\14\60\1\0\2\60\1\3\3\4\1\65"+ "\1\0\2\3\4\0\1\4\1\66\1\0\1\67\2\70"+ "\1\71\2\72\1\73\1\4\2\0\1\74\3\4\1\75"+ "\10\0\1\4\1\0\1\4\1\66\1\4\1\76\1\77"+ "\7\4\1\0\1\73\1\4\67\0\5\3\1\0\2\3"+ "\4\0\2\3\1\0\10\3\2\0\5\3\2\0\1\34"+ "\5\0\1\3\1\0\14\3\1\0\2\3\11\0\1\12"+ "\52\0\1\12\2\0\12\13\1\100\54\13\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\7\4\1\101\2\0"+ "\4\4\1\102\10\0\1\4\1\0\14\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\1\4"+ "\2\103\4\4\1\104\2\0\4\4\1\105\10\0\1\4"+ "\1\0\3\4\1\106\10\4\1\0\2\4\25\0\1\107"+ "\12\0\1\34\24\0\1\107\1\0\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\1\4\2\110\1\111\2\112"+ "\2\4\2\0\5\4\10\0\1\4\1\0\14\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\4\4\2\113\2\4\2\0\2\4\2\114\1\4\10\0"+ "\1\4\1\0\2\4\1\115\6\4\1\116\2\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\1\4\2\117\4\4\1\120\2\0\5\4\10\0\1\4"+ "\1\0\3\4\1\121\10\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\1\122\2\123\3\4"+ "\1\124\1\125\2\0\1\126\4\4\10\0\1\4\1\0"+ "\4\4\1\127\1\130\6\4\1\0\1\124\1\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\10\4\2\0"+ "\4\4\1\131\10\0\1\4\1\0\14\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\1\132\1\4\1\0"+ "\3\4\1\133\4\4\2\0\1\4\1\132\2\4\1\134"+ "\10\0\1\4\1\0\2\4\1\135\3\4\1\136\3\4"+ "\1\137\1\4\1\0\2\4\40\0\1\34\31\0\1\64"+ "\63\0\1\3\4\4\1\0\2\3\4\0\1\140\1\4"+ "\1\0\6\4\1\141\1\4\2\0\1\4\1\140\3\4"+ "\10\0\1\4\1\0\3\4\1\114\1\4\1\142\6\4"+ "\1\0\1\141\1\4\1\3\4\4\1\0\2\3\4\0"+ "\1\143\1\4\1\0\1\144\2\145\5\4\2\0\1\4"+ "\1\143\2\4\1\146\10\0\1\4\1\0\3\4\1\147"+ "\10\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\1\4\1\150\1\0\3\4\1\151\2\114\2\4\2\0"+ "\5\4\10\0\1\4\1\0\1\4\1\150\1\152\11\4"+ "\1\0\2\4\42\0\1\26\67\0\1\26\23\0\1\3"+ "\4\4\1\0\2\3\4\0\1\153\1\4\1\0\1\154"+ "\7\4\2\0\1\4\1\153\2\4\1\155\10\0\1\4"+ "\1\0\14\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\1\156\1\4\1\0\1\4\2\157\3\4\1\160"+ "\1\161\2\0\1\4\1\156\3\4\10\0\1\4\1\0"+ "\14\4\1\0\1\160\1\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\7\4\1\162\2\0\4\4\1\163"+ "\10\0\1\4\1\0\3\4\1\164\10\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\1\165\1\4\1\0"+ "\1\120\7\4\2\0\1\4\1\165\2\114\1\4\10\0"+ "\1\166\1\0\2\4\1\114\1\4\1\167\1\4\1\170"+ "\5\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\10\4\2\0\5\4\10\0\1\4\1\0"+ "\3\4\1\171\1\4\1\172\6\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\10\4\2\0"+ "\4\4\1\173\10\0\1\4\1\0\14\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\3\4"+ "\1\174\3\4\1\175\2\0\5\4\10\0\1\4\1\0"+ "\3\4\1\176\10\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\1\177\6\4\1\114\2\0"+ "\5\4\10\0\1\4\1\0\3\4\1\200\1\4\1\201"+ "\6\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\10\4\2\0\5\4\10\0\1\4\1\0"+ "\3\4\1\147\10\4\1\0\2\4\10\50\1\0\22\50"+ "\1\0\31\50\2\0\10\50\1\0\20\50\1\202\1\50"+ "\1\0\31\50\22\0\2\203\7\0\1\204\35\0\10\50"+ "\1\0\7\50\2\205\7\50\1\206\1\50\1\0\31\50"+ "\2\0\10\50\1\0\22\50\1\0\14\50\1\207\14\50"+ "\1\0\1\210\31\0\1\211\105\0\1\210\15\0\1\210"+ "\5\60\1\0\2\60\4\0\2\60\1\0\10\60\2\0"+ "\5\60\10\0\1\60\1\0\14\60\1\0\7\60\1\0"+ "\2\60\4\0\2\60\1\0\1\60\5\61\2\60\2\0"+ "\5\60\10\0\1\60\1\0\14\60\1\0\5\60\1\212"+ "\1\60\1\0\2\60\4\0\2\60\1\0\10\60\1\213"+ "\1\0\5\60\10\0\1\60\1\0\14\60\1\0\5\60"+ "\1\64\1\60\1\0\2\60\4\0\3\214\1\215\1\60"+ "\1\214\2\60\1\214\1\60\1\63\2\0\3\60\1\214"+ "\1\60\10\0\1\60\1\0\14\60\1\0\2\60\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\6\4\1\216"+ "\1\4\2\0\5\4\10\0\1\4\1\0\14\4\1\0"+ "\1\216\1\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\7\4\1\217\2\0\4\4\1\220\10\0\1\4"+ "\1\0\4\4\1\221\7\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\1\4\2\70\1\222"+ "\2\223\2\4\2\0\5\4\10\0\1\4\1\0\14\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\10\4\2\0\5\4\10\0\1\4\1\0\2\4"+ "\1\120\11\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\10\4\2\0\4\4\1\224\10\0"+ "\1\4\1\0\2\4\1\225\11\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\6\4\1\226"+ "\1\4\2\0\1\147\4\4\10\0\1\4\1\0\2\4"+ "\1\225\1\4\1\227\7\4\1\0\1\226\1\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\10\4\2\0"+ "\4\4\1\230\10\0\1\4\1\0\14\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\10\4"+ "\2\0\5\4\10\0\1\4\1\0\5\4\1\231\6\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\3\4\1\221\2\232\2\4\2\0\1\134\4\4"+ "\10\0\1\4\1\0\14\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\10\4\2\0\5\4"+ "\10\0\1\4\1\0\2\4\1\233\1\4\1\234\7\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\10\4\2\0\5\4\10\0\1\4\1\0\3\4"+ "\1\235\1\4\1\220\6\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\1\4\1\236\1\0\4\4\2\237"+ "\2\4\2\0\1\240\3\4\1\241\10\0\1\4\1\0"+ "\1\4\1\236\7\4\1\242\2\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\1\4\2\243"+ "\5\4\2\0\5\4\10\0\1\4\1\0\14\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\1\244\1\4"+ "\1\0\10\4\2\0\1\4\1\244\3\4\10\0\1\4"+ "\1\0\11\4\1\114\2\4\1\0\2\4\1\3\3\4"+ "\1\245\1\0\2\3\4\0\2\4\1\0\3\4\1\246"+ "\4\4\2\0\2\4\2\247\1\4\10\0\1\4\1\0"+ "\14\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\10\4\2\0\1\250\4\4\10\0\1\4"+ "\1\0\14\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\1\251\7\4\2\0\5\4\10\0"+ "\1\4\1\0\14\4\1\0\2\4\3\0\2\252\10\0"+ "\1\252\10\0\1\252\4\0\3\252\13\0\1\252\2\0"+ "\1\252\12\0\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\10\4\2\0\5\4\10\0\1\4\1\0\2\4"+ "\1\253\11\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\10\4\2\0\5\4\10\0\1\4"+ "\1\0\3\4\1\254\10\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\1\4\2\222\3\4"+ "\1\255\1\4\2\0\5\4\10\0\1\4\1\0\14\4"+ "\1\0\1\255\1\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\10\4\2\0\5\4\10\0\1\4\1\0"+ "\2\4\1\256\11\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\6\4\1\257\1\4\2\0"+ "\1\260\4\4\10\0\1\4\1\0\14\4\1\0\1\257"+ "\1\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\10\4\2\0\5\4\10\0\1\261\1\0\14\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\10\4\2\0\5\4\10\0\1\4\1\0\4\4\1\114"+ "\6\4\1\232\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\10\4\2\0\1\114\4\4\10\0"+ "\1\4\1\0\14\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\10\4\2\0\5\4\10\0"+ "\1\4\1\0\2\4\1\262\1\263\10\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\10\4"+ "\2\0\5\4\10\0\1\4\1\0\4\4\1\114\7\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\10\4\2\0\5\4\10\0\1\4\1\0\2\4"+ "\1\264\11\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\10\4\2\0\4\4\1\265\10\0"+ "\1\4\1\0\3\4\1\266\10\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\3\4\1\267"+ "\4\4\2\0\1\114\4\4\10\0\1\4\1\0\14\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\1\270"+ "\1\4\1\0\7\4\1\263\2\0\1\4\1\270\2\4"+ "\1\271\10\0\1\4\1\0\3\4\1\263\10\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\10\4\2\0\5\4\10\0\1\4\1\0\5\4\1\105"+ "\6\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\10\4\2\0\5\4\10\0\1\4\1\0"+ "\2\4\1\272\11\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\10\4\2\0\5\4\10\0"+ "\1\4\1\0\2\4\1\273\11\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\1\47\1\4\1\0\10\4"+ "\2\0\1\4\1\47\2\4\1\274\10\0\1\4\1\0"+ "\14\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\4\4\2\275\2\4\2\0\5\4\10\0"+ "\1\4\1\0\14\4\1\0\2\4\1\3\3\4\1\276"+ "\1\0\2\3\4\0\2\4\1\0\10\4\2\0\5\4"+ "\10\0\1\4\1\0\14\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\1\4\1\277\1\0\1\300\7\4"+ "\2\0\5\4\10\0\1\4\1\0\1\4\1\277\12\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\7\4\1\70\2\0\5\4\10\0\1\4\1\0"+ "\14\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\1\4\2\120\5\4\2\0\5\4\10\0"+ "\1\4\1\0\14\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\1\301\7\4\2\0\5\4"+ "\10\0\1\4\1\0\5\4\1\302\6\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\1\303\1\4\1\0"+ "\7\4\1\304\2\0\1\4\1\303\3\4\10\0\1\4"+ "\1\0\14\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\10\4\2\0\5\4\10\0\1\305"+ "\1\0\14\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\1\4\2\306\5\4\2\0\5\4"+ "\10\0\1\4\1\0\14\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\10\4\2\0\5\4"+ "\10\0\1\4\1\0\2\4\1\307\11\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\10\4"+ "\2\0\5\4\10\0\1\4\1\0\2\4\1\310\11\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\3\4\1\311\4\4\2\0\5\4\10\0\1\4"+ "\1\0\14\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\1\114\1\4\1\0\10\4\2\0\1\4\1\114"+ "\3\4\10\0\1\4\1\0\14\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\1\4\1\312\1\0\10\4"+ "\2\0\5\4\10\0\1\4\1\0\1\4\1\312\12\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\1\4\2\313\5\4\2\0\5\4\10\0\1\4"+ "\1\0\14\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\1\4\1\314\1\0\10\4\2\0\5\4\10\0"+ "\1\4\1\0\1\4\1\314\12\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\1\4\2\315"+ "\5\4\2\0\5\4\10\0\1\4\1\0\3\4\1\316"+ "\10\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\10\4\2\0\5\4\10\0\1\4\1\0"+ "\4\4\1\317\7\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\1\320\1\4\1\0\10\4\2\0\1\4"+ "\1\320\3\4\10\0\1\4\1\0\14\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\1\4"+ "\2\321\5\4\2\0\5\4\10\0\1\4\1\0\14\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\1\4"+ "\1\322\1\0\10\4\2\0\1\323\4\4\10\0\1\4"+ "\1\0\1\4\1\322\12\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\1\4\2\324\4\4"+ "\1\304\2\0\5\4\10\0\1\4\1\0\14\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\10\4\2\0\5\4\10\0\1\4\1\0\2\4\1\325"+ "\11\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\10\4\2\0\5\4\10\0\1\4\1\0"+ "\1\114\11\4\1\120\1\4\1\0\1\4\1\114\1\3"+ "\4\4\1\0\2\3\4\0\1\326\1\4\1\0\10\4"+ "\2\0\1\4\1\326\3\4\10\0\1\4\1\0\11\4"+ "\1\327\2\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\10\4\2\0\1\330\4\4\10\0"+ "\1\4\1\0\14\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\7\4\1\331\2\0\5\4"+ "\10\0\1\4\1\0\14\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\7\4\1\332\2\0"+ "\1\333\4\4\10\0\1\4\1\0\14\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\10\4"+ "\2\0\5\4\10\0\1\4\1\0\10\4\1\334\3\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\7\4\1\335\2\0\5\4\10\0\1\4\1\0"+ "\14\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\10\4\2\0\5\4\10\0\1\4\1\0"+ "\3\4\1\336\10\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\1\337\1\4\1\0\10\4\2\0\1\250"+ "\1\337\3\4\10\0\1\4\1\0\6\4\1\340\5\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\1\341"+ "\1\4\1\0\10\4\2\0\1\4\1\341\3\4\10\0"+ "\1\4\1\0\14\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\10\4\2\0\5\4\10\0"+ "\1\4\1\0\3\4\1\342\10\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\10\4\2\0"+ "\1\343\4\4\10\0\1\4\1\0\14\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\4\4"+ "\2\344\2\4\2\0\1\345\4\4\10\0\1\4\1\0"+ "\14\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\4\4\2\346\2\4\2\0\5\4\10\0"+ "\1\4\1\0\14\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\1\4\1\347\1\0\10\4\2\0\5\4"+ "\10\0\1\4\1\0\1\4\1\347\12\4\1\0\2\4"+ "\1\3\3\4\1\350\1\0\2\3\4\0\2\4\1\0"+ "\10\4\2\0\5\4\10\0\1\4\1\0\4\4\1\351"+ "\7\4\1\0\2\4\10\50\1\0\20\50\1\352\1\50"+ "\1\0\31\50\24\0\1\353\112\0\1\354\20\0\10\50"+ "\1\0\11\50\1\355\10\50\1\0\31\50\2\0\10\50"+ "\1\0\22\50\1\0\12\50\1\356\16\50\2\0\10\50"+ "\1\0\22\50\1\0\14\50\1\357\14\50\1\0\1\360"+ "\50\0\1\360\15\0\1\360\31\0\1\361\35\0\3\60"+ "\1\212\1\60\1\0\2\60\4\0\3\214\1\215\1\60"+ "\1\214\2\60\1\214\2\60\2\0\3\60\1\214\1\60"+ "\10\0\1\60\1\0\14\60\1\0\2\60\3\0\1\212"+ "\63\0\5\60\1\0\2\60\4\0\2\60\1\0\1\60"+ "\5\214\2\60\2\0\5\60\10\0\1\60\1\0\14\60"+ "\1\0\2\60\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\10\4\2\0\4\4\1\147\10\0\1\4\1\0"+ "\14\4\1\0\2\4\1\3\3\4\1\114\1\0\2\3"+ "\4\0\2\4\1\0\10\4\2\0\5\4\10\0\1\4"+ "\1\0\14\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\10\4\2\0\1\232\4\4\10\0"+ "\1\4\1\0\14\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\3\4\1\114\4\4\2\0"+ "\5\4\10\0\1\4\1\0\14\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\10\4\2\0"+ "\5\4\10\0\1\4\1\0\2\4\1\225\11\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\6\4\1\226\1\4\2\0\5\4\10\0\1\4\1\0"+ "\14\4\1\0\1\226\1\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\4\4\2\362\2\4\2\0\5\4"+ "\10\0\1\4\1\0\14\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\10\4\2\0\5\4"+ "\10\0\1\4\1\0\7\4\1\114\4\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\10\4"+ "\2\0\5\4\10\0\1\4\1\0\3\4\1\363\10\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\10\4\2\0\5\4\10\0\1\4\1\0\5\4"+ "\1\220\6\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\1\364\1\4\1\0\10\4\2\0\1\4\1\364"+ "\3\4\10\0\1\4\1\0\14\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\10\4\2\0"+ "\5\4\10\0\1\232\1\0\14\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\7\4\1\114"+ "\2\0\5\4\10\0\1\4\1\0\14\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\4\4"+ "\2\120\2\4\2\0\1\365\4\4\10\0\1\4\1\0"+ "\14\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\10\4\2\0\5\4\10\0\1\4\1\0"+ "\10\4\1\114\3\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\10\4\2\0\5\4\10\0"+ "\1\4\1\0\3\4\1\221\10\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\1\4\2\300"+ "\5\4\2\0\5\4\10\0\1\4\1\0\14\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\1\366\7\4\2\0\5\4\10\0\1\4\1\0\14\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\1\367\7\4\2\0\5\4\10\0\1\4\1\0"+ "\14\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\1\4\1\370\1\0\10\4\2\0\5\4\10\0\1\4"+ "\1\0\1\4\1\370\12\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\10\4\2\0\5\4"+ "\10\0\1\4\1\0\3\4\1\371\10\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\4\4"+ "\2\372\2\4\2\0\5\4\10\0\1\4\1\0\14\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\7\4\1\373\2\0\5\4\10\0\1\4\1\0"+ "\14\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\1\4\2\374\1\375\4\4\2\0\5\4"+ "\10\0\1\4\1\0\14\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\7\4\1\376\2\0"+ "\5\4\10\0\1\4\1\0\14\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\10\4\2\0"+ "\4\4\1\377\10\0\1\4\1\0\14\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\7\4"+ "\1\364\2\0\5\4\10\0\1\4\1\0\14\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\10\4\2\0\5\4\10\0\1\4\1\0\4\4\1\u0100"+ "\7\4\1\0\2\4\3\60\2\252\1\0\2\60\4\0"+ "\1\u0101\1\252\1\u0101\1\u0102\1\60\1\u0101\2\60\1\u0101"+ "\1\60\1\252\2\0\2\60\3\252\10\0\1\60\1\0"+ "\1\60\1\252\2\60\1\252\7\60\1\0\2\60\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\10\4\2\0"+ "\1\u0103\4\4\10\0\1\4\1\0\14\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\10\4"+ "\2\0\5\4\10\0\1\4\1\0\2\4\1\262\11\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\10\4\2\0\5\4\10\0\1\4\1\0\3\4"+ "\1\266\10\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\10\4\2\0\5\4\10\0\1\4"+ "\1\0\3\4\1\120\10\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\7\4\1\u0104\2\0"+ "\5\4\10\0\1\4\1\0\14\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\7\4\1\u0105"+ "\2\0\5\4\10\0\1\4\1\0\14\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\3\4"+ "\1\u0106\4\4\2\0\5\4\10\0\1\4\1\0\3\4"+ "\1\u0107\10\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\10\4\2\0\5\4\10\0\1\4"+ "\1\0\7\4\1\364\4\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\10\4\2\0\5\4"+ "\10\0\1\114\1\0\14\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\10\4\2\0\5\4"+ "\10\0\1\4\1\0\7\4\1\u0100\4\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\1\u0108\1\u0109\1\0"+ "\10\4\2\0\1\4\1\u0108\3\4\10\0\1\4\1\0"+ "\1\4\1\u0109\12\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\1\u010a\1\4\1\0\10\4\2\0\1\4"+ "\1\u010a\3\4\10\0\1\4\1\0\14\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\7\4"+ "\1\u010b\2\0\5\4\10\0\1\4\1\0\14\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\1\u010c\2\254\5\4\2\0\5\4\10\0\1\4\1\0"+ "\14\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\10\4\2\0\1\u010d\4\4\10\0\1\4"+ "\1\0\14\4\1\0\2\4\1\3\3\4\1\u010e\1\0"+ "\2\3\4\0\2\4\1\0\10\4\2\0\5\4\10\0"+ "\1\4\1\0\14\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\1\4\1\u010f\1\0\10\4\2\0\5\4"+ "\10\0\1\4\1\0\1\4\1\u010f\12\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\4\4"+ "\2\232\2\4\2\0\5\4\10\0\1\4\1\0\14\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\7\4\1\277\2\0\5\4\10\0\1\4\1\0"+ "\14\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\6\4\1\114\1\4\2\0\5\4\10\0"+ "\1\4\1\0\14\4\1\0\1\114\1\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\1\4\2\u0110\5\4"+ "\2\0\5\4\10\0\1\4\1\0\14\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\10\4"+ "\2\0\5\4\10\0\1\4\1\0\11\4\1\114\2\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\7\4\1\u0111\2\0\5\4\10\0\1\4\1\0"+ "\14\4\1\0\2\4\1\3\3\4\1\u0112\1\0\2\3"+ "\4\0\2\4\1\0\10\4\2\0\5\4\10\0\1\4"+ "\1\0\14\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\10\4\2\0\5\4\10\0\1\4"+ "\1\0\3\4\1\u0113\10\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\10\4\2\0\5\4"+ "\10\0\1\4\1\0\2\4\1\114\11\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\7\4"+ "\1\u0114\2\0\5\4\10\0\1\4\1\0\14\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\7\4\1\161\2\0\5\4\10\0\1\4\1\0\14\4"+ "\1\0\2\4\1\3\3\4\1\u0115\1\0\2\3\4\0"+ "\2\4\1\0\10\4\2\0\5\4\10\0\1\4\1\0"+ "\14\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\10\4\2\0\4\4\1\u0116\10\0\1\4"+ "\1\0\14\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\4\4\2\301\2\4\2\0\5\4"+ "\10\0\1\4\1\0\14\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\1\u0117\1\4\1\0\6\4\1\u0118"+ "\1\4\2\0\1\4\1\u0117\3\4\10\0\1\4\1\0"+ "\14\4\1\0\1\u0118\1\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\10\4\2\0\4\4\1\362\10\0"+ "\1\4\1\0\14\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\10\4\2\0\4\4\1\u0119"+ "\10\0\1\4\1\0\14\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\10\4\2\0\5\4"+ "\10\0\1\4\1\0\6\4\1\u011a\5\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\10\4"+ "\2\0\1\u011b\4\4\10\0\1\u011c\1\0\14\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\3\4\1\u010d\4\4\2\0\5\4\10\0\1\4\1\0"+ "\14\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\10\4\2\0\1\u011d\3\4\1\u011e\10\0"+ "\1\4\1\0\14\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\10\4\2\0\1\u011f\4\4"+ "\10\0\1\4\1\0\14\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\7\4\1\u0120\2\0"+ "\5\4\10\0\1\4\1\0\14\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\6\4\1\u0121"+ "\1\4\2\0\5\4\10\0\1\4\1\0\14\4\1\0"+ "\1\u0121\1\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\3\4\1\232\4\4\2\0\5\4\10\0\1\4"+ "\1\0\14\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\1\4\1\114\1\0\10\4\2\0\5\4\10\0"+ "\1\4\1\0\1\4\1\114\12\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\1\u0122\1\4\1\0\10\4"+ "\2\0\1\4\1\u0122\3\4\10\0\1\4\1\0\14\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\7\4\1\u0123\2\0\5\4\10\0\1\4\1\0"+ "\14\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\1\4\2\u0124\3\4\1\u0125\1\4\2\0"+ "\5\4\10\0\1\4\1\0\3\4\1\u0126\10\4\1\0"+ "\1\u0125\1\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\3\4\1\274\4\4\2\0\5\4\10\0\1\4"+ "\1\0\14\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\1\u0127\1\4\1\0\10\4\2\0\1\4\1\u0127"+ "\3\4\10\0\1\4\1\0\14\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\1\4\2\u0128"+ "\5\4\2\0\5\4\10\0\1\4\1\0\14\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\7\4\1\u0129\2\0\5\4\10\0\1\4\1\0\14\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\1\u012a"+ "\1\4\1\0\10\4\2\0\1\4\1\u012a\3\4\10\0"+ "\1\4\1\0\14\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\3\4\1\u012b\4\4\2\0"+ "\5\4\10\0\1\4\1\0\14\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\7\4\1\u0110"+ "\2\0\5\4\10\0\1\4\1\0\14\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\10\4"+ "\2\0\4\4\1\221\10\0\1\4\1\0\14\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\1\4\2\u012c\5\4\2\0\5\4\10\0\1\4\1\0"+ "\14\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\10\4\2\0\5\4\10\0\1\4\1\0"+ "\4\4\1\340\7\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\10\4\2\0\1\74\4\4"+ "\10\0\1\4\1\0\12\4\1\u012d\1\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\1\122"+ "\7\4\2\0\5\4\10\0\1\4\1\0\14\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\10\4\2\0\5\4\10\0\1\4\1\0\3\4\1\114"+ "\10\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\10\4\2\0\1\u012e\4\4\10\0\1\4"+ "\1\0\14\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\1\u012f\7\4\2\0\5\4\10\0"+ "\1\4\1\0\14\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\3\4\1\u0130\4\4\2\0"+ "\5\4\10\0\1\4\1\0\14\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\10\4\2\0"+ "\4\4\1\274\10\0\1\4\1\0\14\4\1\0\2\4"+ "\10\50\1\0\22\50\1\0\12\50\1\u0131\16\50\30\0"+ "\1\354\107\0\1\u0132\17\0\10\50\1\0\15\50\1\356"+ "\4\50\1\0\31\50\2\0\10\50\1\0\22\50\1\0"+ "\13\50\1\u0133\15\50\2\0\10\50\1\0\17\50\1\u0134"+ "\2\50\1\0\31\50\32\0\1\u0135\104\0\1\u0136\20\0"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\4\4"+ "\2\114\2\4\2\0\5\4\10\0\1\4\1\0\14\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\1\120"+ "\1\4\1\0\10\4\2\0\1\4\1\120\3\4\10\0"+ "\1\4\1\0\14\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\1\4\2\u0137\5\4\2\0"+ "\5\4\10\0\1\4\1\0\14\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\10\4\2\0"+ "\5\4\10\0\1\4\1\0\11\4\1\232\2\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\1\u0138\1\4"+ "\1\0\10\4\2\0\1\4\1\u0138\3\4\10\0\1\4"+ "\1\0\14\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\10\4\2\0\5\4\10\0\1\4"+ "\1\0\3\4\1\u0139\10\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\10\4\2\0\5\4"+ "\10\0\1\4\1\0\6\4\1\u013a\5\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\7\4"+ "\1\u013b\2\0\5\4\10\0\1\4\1\0\14\4\1\0"+ "\2\4\1\3\3\4\1\u013c\1\0\2\3\4\0\2\4"+ "\1\0\10\4\2\0\5\4\10\0\1\4\1\0\14\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\10\4\2\0\5\4\10\0\1\4\1\0\11\4"+ "\1\u013d\2\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\10\4\2\0\4\4\1\u013e\10\0"+ "\1\4\1\0\14\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\10\4\2\0\5\4\10\0"+ "\1\4\1\0\7\4\1\u011a\4\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\1\u013f\7\4"+ "\2\0\5\4\10\0\1\4\1\0\14\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\3\4"+ "\1\250\4\4\2\0\5\4\10\0\1\4\1\0\14\4"+ "\1\0\2\4\5\60\1\0\2\60\4\0\2\60\1\0"+ "\1\60\5\u0101\2\60\2\0\5\60\10\0\1\60\1\0"+ "\14\60\1\0\2\60\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\7\4\1\u0140\2\0\5\4\10\0\1\4"+ "\1\0\14\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\1\u0141\1\4\1\0\10\4\2\0\1\4\1\u0141"+ "\3\4\10\0\1\4\1\0\14\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\1\u0142\1\4\1\0\10\4"+ "\2\0\1\4\1\u0142\3\4\10\0\1\4\1\0\7\4"+ "\1\u0143\4\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\7\4\1\u0144\2\0\5\4\10\0"+ "\1\4\1\0\14\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\1\u0145\1\4\1\0\10\4\2\0\1\4"+ "\1\u0145\3\4\10\0\1\4\1\0\14\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\7\4"+ "\1\325\2\0\5\4\10\0\1\4\1\0\14\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\10\4\2\0\5\4\10\0\1\4\1\0\3\4\1\u0146"+ "\10\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\10\4\2\0\1\364\4\4\10\0\1\4"+ "\1\0\14\4\1\0\2\4\1\3\3\4\1\120\1\0"+ "\2\3\4\0\2\4\1\0\10\4\2\0\5\4\10\0"+ "\1\4\1\0\14\4\1\0\2\4\1\3\3\4\1\u0147"+ "\1\0\2\3\4\0\2\4\1\0\10\4\2\0\5\4"+ "\10\0\1\4\1\0\14\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\1\4\2\217\5\4"+ "\2\0\5\4\10\0\1\4\1\0\14\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\3\4"+ "\1\u0148\4\4\2\0\5\4\10\0\1\4\1\0\14\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\3\4\1\u0149\4\4\2\0\5\4\10\0\1\4"+ "\1\0\14\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\10\4\2\0\2\4\2\114\1\4"+ "\10\0\1\4\1\0\14\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\10\4\2\0\4\4"+ "\1\u014a\10\0\1\4\1\0\14\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\10\4\2\0"+ "\5\4\10\0\1\4\1\0\1\114\13\4\1\0\1\4"+ "\1\114\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\10\4\2\0\5\4\10\0\1\4\1\0\3\4\1\u0110"+ "\10\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\10\4\2\0\1\u014b\4\4\10\0\1\4"+ "\1\0\14\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\3\4\1\u014c\4\4\2\0\5\4"+ "\10\0\1\4\1\0\14\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\7\4\1\u014d\2\0"+ "\5\4\10\0\1\4\1\0\14\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\10\4\2\0"+ "\4\4\1\u014e\10\0\1\4\1\0\14\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\3\4"+ "\1\u014f\4\4\2\0\5\4\10\0\1\4\1\0\14\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\10\4\2\0\4\4\1\220\10\0\1\4\1\0"+ "\14\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\7\4\1\u0150\2\0\5\4\10\0\1\4"+ "\1\0\14\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\7\4\1\u0151\2\0\5\4\10\0"+ "\1\4\1\0\14\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\1\4\2\340\5\4\2\0"+ "\5\4\10\0\1\4\1\0\14\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\10\4\2\0"+ "\5\4\10\0\1\4\1\0\11\4\1\u0152\2\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\7\4\1\370\2\0\5\4\10\0\1\4\1\0\14\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\10\4\2\0\5\4\10\0\1\4\1\0\2\4"+ "\1\u0125\11\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\7\4\1\u0153\2\0\5\4\10\0"+ "\1\4\1\0\14\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\10\4\2\0\5\4\10\0"+ "\1\4\1\0\3\4\1\u0154\10\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\4\4\2\u0155"+ "\2\4\2\0\5\4\10\0\1\4\1\0\14\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\10\4\2\0\5\4\10\0\1\4\1\0\2\4\1\u0156"+ "\11\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\1\4\2\222\5\4\2\0\5\4\10\0"+ "\1\4\1\0\14\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\10\4\2\0\5\4\10\0"+ "\1\4\1\0\6\4\1\u0157\5\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\10\4\2\0"+ "\4\4\1\u0158\10\0\1\4\1\0\14\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\10\4"+ "\2\0\5\4\10\0\1\4\1\0\3\4\1\u0159\10\4"+ "\1\0\2\4\1\3\3\4\1\u010a\1\0\2\3\4\0"+ "\2\4\1\0\10\4\2\0\5\4\10\0\1\4\1\0"+ "\14\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\1\u015a\1\4\1\0\3\4\1\u015b\4\4\2\0\1\4"+ "\1\u015a\3\4\10\0\1\4\1\0\14\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\7\4"+ "\1\u015c\2\0\5\4\10\0\1\4\1\0\14\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\10\4\2\0\4\4\1\70\10\0\1\4\1\0\14\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\10\4\2\0\5\4\10\0\1\4\1\0\11\4"+ "\1\u015d\2\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\1\4\2\u015e\5\4\2\0\5\4"+ "\10\0\1\4\1\0\3\4\1\u015f\10\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\3\4"+ "\1\u0160\4\4\2\0\5\4\10\0\1\4\1\0\14\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\10\4\2\0\4\4\1\224\10\0\1\4\1\0"+ "\14\4\1\0\2\4\10\50\1\0\12\50\2\356\6\50"+ "\1\0\13\50\1\u0133\15\50\46\0\1\u0161\22\0\10\50"+ "\1\0\22\50\1\0\10\50\1\u0162\20\50\2\0\1\50"+ "\4\u0134\1\50\1\u0134\1\50\1\0\2\50\20\u0134\1\u0135"+ "\6\u0134\2\50\1\u0134\1\50\16\u0134\1\50\2\u0135\1\0"+ "\1\u0135\1\u0163\2\u0135\1\0\1\u0163\4\0\1\u0163\2\u0135"+ "\1\u0163\10\u0135\2\u0163\5\u0135\4\u0163\2\0\1\u0135\1\0"+ "\1\u0135\1\u0163\14\u0135\1\0\2\u0135\23\0\2\354\22\0"+ "\1\u0132\17\0\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\10\4\2\0\5\4\10\0\1\4\1\0\2\4"+ "\1\u0164\11\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\10\4\2\0\5\4\10\0\1\4"+ "\1\0\2\4\1\u0165\11\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\10\4\2\0\5\4"+ "\10\0\1\4\1\0\2\4\1\u014c\11\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\7\4"+ "\1\u0166\2\0\5\4\10\0\1\4\1\0\14\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\7\4\1\u0167\2\0\5\4\10\0\1\4\1\0\14\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\10\4\2\0\1\u0168\4\4\10\0\1\4\1\0"+ "\14\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\10\4\2\0\4\4\1\u0169\10\0\1\4"+ "\1\0\14\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\1\232\1\4\1\0\10\4\2\0\1\4\1\232"+ "\3\4\10\0\1\4\1\0\14\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\3\4\1\120"+ "\4\4\2\0\5\4\10\0\1\4\1\0\14\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\10\4\2\0\5\4\10\0\1\4\1\0\7\4\1\u0143"+ "\4\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\1\4\2\u0145\5\4\2\0\5\4\10\0"+ "\1\4\1\0\14\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\10\4\2\0\2\4\2\u016a"+ "\1\4\10\0\1\4\1\0\14\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\7\4\1\230"+ "\2\0\5\4\10\0\1\4\1\0\14\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\10\4"+ "\2\0\5\4\10\0\1\4\1\0\11\4\1\u016b\2\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\10\4\2\0\1\362\4\4\10\0\1\4\1\0"+ "\14\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\10\4\2\0\5\4\10\0\1\4\1\0"+ "\1\362\13\4\1\0\1\4\1\362\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\10\4\2\0\1\u016c\4\4"+ "\10\0\1\4\1\0\14\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\10\4\2\0\5\4"+ "\10\0\1\4\1\0\3\4\1\u016d\10\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\7\4"+ "\1\362\2\0\5\4\10\0\1\4\1\0\14\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\4\4\2\120\2\4\2\0\5\4\10\0\1\4\1\0"+ "\14\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\1\4\2\u016e\5\4\2\0\5\4\10\0"+ "\1\4\1\0\14\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\3\4\1\u016f\4\4\2\0"+ "\5\4\10\0\1\4\1\0\14\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\4\4\2\u0170"+ "\2\4\2\0\5\4\10\0\1\4\1\0\14\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\10\4\2\0\5\4\10\0\1\4\1\0\2\4\1\u0171"+ "\11\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\4\4\2\345\2\4\2\0\5\4\10\0"+ "\1\4\1\0\14\4\1\0\2\4\1\3\3\4\1\u0172"+ "\1\0\2\3\4\0\2\4\1\0\10\4\2\0\5\4"+ "\10\0\1\4\1\0\14\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\1\u0173\1\4\1\0\10\4\2\0"+ "\1\4\1\u0173\3\4\10\0\1\4\1\0\14\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\10\4\2\0\4\4\1\u0174\10\0\1\4\1\0\14\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\10\4\2\0\5\4\10\0\1\4\1\0\6\4"+ "\1\u016b\5\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\10\4\2\0\5\4\10\0\1\4"+ "\1\0\1\u0125\13\4\1\0\1\4\1\u0125\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\10\4\2\0\5\4"+ "\10\0\1\u016a\1\0\14\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\6\4\1\u0175\1\4"+ "\2\0\5\4\10\0\1\4\1\0\14\4\1\0\1\u0175"+ "\1\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\7\4\1\u0176\2\0\5\4\10\0\1\4\1\0\14\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\10\4\2\0\1\47\4\4\10\0\1\4\1\0"+ "\14\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\10\4\2\0\5\4\10\0\1\4\1\0"+ "\2\4\1\u0177\11\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\1\4\2\u0178\5\4\2\0"+ "\5\4\10\0\1\4\1\0\14\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\10\4\2\0"+ "\5\4\10\0\1\4\1\0\3\4\1\u0179\10\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\10\4\2\0\4\4\1\u017a\10\0\1\4\1\0\14\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\3\4\1\u017b\4\4\2\0\5\4\10\0\1\4"+ "\1\0\14\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\10\4\2\0\5\4\10\0\1\4"+ "\1\0\2\4\1\u017c\11\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\10\4\2\0\5\4"+ "\10\0\1\4\1\0\6\4\1\u017d\5\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\7\4"+ "\1\u017e\2\0\5\4\10\0\1\4\1\0\14\4\1\0"+ "\2\4\44\0\1\u0135\22\0\10\50\1\0\22\50\1\0"+ "\10\50\1\u0134\20\50\2\0\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\1\232\7\4\2\0\5\4\10\0"+ "\1\4\1\0\14\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\6\4\1\u0118\1\4\2\0"+ "\5\4\10\0\1\4\1\0\14\4\1\0\1\u0118\1\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\10\4"+ "\2\0\5\4\10\0\1\4\1\0\6\4\1\136\5\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\3\4\1\364\4\4\2\0\5\4\10\0\1\4"+ "\1\0\14\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\10\4\2\0\4\4\1\u017f\10\0"+ "\1\4\1\0\14\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\7\4\1\u0180\2\0\5\4"+ "\10\0\1\4\1\0\14\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\1\u013e\7\4\2\0"+ "\5\4\10\0\1\4\1\0\14\4\1\0\2\4\1\3"+ "\3\4\1\u0181\1\0\2\3\4\0\2\4\1\0\10\4"+ "\2\0\5\4\10\0\1\4\1\0\14\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\10\4"+ "\2\0\5\4\10\0\1\4\1\0\3\4\1\304\10\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\10\4\2\0\5\4\10\0\1\4\1\0\5\4"+ "\1\114\6\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\4\4\2\u0114\2\4\2\0\5\4"+ "\10\0\1\4\1\0\14\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\1\4\1\u0182\1\0\10\4\2\0"+ "\5\4\10\0\1\4\1\0\1\4\1\u0182\12\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\10\4\2\0\1\u0108\4\4\10\0\1\4\1\0\14\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\10\4\2\0\1\u016f\4\4\10\0\1\4\1\0"+ "\14\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\1\u0183\1\4\1\0\10\4\2\0\1\4\1\u0183\3\4"+ "\10\0\1\4\1\0\14\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\7\4\1\u0184\2\0"+ "\5\4\10\0\1\4\1\0\14\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\1\u0185\1\4\1\0\10\4"+ "\2\0\1\4\1\u0185\3\4\10\0\1\4\1\0\14\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\1\4"+ "\1\u0186\1\0\10\4\2\0\5\4\10\0\1\4\1\0"+ "\1\4\1\u0186\12\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\10\4\2\0\4\4\1\u0187"+ "\10\0\1\4\1\0\14\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\10\4\2\0\5\4"+ "\10\0\1\4\1\0\2\4\1\364\11\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\10\4"+ "\2\0\5\4\10\0\1\4\1\0\2\4\1\u0188\11\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\6\4\1\u0189\1\4\2\0\5\4\10\0\1\4"+ "\1\0\14\4\1\0\1\u0189\1\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\7\4\1\u018a\2\0\5\4"+ "\10\0\1\4\1\0\14\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\10\4\2\0\5\4"+ "\10\0\1\4\1\0\14\4\1\u018b\2\4\1\3\3\4"+ "\1\232\1\0\2\3\4\0\2\4\1\0\10\4\2\0"+ "\5\4\10\0\1\4\1\0\14\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\2\4\1\0\10\4\2\0"+ "\5\4\10\0\1\4\1\0\2\4\1\u0145\11\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\10\4\2\0\5\4\10\0\1\4\1\0\13\4\1\114"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\3\4\1\u018c\4\4\2\0\5\4\10\0\1\4"+ "\1\0\14\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\1\u018d\1\4\1\0\10\4\2\0\1\4\1\u018d"+ "\3\4\10\0\1\4\1\0\14\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\1\u018e\1\4\1\0\10\4"+ "\2\0\1\4\1\u018e\3\4\10\0\1\4\1\0\14\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\1\u018f"+ "\1\4\1\0\10\4\2\0\1\4\1\u018f\3\4\10\0"+ "\1\4\1\0\14\4\1\0\2\4\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\7\4\1\362\2\0\4\4"+ "\1\u0190\10\0\1\4\1\0\14\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\1\4\1\362\1\0\10\4"+ "\2\0\5\4\10\0\1\4\1\0\1\4\1\362\12\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\10\4\2\0\4\4\1\u0191\10\0\1\4\1\0"+ "\14\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\7\4\1\u0192\2\0\5\4\10\0\1\4"+ "\1\0\14\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\1\u0193\1\4\1\0\10\4\2\0\1\4\1\u0193"+ "\3\4\10\0\1\4\1\0\14\4\1\0\2\4\23\0"+ "\2\u0194\42\0\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\7\4\1\147\2\0\5\4\10\0\1\4\1\0"+ "\14\4\1\0\2\4\1\3\4\4\1\0\2\3\4\0"+ "\2\4\1\0\10\4\2\0\4\4\1\u016f\10\0\1\4"+ "\1\0\14\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\2\4\1\0\1\4\2\u0195\5\4\2\0\5\4"+ "\10\0\1\4\1\0\14\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\1\4\2\u0196\5\4"+ "\2\0\5\4\10\0\1\4\1\0\14\4\1\0\2\4"+ "\1\3\4\4\1\0\2\3\4\0\2\4\1\0\10\4"+ "\2\0\5\4\10\0\1\4\1\0\4\4\1\324\7\4"+ "\1\0\2\4\1\3\4\4\1\0\2\3\4\0\2\4"+ "\1\0\10\4\2\0\5\4\10\0\1\4\1\0\11\4"+ "\1\327\2\4\1\0\2\4\1\3\4\4\1\0\2\3"+ "\4\0\1\137\1\4\1\0\10\4\2\0\1\4\1\137"+ "\3\4\10\0\1\4\1\0\14\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\1\u0197\1\4\1\0\10\4"+ "\2\0\1\4\1\u0197\3\4\10\0\1\4\1\0\14\4"+ "\1\0\2\4\31\0\1\u0198\35\0\1\3\4\4\1\0"+ "\2\3\4\0\2\4\1\0\10\4\2\0\1\u0199\4\4"+ "\10\0\1\4\1\0\14\4\1\0\2\4\1\3\4\4"+ "\1\0\2\3\4\0\1\4\1\u0199\1\0\10\4\2\0"+ "\5\4\10\0\1\4\1\0\1\4\1\u0199\12\4\1\0"+ "\2\4\1\3\4\4\1\0\2\3\4\0\2\4\1\0"+ "\1\4\2\u019a\5\4\2\0\5\4\10\0\1\4\1\0"+ "\14\4\1\0\2\4\35\0\1\u019b\31\0\1\3\4\4"+ "\1\0\2\3\4\0\2\4\1\0\10\4\2\0\4\4"+ "\1\u0190\10\0\1\4\1\0\14\4\1\0\2\4\1\3"+ "\4\4\1\0\2\3\4\0\1\4\1\232\1\0\10\4"+ "\2\0\5\4\10\0\1\4\1\0\1\4\1\232\12\4"+ "\1\0\2\4\31\0\1\u019c\63\0\1\u019d\121\0\1\u019e"+ "\33\0\1\u019f\112\0\1\u01a0\45\0\1\u01a1\35\0"; private static int [] zzUnpackTrans() { int [] result = new int[22000]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; } private static int zzUnpackTrans(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); value--; do result[j++] = value; while (--count > 0); } return j; } /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\2\0\4\1\1\11\1\1\1\11\2\1\1\11\16\1"+ "\2\11\14\1\1\11\26\1\1\11\6\1\1\0\73\1"+ "\2\0\3\1\2\0\1\1\1\0\137\1\2\0\3\1"+ "\2\0\100\1\1\0\3\1\1\0\52\1\1\0\1\1"+ "\1\0\47\1\1\0\10\1\1\0\3\1\1\0\2\1"+ "\6\0\1\11"; private static int [] zzUnpackAttribute() { int [] result = new int[417]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(String packed, int offset, int [] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ int l = packed.length(); while (i < l) { int count = packed.charAt(i++); int value = packed.charAt(i++); do result[j++] = value; while (--count > 0); } return j; } /** the input device */ private java.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is the source of the yytext() string */ private char zzBuffer[]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** endRead marks the last character in the buffer, that has been read from input */ private int zzEndRead; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public VisualBasicTokenMaker() { } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addHyperlinkToken(int, int, int) */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, false); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. * @param hyperlink Whether this token is a hyperlink. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset, boolean hyperlink) { super.addToken(array, start,end, tokenType, startOffset, hyperlink); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "'", null }; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. int state = YYINITIAL; s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtEOF = false; } /** * Creates a new scanner * There is also a java.io.InputStream version of this constructor. * * @param in the java.io.Reader to read input from. */ public VisualBasicTokenMaker(java.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. * There is also java.io.Reader version of this constructor. * * @param in the java.io.Inputstream to read input from. */ public VisualBasicTokenMaker(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table * @return the unpacked character translation table */ private static char [] zzUnpackCMap(String packed) { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 184) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ zzEndRead = zzStartRead; /* invalidate buffer */ if (zzReader != null) zzReader.close(); } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ @Override public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position pos from the * matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos */ public final char yycharat(int pos) { return zzBuffer[zzStartRead+pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return zzMarkedPos-zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done * in error fallback rules. * * @param errorCode the code of the errormessage to display */ private void zzScanError(int errorCode) { String message; try { message = ZZ_ERROR_MSG[errorCode]; } catch (ArrayIndexOutOfBoundsException e) { message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number the number of characters to be read again. * This number must not be greater than yylength()! */ public void yypushback(int number) { if ( number > yylength() ) zzScanError(ZZ_PUSHBACK_2BIG); zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, * the end of input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = zzMarkedPos; zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; zzState = zzLexicalState; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) zzInput = zzBufferL[zzCurrentPosL++]; else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; } else { // store back cached positions zzCurrentPos = zzCurrentPosL; zzMarkedPos = zzMarkedPosL; boolean eof = zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = zzCurrentPos; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; zzEndReadL = zzEndRead; if (eof) { zzInput = YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; if (zzNext == -1) break zzForAction; zzState = zzNext; int zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; if ( (zzAttributes & 8) == 8 ) break zzForAction; } } } // store back cached position zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 5: { addNullToken(); return firstToken; } case 21: break; case 6: { addToken(Token.WHITESPACE); } case 22: break; case 16: { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } case 23: break; case 13: { addToken(Token.LITERAL_NUMBER_FLOAT); } case 24: break; case 15: { addToken(Token.RESERVED_WORD); } case 25: break; case 9: { addToken(Token.SEPARATOR); } case 26: break; case 2: { addToken(Token.IDENTIFIER); } case 27: break; case 11: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } case 28: break; case 7: { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } case 29: break; case 1: { addToken(Token.ERROR_IDENTIFIER); } case 30: break; case 17: { addToken(Token.DATA_TYPE); } case 31: break; case 18: { addToken(Token.LITERAL_BOOLEAN); } case 32: break; case 14: { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } case 33: break; case 19: { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } case 34: break; case 20: { addToken(Token.RESERVED_WORD_2); } case 35: break; case 12: { addToken(Token.ERROR_NUMBER_FORMAT); } case 36: break; case 8: { start = zzMarkedPos-1; yybegin(EOL_COMMENT); } case 37: break; case 3: { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } case 38: break; case 4: { addToken(Token.OPERATOR); } case 39: break; case 10: { } case 40: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; switch (zzLexicalState) { case EOL_COMMENT: { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } case 418: break; case YYINITIAL: { addNullToken(); return firstToken; } case 419: break; default: return null; } } else { zzScanError(ZZ_NO_MATCH); } } } } } RSyntaxTextArea-2.5.8/src/main/java/org/fife/ui/rsyntaxtextarea/modes/WindowsBatchTokenMaker.java000066400000000000000000000503751257417003700331620ustar00rootroot00000000000000/* * 03/07/2004 * * WindowsBatchTokenMaker.java - Scanner for Windows batch files. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.*; /** * A token maker that turns text into a linked list of * Tokens for syntax highlighting Microsoft * Windows batch files. * * @author Robert Futrell * @version 0.1 */ public class WindowsBatchTokenMaker extends AbstractTokenMaker { protected final String operators = "@:*<>=?"; private int currentTokenStart; private int currentTokenType; private VariableType varType; /** * Constructor. */ public WindowsBatchTokenMaker() { super(); // Initializes tokensToHighlight. } /** * Checks the token to give it the exact ID it deserves before * being passed up to the super method. * * @param segment Segment to get text from. * @param start Start offset in segment of token. * @param end End offset in segment of token. * @param tokenType The token's type. * @param startOffset The offset in the document at which the token occurs. */ @Override public void addToken(Segment segment, int start, int end, int tokenType, int startOffset) { switch (tokenType) { // Since reserved words, functions, and data types are all passed // into here as "identifiers," we have to see what the token // really is... case Token.IDENTIFIER: int value = wordsToHighlight.get(segment, start,end); if (value!=-1) tokenType = value; break; } super.addToken(segment, start, end, tokenType, startOffset); } /** * {@inheritDoc} */ @Override public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "rem ", null }; } /** * Returns whether tokens of the specified type should have "mark * occurrences" enabled for the current programming language. * * @param type The token type. * @return Whether tokens of this type should have "mark occurrences" * enabled. */ @Override public boolean getMarkOccurrencesOfTokenType(int type) { return type==Token.IDENTIFIER || type==Token.VARIABLE; } /** * Returns the words to highlight for Windows batch files. * * @return A TokenMap containing the words to highlight for * Windows batch files. * @see org.fife.ui.rsyntaxtextarea.AbstractTokenMaker#getWordsToHighlight */ @Override public TokenMap getWordsToHighlight() { TokenMap tokenMap = new TokenMap(true); // Ignore case. int reservedWord = Token.RESERVED_WORD; // Batch-file specific stuff (?) tokenMap.put("goto", reservedWord); tokenMap.put("if", reservedWord); tokenMap.put("shift", reservedWord); tokenMap.put("start", reservedWord); // General command line stuff tokenMap.put("ansi.sys", reservedWord); tokenMap.put("append", reservedWord); tokenMap.put("arp", reservedWord); tokenMap.put("assign", reservedWord); tokenMap.put("assoc", reservedWord); tokenMap.put("at", reservedWord); tokenMap.put("attrib", reservedWord); tokenMap.put("break", reservedWord); tokenMap.put("cacls", reservedWord); tokenMap.put("call", reservedWord); tokenMap.put("cd", reservedWord); tokenMap.put("chcp", reservedWord); tokenMap.put("chdir", reservedWord); tokenMap.put("chkdsk", reservedWord); tokenMap.put("chknfts", reservedWord); tokenMap.put("choice", reservedWord); tokenMap.put("cls", reservedWord); tokenMap.put("cmd", reservedWord); tokenMap.put("color", reservedWord); tokenMap.put("comp", reservedWord); tokenMap.put("compact", reservedWord); tokenMap.put("control", reservedWord); tokenMap.put("convert", reservedWord); tokenMap.put("copy", reservedWord); tokenMap.put("ctty", reservedWord); tokenMap.put("date", reservedWord); tokenMap.put("debug", reservedWord); tokenMap.put("defrag", reservedWord); tokenMap.put("del", reservedWord); tokenMap.put("deltree", reservedWord); tokenMap.put("dir", reservedWord); tokenMap.put("diskcomp", reservedWord); tokenMap.put("diskcopy", reservedWord); tokenMap.put("do", reservedWord); tokenMap.put("doskey", reservedWord); tokenMap.put("dosshell", reservedWord); tokenMap.put("drivparm", reservedWord); tokenMap.put("echo", reservedWord); tokenMap.put("edit", reservedWord); tokenMap.put("edlin", reservedWord); tokenMap.put("emm386", reservedWord); tokenMap.put("erase", reservedWord); tokenMap.put("exist", reservedWord); tokenMap.put("exit", reservedWord); tokenMap.put("expand", reservedWord); tokenMap.put("extract", reservedWord); tokenMap.put("fasthelp", reservedWord); tokenMap.put("fc", reservedWord); tokenMap.put("fdisk", reservedWord); tokenMap.put("find", reservedWord); tokenMap.put("for", reservedWord); tokenMap.put("format", reservedWord); tokenMap.put("ftp", reservedWord); tokenMap.put("graftabl", reservedWord); tokenMap.put("help", reservedWord); tokenMap.put("ifshlp.sys", reservedWord); tokenMap.put("in", reservedWord); tokenMap.put("ipconfig", reservedWord); tokenMap.put("keyb", reservedWord); tokenMap.put("kill", reservedWord); tokenMap.put("label", reservedWord); tokenMap.put("lh", reservedWord); tokenMap.put("loadfix", reservedWord); tokenMap.put("loadhigh", reservedWord); tokenMap.put("lock", reservedWord); tokenMap.put("md", reservedWord); tokenMap.put("mem", reservedWord); tokenMap.put("mkdir", reservedWord); tokenMap.put("mklink", reservedWord); tokenMap.put("mode", reservedWord); tokenMap.put("more", reservedWord); tokenMap.put("move", reservedWord); tokenMap.put("msav", reservedWord); tokenMap.put("msd", reservedWord); tokenMap.put("mscdex", reservedWord); tokenMap.put("nbtstat", reservedWord); tokenMap.put("net", reservedWord); tokenMap.put("netstat", reservedWord); tokenMap.put("nlsfunc", reservedWord); tokenMap.put("not", reservedWord); tokenMap.put("nslookup", reservedWord); tokenMap.put("path", reservedWord); tokenMap.put("pathping", reservedWord); tokenMap.put("pause", reservedWord); tokenMap.put("ping", reservedWord); tokenMap.put("power", reservedWord); tokenMap.put("print", reservedWord); tokenMap.put("prompt", reservedWord); tokenMap.put("pushd", reservedWord); tokenMap.put("popd", reservedWord); tokenMap.put("qbasic", reservedWord); tokenMap.put("rd", reservedWord); tokenMap.put("ren", reservedWord); tokenMap.put("rename", reservedWord); tokenMap.put("rmdir", reservedWord); tokenMap.put("route", reservedWord); tokenMap.put("sc", reservedWord); tokenMap.put("scandisk", reservedWord); tokenMap.put("scandreg", reservedWord); tokenMap.put("set", reservedWord); tokenMap.put("setx", reservedWord); tokenMap.put("setver", reservedWord); tokenMap.put("share", reservedWord); tokenMap.put("shutdown", reservedWord); tokenMap.put("smartdrv", reservedWord); tokenMap.put("sort", reservedWord); tokenMap.put("subset", reservedWord); tokenMap.put("switches", reservedWord); tokenMap.put("sys", reservedWord); tokenMap.put("time", reservedWord); tokenMap.put("tracert", reservedWord); tokenMap.put("tree", reservedWord); tokenMap.put("type", reservedWord); tokenMap.put("undelete", reservedWord); tokenMap.put("unformat", reservedWord); tokenMap.put("unlock", reservedWord); tokenMap.put("ver", reservedWord); tokenMap.put("verify", reservedWord); tokenMap.put("vol", reservedWord); tokenMap.put("xcopy", reservedWord); return tokenMap; } /** * Returns a list of tokens representing the given text. * * @param text The text to break into tokens. * @param startTokenType The token with which to start tokenizing. * @param startOffset The offset at which the line of tokens begins. * @return A linked list of tokens representing text. */ public Token getTokenList(Segment text, int startTokenType, final int startOffset) { resetTokenList(); char[] array = text.array; int offset = text.offset; int count = text.count; int end = offset + count; // See, when we find a token, its starting position is always of the form: // 'startOffset + (currentTokenStart-offset)'; but since startOffset and // offset are constant, tokens' starting positions become: // 'newStartOffset+currentTokenStart' for one less subtraction operation. int newStartOffset = startOffset - offset; currentTokenStart = offset; currentTokenType = startTokenType; //beginning: for (int i=offset; i-1) { addToken(text, currentTokenStart,i, Token.OPERATOR, newStartOffset+currentTokenStart); currentTokenType = Token.NULL; break; } else { currentTokenType = Token.IDENTIFIER; break; } } // End of switch (c). break; case Token.WHITESPACE: switch (c) { case ' ': case '\t': break; // Still whitespace. case '"': addToken(text, currentTokenStart,i-1, Token.WHITESPACE, newStartOffset+currentTokenStart); currentTokenStart = i; currentTokenType = Token.ERROR_STRING_DOUBLE; break; case '%': addToken(text, currentTokenStart,i-1, Token.WHITESPACE, newStartOffset+currentTokenStart); currentTokenStart = i; currentTokenType = Token.VARIABLE; break; // The "separators". case '(': case ')': addToken(text, currentTokenStart,i-1, Token.WHITESPACE, newStartOffset+currentTokenStart); addToken(text, i,i, Token.SEPARATOR, newStartOffset+i); currentTokenType = Token.NULL; break; // The "separators2". case ',': case ';': addToken(text, currentTokenStart,i-1, Token.WHITESPACE, newStartOffset+currentTokenStart); addToken(text, i,i, Token.IDENTIFIER, newStartOffset+i); currentTokenType = Token.NULL; break; // Newer version of EOL comments, or a label case ':': addToken(text, currentTokenStart,i-1, Token.WHITESPACE, newStartOffset+currentTokenStart); currentTokenStart = i; // If the previous (whitespace) token was the first token // added, this is a new-style comment or a label if (firstToken.getNextToken()==null) { if (i-1) { addToken(text, currentTokenStart,i, Token.OPERATOR, newStartOffset+currentTokenStart); currentTokenType = Token.NULL; break; } else { currentTokenType = Token.IDENTIFIER; } } // End of switch (c). break; default: // Should never happen case Token.IDENTIFIER: switch (c) { case ' ': case '\t': // Check for REM comments. if (i-currentTokenStart==3 && (array[i-3]=='r' || array[i-3]=='R') && (array[i-2]=='e' || array[i-2]=='E') && (array[i-1]=='m' || array[i-1]=='M')) { currentTokenType = Token.COMMENT_EOL; break; } addToken(text, currentTokenStart,i-1, Token.IDENTIFIER, newStartOffset+currentTokenStart); currentTokenStart = i; currentTokenType = Token.WHITESPACE; break; case '"': addToken(text, currentTokenStart,i-1, Token.IDENTIFIER, newStartOffset+currentTokenStart); currentTokenStart = i; currentTokenType = Token.ERROR_STRING_DOUBLE; break; case '%': addToken(text, currentTokenStart,i-1, Token.IDENTIFIER, newStartOffset+currentTokenStart); currentTokenStart = i; currentTokenType = Token.VARIABLE; break; // Should be part of identifiers, but not at end of "REM". case '\\': // Check for REM comments. if (i-currentTokenStart==3 && (array[i-3]=='r' || array[i-3]=='R') && (array[i-2]=='e' || array[i-2]=='E') && (array[i-1]=='m' || array[i-1]=='M')) { currentTokenType = Token.COMMENT_EOL; } break; case '.': case '_': break; // Characters good for identifiers. // The "separators". case '(': case ')': addToken(text, currentTokenStart,i-1, Token.IDENTIFIER, newStartOffset+currentTokenStart); addToken(text, i,i, Token.SEPARATOR, newStartOffset+i); currentTokenType = Token.NULL; break; // The "separators2". case ',': case ';': addToken(text, currentTokenStart,i-1, Token.IDENTIFIER, newStartOffset+currentTokenStart); addToken(text, i,i, Token.IDENTIFIER, newStartOffset+i); currentTokenType = Token.NULL; break; default: // Just to speed things up a tad, as this will usually be the case. if (RSyntaxUtilities.isLetterOrDigit(c) || c=='\\') { break; } int indexOf = operators.indexOf(c); if (indexOf>-1) { addToken(text, currentTokenStart,i-1, Token.IDENTIFIER, newStartOffset+currentTokenStart); addToken(text, i,i, Token.OPERATOR, newStartOffset+i); currentTokenType = Token.NULL; break; } // Otherwise, fall through and assume we're still okay as an IDENTIFIER... } // End of switch (c). break; case Token.COMMENT_EOL: i = end - 1; addToken(text, currentTokenStart,i, Token.COMMENT_EOL, newStartOffset+currentTokenStart); // We need to set token type to null so at the bottom we don't add one more token. currentTokenType = Token.NULL; break; case Token.PREPROCESSOR: // Used for labels i = end - 1; addToken(text, currentTokenStart,i, Token.PREPROCESSOR, newStartOffset+currentTokenStart); // We need to set token type to null so at the bottom we don't add one more token. currentTokenType = Token.NULL; break; case Token.ERROR_STRING_DOUBLE: if (c=='"') { addToken(text, currentTokenStart,i, Token.LITERAL_STRING_DOUBLE_QUOTE, newStartOffset+currentTokenStart); currentTokenStart = i + 1; currentTokenType = Token.NULL; } // Otherwise, we're still an unclosed string... break; case Token.VARIABLE: if (i==currentTokenStart+1) { // first character after '%'. varType = VariableType.NORMAL_VAR; switch (c) { case '{': varType = VariableType.BRACKET_VAR; break; case '~': varType = VariableType.TILDE_VAR; break; case '%': varType = VariableType.DOUBLE_PERCENT_VAR; break; default: if (RSyntaxUtilities.isLetter(c) || c=='_' || c==' ') { // No tab, just space; spaces are okay in variable names. break; } else if (RSyntaxUtilities.isDigit(c)) { // Single-digit command-line argument ("%1"). addToken(text, currentTokenStart,i, Token.VARIABLE, newStartOffset+currentTokenStart); currentTokenType = Token.NULL; break; } else { // Anything else, ???. addToken(text, currentTokenStart,i-1, Token.VARIABLE, newStartOffset+currentTokenStart); // ??? i--; currentTokenType = Token.NULL; break; } } // End of switch (c). } else { // Character other than first after the '%'. switch (varType) { case BRACKET_VAR: if (c=='}') { addToken(text, currentTokenStart,i, Token.VARIABLE, newStartOffset+currentTokenStart); currentTokenType = Token.NULL; } break; case TILDE_VAR: if (!RSyntaxUtilities.isLetterOrDigit(c)) { addToken(text, currentTokenStart,i-1, Token.VARIABLE, newStartOffset+currentTokenStart); i--; currentTokenType = Token.NULL; } break; case DOUBLE_PERCENT_VAR: // Can be terminated with "%%", or (essentially) a space. // substring chars are valid if (c=='%') { if (iJFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a * time, and hands the scanner this line as an array of characters (a Segment * really). Since tokens contain pointers to char arrays instead of Strings * holding their contents, there is no need for allocating new memory for * Strings.

* * The actual algorithm generated for scanning has, of course, not been * modified.

* * If you wish to regenerate this file yourself, keep in mind the following: *

    *
  • The generated XMLTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
  • *
  • You should also change the declaration/definition of zzBuffer to NOT * be initialized. This is a needless memory allocation for us since we * will be pointing the array somewhere else anyway.
  • *
  • You should NOT call yylex() on the generated scanner * directly; rather, you should use getTokenList as you would * with any other TokenMaker instance.
  • *
* * @author Robert Futrell * @version 0.5 * */ %% %public %class XMLTokenMaker %extends AbstractMarkupTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token %{ /** * Type specific to XMLTokenMaker denoting a line ending with an unclosed * double-quote attribute. */ public static final int INTERNAL_ATTR_DOUBLE = -1; /** * Type specific to XMLTokenMaker denoting a line ending with an unclosed * single-quote attribute. */ public static final int INTERNAL_ATTR_SINGLE = -2; /** * Token type specific to XMLTokenMaker denoting a line ending with an * unclosed XML tag; thus a new line is beginning still inside of the tag. */ public static final int INTERNAL_INTAG = -3; /** * Token type specific to XMLTokenMaker denoting a line ending with an * unclosed DOCTYPE element. */ public static final int INTERNAL_DTD = -4; /** * Token type specific to XMLTokenMaker denoting a line ending with an * unclosed, locally-defined DTD in a DOCTYPE element. */ public static final int INTERNAL_DTD_INTERNAL = -5; /** * Token type specific to XMLTokenMaker denoting a line ending with an * unclosed comment. The state to return to when this comment ends is * embedded in the token type as well. */ public static final int INTERNAL_IN_XML_COMMENT = -(1<<11); /** * Whether closing markup tags are automatically completed for HTML. */ private static boolean completeCloseTags; /** * Whether the DTD we're currently in is a locally-defined one. This * field is only valid when in a DOCTYPE element (the state). */ private boolean inInternalDtd; /** * The state we were in prior to the current one. This is used to know * what state to resume after an MLC ends. */ private int prevState; /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ public XMLTokenMaker() { } static { completeCloseTags = true; } /** * Adds the token specified to the current linked list of tokens as an * "end token;" that is, at zzMarkedPos. * * @param tokenType The token's type. */ private void addEndToken(int tokenType) { addToken(zzMarkedPos,zzMarkedPos, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. * @see #addToken(int, int, int) */ private void addHyperlinkToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so, true); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. */ private void addToken(int start, int end, int tokenType) { int so = start + offsetShift; addToken(zzBuffer, start,end, tokenType, so); } /** * Adds the token specified to the current linked list of tokens. * * @param array The character array. * @param start The starting offset in the array. * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token * occurs. */ @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } /** * {@inheritDoc} */ protected OccurrenceMarker createOccurrenceMarker() { return new XmlOccurrenceMarker(); } /** * Returns whether markup close tags should be completed. For XML, the * default value is true. * * @return Whether closing markup tags are completed. * @see #setCompleteCloseTags(boolean) */ @Override public boolean getCompleteCloseTags() { return completeCloseTags; } /** * Static version of {@link #getCompleteCloseTags()}. This hack is * unfortunately needed for applications to be able to query this value * without instantiating this class. * * @return Whether closing markup tags are completed. * @see #setCompleteCloseTags(boolean) */ public static boolean getCompleteCloseMarkupTags() { return completeCloseTags; } /** * Returns Token.MARKUP_TAG_NAME. * * @param type The token type. * @return Whether tokens of this type should have "mark occurrences" * enabled. */ public boolean getMarkOccurrencesOfTokenType(int type) { return type==Token.MARKUP_TAG_NAME; } /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by * subclasses so they can correctly implement syntax highlighting. * * @param text The text from which to get tokens. * @param initialTokenType The token type we should start with. * @param startOffset The offset into the document at which * text starts. * @return The first Token in a linked list representing * the syntax highlighted text. */ public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; prevState = YYINITIAL; inInternalDtd = false; // Start off in the proper state. int state = YYINITIAL; switch (initialTokenType) { case Token.MARKUP_COMMENT: state = COMMENT; break; case INTERNAL_DTD: state = DTD; break; case INTERNAL_DTD_INTERNAL: state = DTD; inInternalDtd = true; break; case INTERNAL_ATTR_DOUBLE: state = INATTR_DOUBLE; break; case INTERNAL_ATTR_SINGLE: state = INATTR_SINGLE; break; case Token.MARKUP_PROCESSING_INSTRUCTION: state = PI; break; case INTERNAL_INTAG: state = INTAG; break; case Token.MARKUP_CDATA: state = CDATA; break; default: if (initialTokenType<-1024) { // INTERNAL_IN_XML_COMMENT - prevState int main = -(-initialTokenType & 0xffffff00); switch (main) { default: // Should never happen case INTERNAL_IN_XML_COMMENT: state = COMMENT; break; } prevState = -initialTokenType&0xff; } else { // Shouldn't happen state = Token.NULL; } } start = text.offset; s = text; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); return new TokenImpl(); } } /** * Sets whether markup close tags should be completed. * * @param complete Whether closing markup tags are completed. * @see #getCompleteCloseTags() */ public static void setCompleteCloseTags(boolean complete) { completeCloseTags = complete; } /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } /** * Resets the scanner to read from a new input stream. * Does not close the old reader. * * All internal variables are reset, the old input stream * cannot be reused (internal buffer is discarded and lost). * Lexical state is set to YY_INITIAL. * * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* * We replaced the line below with the two below it because zzRefill * no longer "refills" the buffer (since the way we do it, it's always * "full" the first time through, since it points to the segment's * array). So, we assign zzEndRead here. */ //zzStartRead = zzEndRead = s.offset; zzStartRead = s.offset; zzEndRead = zzStartRead + s.count - 1; zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; zzLexicalState = YYINITIAL; zzReader = reader; zzAtBOL = true; zzAtEOF = false; } %} NameStartChar = ([\:A-Z_a-z]) NameChar = ({NameStartChar}|[\-\.0-9]) TagName = ({NameStartChar}{NameChar}*) Whitespace = ([ \t\f]) LineTerminator = ([\n]) Identifier = ([^ \t\n<&]+) EntityReference = ([&][^; \t]*[;]?) InTagIdentifier = ([^ \t\n\"\'=\/>]+) CDataBegin = ("") URLGenDelim = ([:\/\?#\[\]@]) URLSubDelim = ([\!\$&'\(\)\*\+,;=]) URLUnreserved = ([A-Za-z_0-9\-\.\~]) URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) URLCharacters = ({URLCharacter}*) URLEndCharacter = ([\/\$A-Za-z0-9]) URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) %state COMMENT %state PI %state DTD %state INTAG %state INATTR_DOUBLE %state INATTR_SINGLE %state CDATA %% { "" { int temp = zzMarkedPos; addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); start = temp; yybegin(prevState); } "-" {} {LineTerminator} | <> { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addEndToken(INTERNAL_IN_XML_COMMENT - prevState); return firstToken; } } { [^\n\?]+ {} {LineTerminator} { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } "?>" { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.MARKUP_PROCESSING_INSTRUCTION); } "?" {} <> { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } } { [^\n\[\]<>]+ {} "