Skip to content

Instantly share code, notes, and snippets.

@erichocean
Created January 5, 2011 05:03
Show Gist options
  • Save erichocean/765953 to your computer and use it in GitHub Desktop.
Save erichocean/765953 to your computer and use it in GitHub Desktop.
PEG grammar output for ECMAScript_unified.peg
/* PEG → JavaScript parser generator, with its dependencies.
* See http://inimino.org/~inimino/blog/peg_first_release */
var sys = require('sys') ;
;(function(exports){
exports.generateParser=generateParser
exports.generateParserThrowing=generateParserThrowing
exports.showTree=showTree
exports.rawFailDump=rawFailDump
function generateParser(peg,opts){var pt
peg=peg.replace(/^[\n\r]+|[\n\r]+$/g,'') // TODO: regenerate the PEG parser and fix this
pt=p_PEG_v5_RuleSet(peg)
if(!pt[0])return [false,"Parse error in PEG input"] // TODO: provide useful parse errors
pt=pt[1]
PEG_codegen_5(pt)
try{return [true,pt.code_v5()(opts||{})]}
catch(e){return [false,e.toString()]}}
function generateParserThrowing(peg,opts){var x
x=generateParser(peg,opts)
if(!x[0])throw new Error(x[1])
return x[1]}
/* PEG_v5 */
function p_PEG_v5_RuleSet(str){
var tbl=[],pos=0,l=str.length+1;while(l--)tbl.push({});l=str.length
function PropSpec(a){var x,c,p=pos;if(x=tbl[p]['PropSpec']){pos=x[1];a.push([p,'PropSpec']);return 1}if(x==false)return 0;c=[];return fin(c,p,'PropSpec',_PropSpec(c),a)}
function BinaryUnicodeProperty(a){var x,c,p=pos;if(x=tbl[p]['BinaryUnicodeProperty']){pos=x[1];a.push([p,'BinaryUnicodeProperty']);return 1}if(x==false)return 0;c=[];return fin(c,p,'BinaryUnicodeProperty',_BinaryUnicodeProperty(c),a)}
function UnicodeProperty(a){var x,c,p=pos;if(x=tbl[p]['UnicodeProperty']){pos=x[1];a.push([p,'UnicodeProperty']);return 1}if(x==false)return 0;c=[];return fin(c,p,'UnicodeProperty',_UnicodeProperty(c),a)}
function PropVal(a){var x,c,p=pos;if(x=tbl[p]['PropVal']){pos=x[1];a.push([p,'PropVal']);return 1}if(x==false)return 0;c=[];return fin(c,p,'PropVal',_PropVal(c),a)}
function ScriptOrCatPropVal(a){var x,c,p=pos;if(x=tbl[p]['ScriptOrCatPropVal']){pos=x[1];a.push([p,'ScriptOrCatPropVal']);return 1}if(x==false)return 0;c=[];return fin(c,p,'ScriptOrCatPropVal',_ScriptOrCatPropVal(c),a)}
function UPlusCodePoint(a){var x,c,p=pos;if(x=tbl[p]['UPlusCodePoint']){pos=x[1];a.push([p,'UPlusCodePoint']);return 1}if(x==false)return 0;c=[];return fin(c,p,'UPlusCodePoint',_UPlusCodePoint(c),a)}
function PositiveSpec(a){var x,c,p=pos;if(x=tbl[p]['PositiveSpec']){pos=x[1];a.push([p,'PositiveSpec']);return 1}if(x==false)return 0;c=[];return fin(c,p,'PositiveSpec',_PositiveSpec(c),a)}
function NegativeSpec(a){var x,c,p=pos;if(x=tbl[p]['NegativeSpec']){pos=x[1];a.push([p,'NegativeSpec']);return 1}if(x==false)return 0;c=[];return fin(c,p,'NegativeSpec',_NegativeSpec(c),a)}
function CodePoint(a){var x,c,p=pos;if(x=tbl[p]['CodePoint']){pos=x[1];a.push([p,'CodePoint']);return 1}if(x==false)return 0;c=[];return fin(c,p,'CodePoint',_CodePoint(c),a)}
function CodePointLit(a){var x,c,p=pos;if(x=tbl[p]['CodePointLit']){pos=x[1];a.push([p,'CodePointLit']);return 1}if(x==false)return 0;c=[];return fin(c,p,'CodePointLit',_CodePointLit(c),a)}
function CodePointFrom(a){var x,c,p=pos;if(x=tbl[p]['CodePointFrom']){pos=x[1];a.push([p,'CodePointFrom']);return 1}if(x==false)return 0;c=[];return fin(c,p,'CodePointFrom',_CodePointFrom(c),a)}
function CodePointTo(a){var x,c,p=pos;if(x=tbl[p]['CodePointTo']){pos=x[1];a.push([p,'CodePointTo']);return 1}if(x==false)return 0;c=[];return fin(c,p,'CodePointTo',_CodePointTo(c),a)}
function CodePointRange(a){var x,c,p=pos;if(x=tbl[p]['CodePointRange']){pos=x[1];a.push([p,'CodePointRange']);return 1}if(x==false)return 0;c=[];return fin(c,p,'CodePointRange',_CodePointRange(c),a)}
function UnicodePropSpec(a){var x,c,p=pos;if(x=tbl[p]['UnicodePropSpec']){pos=x[1];a.push([p,'UnicodePropSpec']);return 1}if(x==false)return 0;c=[];return fin(c,p,'UnicodePropSpec',_UnicodePropSpec(c),a)}
function CodePointExpr(a){var x,c,p=pos;if(x=tbl[p]['CodePointExpr']){pos=x[1];a.push([p,'CodePointExpr']);return 1}if(x==false)return 0;c=[];return fin(c,p,'CodePointExpr',_CodePointExpr(c),a)}
function CharSetUnion(a){var x,c,p=pos;if(x=tbl[p]['CharSetUnion']){pos=x[1];a.push([p,'CharSetUnion']);return 1}if(x==false)return 0;c=[];return fin(c,p,'CharSetUnion',_CharSetUnion(c),a)}
function CharSetIntersection(a){var x,c,p=pos;if(x=tbl[p]['CharSetIntersection']){pos=x[1];a.push([p,'CharSetIntersection']);return 1}if(x==false)return 0;c=[];return fin(c,p,'CharSetIntersection',_CharSetIntersection(c),a)}
function HEXDIG(a){var x,c,p=pos;if(x=tbl[p]['HEXDIG']){pos=x[1];a.push([p,'HEXDIG']);return 1}if(x==false)return 0;c=[];return fin(c,p,'HEXDIG',_HEXDIG(c),a)}
function CharSetDifference(a){var x,c,p=pos;if(x=tbl[p]['CharSetDifference']){pos=x[1];a.push([p,'CharSetDifference']);return 1}if(x==false)return 0;c=[];return fin(c,p,'CharSetDifference',_CharSetDifference(c),a)}
function CharEscape(a){var x,c,p=pos;if(x=tbl[p]['CharEscape']){pos=x[1];a.push([p,'CharEscape']);return 1}if(x==false)return 0;c=[];return fin(c,p,'CharEscape',_CharEscape(c),a)}
function CharSetExpr(a){var x,c,p=pos;if(x=tbl[p]['CharSetExpr']){pos=x[1];a.push([p,'CharSetExpr']);return 1}if(x==false)return 0;c=[];return fin(c,p,'CharSetExpr',_CharSetExpr(c),a)}
function StrLit(a){var x,c,p=pos;if(x=tbl[p]['StrLit']){pos=x[1];a.push([p,'StrLit']);return 1}if(x==false)return 0;c=[];return fin(c,p,'StrLit',_StrLit(c),a)}
function CharSet(a){var x,c,p=pos;if(x=tbl[p]['CharSet']){pos=x[1];a.push([p,'CharSet']);return 1}if(x==false)return 0;c=[];return fin(c,p,'CharSet',_CharSet(c),a)}
function PosCharSet(a){var x,c,p=pos;if(x=tbl[p]['PosCharSet']){pos=x[1];a.push([p,'PosCharSet']);return 1}if(x==false)return 0;c=[];return fin(c,p,'PosCharSet',_PosCharSet(c),a)}
function NegCharSet(a){var x,c,p=pos;if(x=tbl[p]['NegCharSet']){pos=x[1];a.push([p,'NegCharSet']);return 1}if(x==false)return 0;c=[];return fin(c,p,'NegCharSet',_NegCharSet(c),a)}
function Empty(a){var x,c,p=pos;if(x=tbl[p]['Empty']){pos=x[1];a.push([p,'Empty']);return 1}if(x==false)return 0;c=[];return fin(c,p,'Empty',_Empty(c),a)}
function AtomicExpr(a){var x,c,p=pos;if(x=tbl[p]['AtomicExpr']){pos=x[1];a.push([p,'AtomicExpr']);return 1}if(x==false)return 0;c=[];return fin(c,p,'AtomicExpr',_AtomicExpr(c),a)}
function ParenthExpr(a){var x,c,p=pos;if(x=tbl[p]['ParenthExpr']){pos=x[1];a.push([p,'ParenthExpr']);return 1}if(x==false)return 0;c=[];return fin(c,p,'ParenthExpr',_ParenthExpr(c),a)}
function Replicand(a){var x,c,p=pos;if(x=tbl[p]['Replicand']){pos=x[1];a.push([p,'Replicand']);return 1}if(x==false)return 0;c=[];return fin(c,p,'Replicand',_Replicand(c),a)}
function N(a){var x,c,p=pos;if(x=tbl[p]['N']){pos=x[1];a.push([p,'N']);return 1}if(x==false)return 0;c=[];return fin(c,p,'N',_N(c),a)}
function M(a){var x,c,p=pos;if(x=tbl[p]['M']){pos=x[1];a.push([p,'M']);return 1}if(x==false)return 0;c=[];return fin(c,p,'M',_M(c),a)}
function Optional(a){var x,c,p=pos;if(x=tbl[p]['Optional']){pos=x[1];a.push([p,'Optional']);return 1}if(x==false)return 0;c=[];return fin(c,p,'Optional',_Optional(c),a)}
function MNRep(a){var x,c,p=pos;if(x=tbl[p]['MNRep']){pos=x[1];a.push([p,'MNRep']);return 1}if(x==false)return 0;c=[];return fin(c,p,'MNRep',_MNRep(c),a)}
function PosRep(a){var x,c,p=pos;if(x=tbl[p]['PosRep']){pos=x[1];a.push([p,'PosRep']);return 1}if(x==false)return 0;c=[];return fin(c,p,'PosRep',_PosRep(c),a)}
function AnyRep(a){var x,c,p=pos;if(x=tbl[p]['AnyRep']){pos=x[1];a.push([p,'AnyRep']);return 1}if(x==false)return 0;c=[];return fin(c,p,'AnyRep',_AnyRep(c),a)}
function SeqUnit(a){var x,c,p=pos;if(x=tbl[p]['SeqUnit']){pos=x[1];a.push([p,'SeqUnit']);return 1}if(x==false)return 0;c=[];return fin(c,p,'SeqUnit',_SeqUnit(c),a)}
function Sequence(a){var x,c,p=pos;if(x=tbl[p]['Sequence']){pos=x[1];a.push([p,'Sequence']);return 1}if(x==false)return 0;c=[];return fin(c,p,'Sequence',_Sequence(c),a)}
function IdentChar(a){var x,c,p=pos;if(x=tbl[p]['IdentChar']){pos=x[1];a.push([p,'IdentChar']);return 1}if(x==false)return 0;c=[];return fin(c,p,'IdentChar',_IdentChar(c),a)}
function IdentStartChar(a){var x,c,p=pos;if(x=tbl[p]['IdentStartChar']){pos=x[1];a.push([p,'IdentStartChar']);return 1}if(x==false)return 0;c=[];return fin(c,p,'IdentStartChar',_IdentStartChar(c),a)}
function OrdChoice(a){var x,c,p=pos;if(x=tbl[p]['OrdChoice']){pos=x[1];a.push([p,'OrdChoice']);return 1}if(x==false)return 0;c=[];return fin(c,p,'OrdChoice',_OrdChoice(c),a)}
function S(a){var x,c,p=pos;if(x=tbl[p]['S']){pos=x[1];a.push([p,'S']);return 1}if(x==false)return 0;c=[];return fin(c,p,'S',_S(c),a)}
function SpaceAtom(a){var x,c,p=pos;if(x=tbl[p]['SpaceAtom']){pos=x[1];a.push([p,'SpaceAtom']);return 1}if(x==false)return 0;c=[];return fin(c,p,'SpaceAtom',_SpaceAtom(c),a)}
function LB(a){var x,c,p=pos;if(x=tbl[p]['LB']){pos=x[1];a.push([p,'LB']);return 1}if(x==false)return 0;c=[];return fin(c,p,'LB',_LB(c),a)}
function NonTerminal(a){var x,c,p=pos;if(x=tbl[p]['NonTerminal']){pos=x[1];a.push([p,'NonTerminal']);return 1}if(x==false)return 0;c=[];return fin(c,p,'NonTerminal',_NonTerminal(c),a)}
function Comment(a){var x,c,p=pos;if(x=tbl[p]['Comment']){pos=x[1];a.push([p,'Comment']);return 1}if(x==false)return 0;c=[];return fin(c,p,'Comment',_Comment(c),a)}
function Rule(a){var x,c,p=pos;if(x=tbl[p]['Rule']){pos=x[1];a.push([p,'Rule']);return 1}if(x==false)return 0;c=[];return fin(c,p,'Rule',_Rule(c),a)}
function RuleSet(a){var x,c,p=pos;if(x=tbl[p]['RuleSet']){pos=x[1];a.push([p,'RuleSet']);return 1}if(x==false)return 0;c=[];return fin(c,p,'RuleSet',_RuleSet(c),a)}
function PosLookahead(a){var x,c,p=pos;if(x=tbl[p]['PosLookahead']){pos=x[1];a.push([p,'PosLookahead']);return 1}if(x==false)return 0;c=[];return fin(c,p,'PosLookahead',_PosLookahead(c),a)}
function NegLookahead(a){var x,c,p=pos;if(x=tbl[p]['NegLookahead']){pos=x[1];a.push([p,'NegLookahead']);return 1}if(x==false)return 0;c=[];return fin(c,p,'NegLookahead',_NegLookahead(c),a)}
var _PropSpec=o(BinaryUnicodeProperty,q(UnicodeProperty,o(sl_0,sl_1),PropVal),q(ScriptOrCatPropVal,r(0,0,q(sl_2,ScriptOrCatPropVal))))
var _BinaryUnicodeProperty=UnicodeProperty
var _UnicodeProperty=r(1,0,cs_0)
var _PropVal=r(1,0,cs_1)
var _ScriptOrCatPropVal=r(1,0,cs_2)
var _UPlusCodePoint=q(sl_3,r(4,6,HEXDIG))
var _PositiveSpec=q(sl_4,PropSpec,sl_5)
var _NegativeSpec=q(sl_6,PropSpec,sl_7)
var _CodePoint=o(UPlusCodePoint,CodePointLit)
var _CodePointLit=cs_3
var _CodePointFrom=CodePoint
var _CodePointTo=CodePoint
var _CodePointRange=q(CodePointFrom,sl_8,CodePointTo)
var _UnicodePropSpec=o(PositiveSpec,NegativeSpec)
var _CodePointExpr=o(UnicodePropSpec,CodePointRange,CodePoint)
var _CharSetUnion=r(1,0,q(CodePointExpr,r(0,1,S)))
var _CharSetIntersection=q(CharSetUnion,r(0,0,q(r(0,1,S),sl_9,r(0,1,S),CharSetUnion)))
var _HEXDIG=cs_4
var _CharSetDifference=q(CharSetIntersection,r(0,0,q(r(0,1,S),cs_5,r(0,1,S),CharSetIntersection)))
var _CharEscape=o(q(cs_6,r(4,4,HEXDIG)),q(cs_7,cs_8))
var _CharSetExpr=q(CharSetDifference,r(0,1,S))
var _StrLit=q(cs_9,r(0,0,o(CharEscape,cs_10)),cs_11)
var _CharSet=o(NegCharSet,PosCharSet)
var _PosCharSet=q(sl_10,r(0,1,S),o(CharSetExpr,e),sl_11)
var _NegCharSet=q(sl_12,r(0,1,S),o(CharSetExpr,e),sl_13)
var _Empty=sl_14
var _AtomicExpr=o(Empty,CharSet,NonTerminal,StrLit)
var _ParenthExpr=q(sl_15,OrdChoice,sl_16)
var _Replicand=o(ParenthExpr,AtomicExpr)
var _N=r(0,0,cs_12)
var _M=r(0,0,cs_13)
var _Optional=q(Replicand,sl_17)
var _MNRep=q(Replicand,sl_18,M,r(0,1,q(sl_19,N)),sl_20)
var _PosRep=q(Replicand,sl_21)
var _AnyRep=q(Replicand,sl_22)
var _SeqUnit=o(AnyRep,PosRep,MNRep,Optional,ParenthExpr,PosLookahead,NegLookahead,AtomicExpr)
var _Sequence=r(1,0,q(SeqUnit,r(0,1,S)))
var _IdentChar=cs_14
var _IdentStartChar=cs_15
var _OrdChoice=q(r(0,1,S),Sequence,r(0,1,S),r(0,0,q(sl_23,r(0,1,S),Sequence,r(0,1,S))))
var _S=r(1,0,SpaceAtom)
var _SpaceAtom=o(sl_24,q(LB,sl_25))
var _LB=o(q(cs_16,cs_17),cs_18)
var _NonTerminal=q(IdentStartChar,r(0,0,IdentChar))
var _Comment=q(sl_26,r(0,0,cs_19))
var _Rule=q(NonTerminal,S,sl_27,S,OrdChoice)
var _RuleSet=o(q(o(Comment,Rule),r(0,0,q(r(1,0,LB),o(Comment,Rule)))),e)
var _PosLookahead=q(sl_28,OrdChoice,sl_29)
var _NegLookahead=q(sl_30,OrdChoice,sl_31)
function cs_0(){var c,x;if(pos==l)return false;c=g();x=c<65?c<33?c<32?0:1:c<45?0:c<46?1:0:c<96?c<91?1:c<95?0:1:c<97?0:c<123?1:0;if(x){pos++;return true}return false}
function cs_1(){var c,x;if(pos==l)return false;c=g();x=c<65?c<33?c<32?0:1:c<45?0:c<46?1:0:c<96?c<91?1:c<95?0:1:c<97?0:c<123?1:0;if(x){pos++;return true}return false}
function cs_2(){var c,x;if(pos==l)return false;c=g();x=c<65?c<33?c<32?0:1:c<45?0:c<46?1:0:c<96?c<91?1:c<95?0:1:c<97?0:c<123?1:0;if(x){pos++;return true}return false}
function cs_3(){var c,x;if(pos==l)return false;c=g();x=c<6159?c<94?c<32?c<0?0:1:c<33?0:c<93?1:0:c<5760?c<160?1:c<161?0:1:c<5761?0:c<6158?1:0:c<8287?c<8203?c<8192?1:0:c<8239?1:c<8240?0:1:c<8723?c<8288?0:c<8722?1:0:c<12288?1:c<12289?0:1;if(x){pos++;return true}return false}
function cs_4(){var c,x;if(pos==l)return false;c=g();x=c<58?c<48?0:1:c<65?0:c<71?1:0;if(x){pos++;return true}return false}
function cs_5(){var c,x;if(pos==l)return false;c=g();x=c<8722?0:c<8723?1:0;if(x){pos++;return true}return false}
function cs_6(){var c,x;if(pos==l)return false;c=g();x=c<92?0:c<93?1:0;if(x){pos++;return true}return false}
function cs_7(){var c,x;if(pos==l)return false;c=g();x=c<92?0:c<93?1:0;if(x){pos++;return true}return false}
function cs_8(){var c,x;if(pos==l)return false;c=g();x=c<114?c<103?c<102?0:1:c<110?0:c<111?1:0:c<117?c<115?1:c<116?0:1:c<118?0:c<119?1:0;if(x){pos++;return true}return false}
function cs_9(){var c,x;if(pos==l)return false;c=g();x=c<34?0:c<35?1:0;if(x){pos++;return true}return false}
function cs_10(){var c,x;if(pos==l)return false;c=g();x=c<35?c<0?0:c<34?1:0:c<92?1:c<93?0:1;if(x){pos++;return true}return false}
function cs_11(){var c,x;if(pos==l)return false;c=g();x=c<34?0:c<35?1:0;if(x){pos++;return true}return false}
function cs_12(){var c,x;if(pos==l)return false;c=g();x=c<48?0:c<58?1:0;if(x){pos++;return true}return false}
function cs_13(){var c,x;if(pos==l)return false;c=g();x=c<48?0:c<58?1:0;if(x){pos++;return true}return false}
function cs_14(){var c,x;if(pos==l)return false;c=g();x=c<91?c<58?c<48?0:1:c<65?0:1:c<96?c<95?0:1:c<97?0:c<123?1:0;if(x){pos++;return true}return false}
function cs_15(){var c,x;if(pos==l)return false;c=g();x=c<65?0:c<91?1:0;if(x){pos++;return true}return false}
function cs_16(){var c,x;if(pos==l)return false;c=g();x=c<13?0:c<14?1:0;if(x){pos++;return true}return false}
function cs_17(){var c,x;if(pos==l)return false;c=g();x=c<10?0:c<11?1:0;if(x){pos++;return true}return false}
function cs_18(){var c,x;if(pos==l)return false;c=g();x=c<11?c<10?0:1:c<13?0:c<14?1:0;if(x){pos++;return true}return false}
function cs_19(){var c,x;if(pos==l)return false;c=g();x=c<11?c<0?0:c<10?1:0:c<13?1:c<14?0:1;if(x){pos++;return true}return false}
function sl_0(){var p=pos;if(str.charCodeAt(p)==61){pos+=1;return true}return false}
function sl_1(){var p=pos;if(str.charCodeAt(p)==8800){pos+=1;return true}return false}
function sl_2(){var p=pos;if(str.charCodeAt(p)==124){pos+=1;return true}return false}
function sl_3(){var p=pos;if(str.charCodeAt(p++)==85&&str.charCodeAt(p)==43){pos+=2;return true}return false}
function sl_4(){var p=pos;if(str.charCodeAt(p++)==91&&str.charCodeAt(p)==58){pos+=2;return true}return false}
function sl_5(){var p=pos;if(str.charCodeAt(p++)==58&&str.charCodeAt(p)==93){pos+=2;return true}return false}
function sl_6(){var p=pos;if(str.charCodeAt(p++)==91&&str.charCodeAt(p++)==58&&str.charCodeAt(p)==94){pos+=3;return true}return false}
function sl_7(){var p=pos;if(str.charCodeAt(p++)==58&&str.charCodeAt(p)==93){pos+=2;return true}return false}
function sl_8(){var p=pos;if(str.charCodeAt(p)==45){pos+=1;return true}return false}
function sl_9(){var p=pos;if(str.charCodeAt(p)==8745){pos+=1;return true}return false}
function sl_10(){var p=pos;if(str.charCodeAt(p)==91){pos+=1;return true}return false}
function sl_11(){var p=pos;if(str.charCodeAt(p)==93){pos+=1;return true}return false}
function sl_12(){var p=pos;if(str.charCodeAt(p++)==91&&str.charCodeAt(p)==94){pos+=2;return true}return false}
function sl_13(){var p=pos;if(str.charCodeAt(p)==93){pos+=1;return true}return false}
function sl_14(){var p=pos;if(str.charCodeAt(p)==1013){pos+=1;return true}return false}
function sl_15(){var p=pos;if(str.charCodeAt(p)==40){pos+=1;return true}return false}
function sl_16(){var p=pos;if(str.charCodeAt(p)==41){pos+=1;return true}return false}
function sl_17(){var p=pos;if(str.charCodeAt(p)==63){pos+=1;return true}return false}
function sl_18(){var p=pos;if(str.charCodeAt(p)==123){pos+=1;return true}return false}
function sl_19(){var p=pos;if(str.charCodeAt(p)==44){pos+=1;return true}return false}
function sl_20(){var p=pos;if(str.charCodeAt(p)==125){pos+=1;return true}return false}
function sl_21(){var p=pos;if(str.charCodeAt(p)==43){pos+=1;return true}return false}
function sl_22(){var p=pos;if(str.charCodeAt(p)==42){pos+=1;return true}return false}
function sl_23(){var p=pos;if(str.charCodeAt(p)==47){pos+=1;return true}return false}
function sl_24(){var p=pos;if(str.charCodeAt(p)==32){pos+=1;return true}return false}
function sl_25(){var p=pos;if(str.charCodeAt(p)==32){pos+=1;return true}return false}
function sl_26(){var p=pos;if(str.charCodeAt(p)==59){pos+=1;return true}return false}
function sl_27(){var p=pos;if(str.charCodeAt(p)==8592){pos+=1;return true}return false}
function sl_28(){var p=pos;if(str.charCodeAt(p++)==38&&str.charCodeAt(p)==40){pos+=2;return true}return false}
function sl_29(){var p=pos;if(str.charCodeAt(p)==41){pos+=1;return true}return false}
function sl_30(){var p=pos;if(str.charCodeAt(p++)==33&&str.charCodeAt(p)==40){pos+=2;return true}return false}
function sl_31(){var p=pos;if(str.charCodeAt(p)==41){pos+=1;return true}return false}
function fin(c,p,n,r,a){if(r)a.push([p,n]);tbl[p][n]=r?[true,pos,c]:false;return r}
function e(){return true}
function o(){var args=arguments;return function(c){var i,l;for(i=0,l=args.length;i<l;i++)if(args[i](c))return true;return false}}
function q(){var args=arguments;return function(c){var i,l,cp=pos,cl=c.length;for(i=0,l=args.length;i<l;i++)if(!args[i](c)){pos=cp;t(c,cl);return false}return true}}
function r(m,n,f){return function(c){var i=0,cp=pos,cl=c.length;while(i<m){i++;if(!f(c)){pos=cp;t(c,cl);return false}}cl=c.length;while(i++<n||n==0)if(!f(c))return true;return true}}
function n(f){return function(){var p=pos,x=f([]);pos=p;return !x}}
function p(f){return function(){var p=pos,x=f([]);pos=p;return x}}
function t(a,n){while(a.length>n)a.pop()}
function g(){var c=str.charCodeAt(pos);return c}
function b(p,n){var i,l,x=tbl[p][n],c=x[2],o={name:n,start:p,end:x[1],cn:[],_str:str};for(i=0,l=c.length;i<l;i++){o.cn.push(b(c[i][0],c[i][1]))}return o}
return RuleSet([])&&pos==l?[true,b(0,'RuleSet')]:[false,tbl]}
/* generated code, do not edit */
function PEG_codegen_5(tree){
f(tree,[])
return tree
function cont0(ctx){return ctx}
function c3(ctx){
ctx.back() // B
return c2(ctx)}
function c4(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="Rule")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=c3(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c(ctx){
// *
ctx.beginStarBinding()
return c2(ctx)}
function c1(ctx){
ctx.commitStarBinding()
if(x=cont0(ctx))return x
ctx.uncommitStarBinding()}
function c2(ctx){
return c4(ctx) || c1(ctx)}
function c5(ctx){
n=ctx.currentNode
if(n.name!="RuleSet")return false
ctx.addBinding(n,'[')
if(x=c(ctx))return x
ctx.popBinding()}
function c6(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="OrdChoice")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=cont0(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c7(ctx){
ctx.back() // B
return c6(ctx)}
function c8(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="NonTerminal")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=c7(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c9(ctx){
n=ctx.currentNode
if(n.name!="Rule")return false
ctx.addBinding(n,'[')
if(x=c8(ctx))return x
ctx.popBinding()}
function c10(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="NonTerminal")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=cont0(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c11(ctx){
n=ctx.currentNode
if(n.name!="AtomicExpr")return false
ctx.addBinding(n,'[')
if(x=c10(ctx))return x
ctx.popBinding()}
function c12(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="CharSet")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=cont0(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c13(ctx){
n=ctx.currentNode
if(n.name!="AtomicExpr")return false
ctx.addBinding(n,'[')
if(x=c12(ctx))return x
ctx.popBinding()}
function c14(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="StrLit")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=cont0(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c15(ctx){
n=ctx.currentNode
if(n.name!="AtomicExpr")return false
ctx.addBinding(n,'[')
if(x=c14(ctx))return x
ctx.popBinding()}
function c16(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="Empty")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=cont0(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c17(ctx){
n=ctx.currentNode
if(n.name!="AtomicExpr")return false
ctx.addBinding(n,'[')
if(x=c16(ctx))return x
ctx.popBinding()}
function c21(ctx){
ctx.back() // B
return c20(ctx)}
function c22(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="Sequence")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=c21(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c18(ctx){
// *
ctx.beginStarBinding()
return c20(ctx)}
function c19(ctx){
ctx.commitStarBinding()
if(x=cont0(ctx))return x
ctx.uncommitStarBinding()}
function c20(ctx){
return c22(ctx) || c19(ctx)}
function c23(ctx){
n=ctx.currentNode
if(n.name!="OrdChoice")return false
ctx.addBinding(n,'[')
if(x=c18(ctx))return x
ctx.popBinding()}
function c27(ctx){
ctx.back() // B
return c26(ctx)}
function c28(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="SeqUnit")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=c27(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c24(ctx){
// *
ctx.beginStarBinding()
return c26(ctx)}
function c25(ctx){
ctx.commitStarBinding()
if(x=cont0(ctx))return x
ctx.uncommitStarBinding()}
function c26(ctx){
return c28(ctx) || c25(ctx)}
function c29(ctx){
n=ctx.currentNode
if(n.name!="Sequence")return false
ctx.addBinding(n,'[')
if(x=c24(ctx))return x
ctx.popBinding()}
function c30(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=cont0(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c31(ctx){
n=ctx.currentNode
if(n.name!="SeqUnit"&&n.name!="Replicand"&&n.name!="ParenthExpr")return false
ctx.addBinding(n,'[')
if(x=c30(ctx))return x
ctx.popBinding()}
function c32(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="N")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=cont0(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c33(ctx){var x
ctx.checkpoint() // !
x=c32(ctx)
ctx.rollback()
if(x)return false
return cont0(ctx)}
function c34(ctx){
ctx.back() // B
return c33(ctx)}
function c35(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="M")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=c34(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c36(ctx){
ctx.back() // B
return c35(ctx)}
function c37(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="Replicand")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=c36(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c38(ctx){
n=ctx.currentNode
if(n.name!="MNRep")return false
ctx.addBinding(n,'[')
if(x=c37(ctx))return x
ctx.popBinding()}
function c39(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="N")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=cont0(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c40(ctx){
ctx.back() // B
return c39(ctx)}
function c41(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="M")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=c40(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c42(ctx){
ctx.back() // B
return c41(ctx)}
function c43(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="Replicand")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=c42(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c44(ctx){
n=ctx.currentNode
if(n.name!="MNRep")return false
ctx.addBinding(n,'[')
if(x=c43(ctx))return x
ctx.popBinding()}
function c45(ctx){
n=ctx.currentNode
if(n.name!="M"&&n.name!="N")return false
ctx.addBinding(n,'[')
if(x=cont0(ctx))return x
ctx.popBinding()}
function c46(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=cont0(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c47(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="Replicand")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=c46(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c48(ctx){
n=ctx.currentNode
if(n.name!="Optional")return false
ctx.addBinding(n,'[')
if(x=c47(ctx))return x
ctx.popBinding()}
function c49(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=cont0(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c50(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="Replicand")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=c49(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c51(ctx){
n=ctx.currentNode
if(n.name!="AnyRep")return false
ctx.addBinding(n,'[')
if(x=c50(ctx))return x
ctx.popBinding()}
function c52(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=cont0(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c53(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="Replicand")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=c52(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c54(ctx){
n=ctx.currentNode
if(n.name!="PosRep")return false
ctx.addBinding(n,'[')
if(x=c53(ctx))return x
ctx.popBinding()}
function c55(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="OrdChoice")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=cont0(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c56(ctx){
n=ctx.currentNode
if(n.name!="NegLookahead")return false
ctx.addBinding(n,'[')
if(x=c55(ctx))return x
ctx.popBinding()}
function c57(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="OrdChoice")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=cont0(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c58(ctx){
n=ctx.currentNode
if(n.name!="PosLookahead")return false
ctx.addBinding(n,'[')
if(x=c57(ctx))return x
ctx.popBinding()}
function c59(ctx){
n=ctx.currentNode
if(n.name!="StrLit")return false
ctx.addBinding(n,'[')
if(x=cont0(ctx))return x
ctx.popBinding()}
function c60(ctx){
n=ctx.currentNode
if(n.name!="PropSpec")return false
ctx.addBinding(n,'[')
if(x=cont0(ctx))return x
ctx.popBinding()}
function c61(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=cont0(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c62(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="CodePointTo")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=c61(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c63(ctx){
ctx.back() // B
return c62(ctx)}
function c64(ctx){
ctx.back() // B
return c63(ctx)}
function c65(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=c64(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c66(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="CodePointFrom")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=c65(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c67(ctx){
n=ctx.currentNode
if(n.name!="CodePointRange")return false
ctx.addBinding(n,'[')
if(x=c66(ctx))return x
ctx.popBinding()}
function c68(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=cont0(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c69(ctx){
n=ctx.currentNode
if(n.name!="CodePointExpr")return false
ctx.addBinding(n,'[')
if(x=c68(ctx))return x
ctx.popBinding()}
function c70(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="PropSpec")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=cont0(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c71(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="PositiveSpec")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=c70(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c72(ctx){
n=ctx.currentNode
if(n.name!="UnicodePropSpec")return false
ctx.addBinding(n,'[')
if(x=c71(ctx))return x
ctx.popBinding()}
function c73(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="PropSpec")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=cont0(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c74(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="NegativeSpec")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=c73(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c75(ctx){
n=ctx.currentNode
if(n.name!="UnicodePropSpec")return false
ctx.addBinding(n,'[')
if(x=c74(ctx))return x
ctx.popBinding()}
function c76(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=cont0(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c77(ctx){
n=ctx.currentNode
if(n.name!="CodePoint")return false
ctx.addBinding(n,'[')
if(x=c76(ctx))return x
ctx.popBinding()}
function c78(ctx){
n=ctx.currentNode
if(n.name!="UPlusCodePoint")return false
ctx.addBinding(n,'[')
if(x=cont0(ctx))return x
ctx.popBinding()}
function c79(ctx){
n=ctx.currentNode
if(n.name!="CodePointLit")return false
ctx.addBinding(n,'[')
if(x=cont0(ctx))return x
ctx.popBinding()}
function c83(ctx){
ctx.back() // B
return c82(ctx)}
function c84(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="CodePointExpr")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=c83(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c80(ctx){
// *
ctx.beginStarBinding()
return c82(ctx)}
function c81(ctx){
ctx.commitStarBinding()
if(x=cont0(ctx))return x
ctx.uncommitStarBinding()}
function c82(ctx){
return c84(ctx) || c81(ctx)}
function c85(ctx){
n=ctx.currentNode
if(n.name!="CharSetUnion")return false
ctx.addBinding(n,'[')
if(x=c80(ctx))return x
ctx.popBinding()}
function c89(ctx){
ctx.back() // B
return c88(ctx)}
function c90(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="CharSetUnion")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=c89(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c86(ctx){
// *
ctx.beginStarBinding()
return c88(ctx)}
function c87(ctx){
ctx.commitStarBinding()
if(x=cont0(ctx))return x
ctx.uncommitStarBinding()}
function c88(ctx){
return c90(ctx) || c87(ctx)}
function c91(ctx){
n=ctx.currentNode
if(n.name!="CharSetIntersection")return false
ctx.addBinding(n,'[')
if(x=c86(ctx))return x
ctx.popBinding()}
function c95(ctx){
ctx.back() // B
return c94(ctx)}
function c96(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="CharSetIntersection")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=c95(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c92(ctx){
// *
ctx.beginStarBinding()
return c94(ctx)}
function c93(ctx){
ctx.commitStarBinding()
if(x=cont0(ctx))return x
ctx.uncommitStarBinding()}
function c94(ctx){
return c96(ctx) || c93(ctx)}
function c97(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="CharSetDifference")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=c92(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c98(ctx){
n=ctx.currentNode
if(n.name!="CharSetExpr")return false
ctx.addBinding(n,'[')
if(x=c97(ctx))return x
ctx.popBinding()}
function c99(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="CharSetExpr")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=cont0(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c100(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="PosCharSet")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=c99(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c101(ctx){
n=ctx.currentNode
if(n.name!="CharSet")return false
ctx.addBinding(n,'[')
if(x=c100(ctx))return x
ctx.popBinding()}
function c102(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="CharSetExpr")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=cont0(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c103(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="NegCharSet")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=c102(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c104(ctx){
n=ctx.currentNode
if(n.name!="CharSet")return false
ctx.addBinding(n,'[')
if(x=c103(ctx))return x
ctx.popBinding()}
function c105(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="CharSetExpr")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=cont0(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c106(ctx){var x
ctx.checkpoint() // !
x=c105(ctx)
ctx.rollback()
if(x)return false
return cont0(ctx)}
function c107(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="PosCharSet")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=c106(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c108(ctx){
n=ctx.currentNode
if(n.name!="CharSet")return false
ctx.addBinding(n,'[')
if(x=c107(ctx))return x
ctx.popBinding()}
function c109(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="CharSetExpr")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=cont0(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c110(ctx){var x
ctx.checkpoint() // !
x=c109(ctx)
ctx.rollback()
if(x)return false
return cont0(ctx)}
function c111(ctx){var n,n1,i,l,x
n=ctx.currentNode // D
for(i=0,l=n.cn.length;i<l;i++){
n1=n.cn[i]
if(ctx.alreadyBound(n1))continue
if(n1.name!="NegCharSet")continue
ctx.backstack.push(ctx.currentNode)
ctx.currentNode=n1
ctx.addBinding(n1,'D')
if(x=c110(ctx))return x
ctx.popBinding()
ctx.backstack.pop()}
ctx.currentNode=n}
function c112(ctx){
n=ctx.currentNode
if(n.name!="CharSet")return false
ctx.addBinding(n,'[')
if(x=c111(ctx))return x
ctx.popBinding()}
function f(n,ancestors){var ctx,i,l
ctx=new BindingContext(n,ancestors)
if(c5(ctx)){
lazyAttr(n,"code_v5",function(b0,b1){return function(){return function(opts,drop){return codegen_v5(opts,b0.filter(function(b){return b[1]=="D"}).map(function(b){return b[0].nm()}),b1.filter(function(b){return b[1]=="D"}).map(function(b){return b[0].named_re()}))}}}(ctx.bindings[1],ctx.bindings[1]))}
ctx=new BindingContext(n,ancestors)
if(c9(ctx)){
lazyAttr(n,"nm",function(b0){return function(){return b0._str.substring(b0.start,b0.end)}}(ctx.bindings[1][0]))
lazyAttr(n,"named_re",function(b0,b1){return function(){return [b0.nm(),b1.re()]}}(n,ctx.bindings[2][0]))}
ctx=new BindingContext(n,ancestors)
if(c11(ctx)){
lazyAttr(n,"re",function(b0){return function(){return re_reference(b0._str.substring(b0.start,b0.end))}}(ctx.bindings[1][0]))}
ctx=new BindingContext(n,ancestors)
if(c13(ctx)){
lazyAttr(n,"re",function(b0){return function(){return re_from_cset(b0.cset())}}(ctx.bindings[1][0]))}
ctx=new BindingContext(n,ancestors)
if(c15(ctx)){
lazyAttr(n,"re",function(b0){return function(){return re_from_str(b0.str())}}(ctx.bindings[1][0]))}
ctx=new BindingContext(n,ancestors)
if(c17(ctx)){
n.re=function(){return re_from_str("")}}
ctx=new BindingContext(n,ancestors)
if(c23(ctx)){
lazyAttr(n,"re",function(b0){return function(){return re_union(b0.filter(function(b){return b[1]=="D"}).map(function(b){return b[0].re()}))}}(ctx.bindings[1]))}
ctx=new BindingContext(n,ancestors)
if(c29(ctx)){
lazyAttr(n,"re",function(b0){return function(){return re_sequence(b0.filter(function(b){return b[1]=="D"}).map(function(b){return b[0].re()}))}}(ctx.bindings[1]))}
ctx=new BindingContext(n,ancestors)
if(c31(ctx)){
lazyAttr(n,"re",function(b0){return function(){return b0.re()}}(ctx.bindings[1][0]))}
ctx=new BindingContext(n,ancestors)
if(c38(ctx)){
lazyAttr(n,"re",function(b0,b1,b2){return function(){return re_rep(b0.n(),b1.n(),b2.re())}}(ctx.bindings[2][0],ctx.bindings[2][0],ctx.bindings[1][0]))}
ctx=new BindingContext(n,ancestors)
if(c44(ctx)){
lazyAttr(n,"re",function(b0,b1,b2){return function(){return re_rep(b0.n(),b1.n(),b2.re())}}(ctx.bindings[2][0],ctx.bindings[3][0],ctx.bindings[1][0]))}
ctx=new BindingContext(n,ancestors)
if(c45(ctx)){
lazyAttr(n,"n",function(b0){return function(){return parseInt(b0._str.substring(b0.start,b0.end))}}(n))}
ctx=new BindingContext(n,ancestors)
if(c48(ctx)){
lazyAttr(n,"re",function(b0){return function(){return re_rep(0,1,b0.re())}}(ctx.bindings[1][0]))}
ctx=new BindingContext(n,ancestors)
if(c51(ctx)){
lazyAttr(n,"re",function(b0){return function(){return re_rep(0,0,b0.re())}}(ctx.bindings[1][0]))}
ctx=new BindingContext(n,ancestors)
if(c54(ctx)){
lazyAttr(n,"re",function(b0){return function(){return re_rep(1,0,b0.re())}}(ctx.bindings[1][0]))}
ctx=new BindingContext(n,ancestors)
if(c56(ctx)){
lazyAttr(n,"re",function(b0){return function(){return re_neg_lookahead(b0.re())}}(ctx.bindings[1][0]))}
ctx=new BindingContext(n,ancestors)
if(c58(ctx)){
lazyAttr(n,"re",function(b0){return function(){return re_pos_lookahead(b0.re())}}(ctx.bindings[1][0]))}
ctx=new BindingContext(n,ancestors)
if(c59(ctx)){
lazyAttr(n,"str",function(b0){return function(){return b0._str.substring(b0.start,b0.end).slice(1,-1)}}(n))}
ctx=new BindingContext(n,ancestors)
if(c60(ctx)){
lazyAttr(n,"cset",function(b0){return function(){return CSET.fromUnicodeGeneralCategory(b0._str.substring(b0.start,b0.end))}}(n))}
ctx=new BindingContext(n,ancestors)
if(c67(ctx)){
lazyAttr(n,"cset",function(b0,b1){return function(){return CSET.fromIntRange(b0.cp(),b1.cp())}}(ctx.bindings[2][0],ctx.bindings[4][0]))}
ctx=new BindingContext(n,ancestors)
if(c69(ctx)){
lazyAttr(n,"cset",function(b0){return function(){return b0.cset()}}(ctx.bindings[1][0]))}
ctx=new BindingContext(n,ancestors)
if(c72(ctx)){
lazyAttr(n,"cset",function(b0){return function(){return b0.cset()}}(ctx.bindings[2][0]))}
ctx=new BindingContext(n,ancestors)
if(c75(ctx)){
lazyAttr(n,"cset",function(b0){return function(){return CSET.complement(b0.cset())}}(ctx.bindings[2][0]))}
ctx=new BindingContext(n,ancestors)
if(c77(ctx)){
lazyAttr(n,"cset",function(b0){return function(){return CSET.fromInt(b0.cp())}}(ctx.bindings[1][0]))
lazyAttr(n,"cp",function(b0){return function(){return b0.cp()}}(ctx.bindings[1][0]))}
ctx=new BindingContext(n,ancestors)
if(c78(ctx)){
lazyAttr(n,"cp",function(b0){return function(){return parseInt(b0._str.substring(b0.start,b0.end).slice(2),16)}}(n))}
ctx=new BindingContext(n,ancestors)
if(c79(ctx)){
lazyAttr(n,"cp",function(b0){return function(){return b0._str.substring(b0.start,b0.end).charCodeAt(0)}}(n))}
ctx=new BindingContext(n,ancestors)
if(c85(ctx)){
lazyAttr(n,"cset",function(b0){return function(){return foldl1(CSET.union, b0.filter(function(b){return b[1]=="D"}).map(function(b){return b[0].cset()}))}}(ctx.bindings[1]))}
ctx=new BindingContext(n,ancestors)
if(c91(ctx)){
lazyAttr(n,"cset",function(b0){return function(){return foldl1(CSET.intersection, b0.filter(function(b){return b[1]=="D"}).map(function(b){return b[0].cset()}))}}(ctx.bindings[1]))}
ctx=new BindingContext(n,ancestors)
if(c98(ctx)){
lazyAttr(n,"cset",function(b0){return function(){return foldl1(CSET.difference, b0.filter(function(b){return b[1]=="D"}).map(function(b){return b[0].cset()}))}}(ctx.bindings[2]))}
ctx=new BindingContext(n,ancestors)
if(c101(ctx)){
lazyAttr(n,"cset",function(b0){return function(){return b0.cset()}}(ctx.bindings[2][0]))}
ctx=new BindingContext(n,ancestors)
if(c104(ctx)){
lazyAttr(n,"cset",function(b0){return function(){return CSET.complement(b0.cset())}}(ctx.bindings[2][0]))}
ctx=new BindingContext(n,ancestors)
if(c108(ctx)){
n.cset=function(){return CSET.nil}}
ctx=new BindingContext(n,ancestors)
if(c112(ctx)){
n.cset=function(){return CSET.universe}}
ancestors=[n].concat(ancestors)
for(i=0,l=n.cn.length;i<l;i++)
f(n.cn[i],ancestors)}
function lazyAttr(n,attr,f){
n[attr]=function(){var v
n[attr]=cycle(n,attr)
try{v=f()}
catch(e){
v=e.toString()
n[attr]=function(){return v}
throw e}
n[attr]=function(){return v}
return v}}
function cycle(n,attr){return function(){
n[attr]="cyclical dependency"
throw new Error("cyclical dependency on "+attr)}}}
/* TAL supporting code */
function BindingContext(n,a){
this.distinguished=n
this.currentNode=n
this.highWaterMark=n
this.ancestors=[n].concat(a)
this.checkpoints=[]
this.bindings=[]
this.starbindingstack=[]
this.backstack=[]}
BindingContext.prototype=
{constructor:BindingContext
,highWaterParent:function(){var i,l
for(i=0,l=this.ancestors.length-1;i<l;i++){
if(this.ancestors[i]==this.highWaterMark)
return this.ancestors[i+1]}}
,checkpoint:function(){
this.checkpoints.push(
[this.currentNode
,this.highWaterMark
,this.bindings.slice()
,this.starbindingstack.slice()
,this.backstack.slice()])}
,rollback:function(){var x
x=this.checkpoints.pop()
this.currentNode=x[0]
this.highWaterMark=x[1]
this.bindings=x[2]
this.starbindingstack=x[3]
this.backstack=x[4]}
,alreadyBound:function(n){
return f(n,this.bindings)
function f(n,a){var i,l
for(i=0,l=a.length;i<l;i++)
if(a[i]==n || a[i].constructor==Array && f(n,a[i])) return true
return false}}
,addBinding:function(n,s){
this.bindings.push([n,s])}
,popBinding:function(){
this.bindings.pop()}
,back:function(){
this.currentNode=this.backstack.pop()}
,beginStarBinding:function(){
this.starbindingstack.push(this.bindings)
this.bindings=this.bindings.slice()}
,commitStarBinding:function(){var x
x=this.starbindingstack.pop()
x.push(this.bindings.slice(x.length))
this.bindings=x}
,uncommitStarBinding:function(){var x
x=this.bindings.pop()
this.starbindingstack.push(this.bindings.slice())
this.bindings=this.bindings.concat(x)}
,getBinding:function(s){
if(s=='')return this.distinguished
return this.bindings[s.length-1][0]}}
/* re.js */
/* Here we define an 're' type and operations on it. These are like regular expressions, except that they are stored not as strings but in a more convenient format. They may be operated on and combined in various ways and eventually may be converted into ECMAScript regexes. An re object can also be a named reference, to some other re object, which means that a set of re objects can be recursive and can express non-regular languages. Circular re objects cannot be turned into ECMAScript regexes, although some collections of re objects that contain named references but are not circular can be flattened by substitution. */
/* An re is an array, in which the first element is an integer which encodes the type of the second element:
0 → cset
1 → string literal
2 → sequence of res
3 → union of res
4 → m to n reps of re
5 → named reference
6 → re negative lookahead
7 → re positive lookahead
*/
function re_from_cset(cset){return [0,cset]}
function re_from_str(str){return [1,str]}
function re_sequence(res){return res.length>1 ?[2,res] :res[0]}
function re_union(res){return res.length>1 ?[3,res] :res[0]}
function re_rep(m,n,re){return [4,m,n,re]}
function re_reference(name){return [5,name]}
function re_neg_lookahead(re){return [6,re]}
function re_pos_lookahead(re){return [7,re]}
/* the following needs a correctness proof. */
function re_serialize(re){
assert(this.CSET)
return f(re)
function f(re){return h(re,1)}// wants parens
function g(re){return h(re,0)}// doesn't
function h(re,paren){var q,cs
switch(re[0]){
case 0:
return CSET.toRegex(re[1])
case 1:
return reEsc(re[1].slice(1,-1)) // defined in primitives.js
case 2:
return re[1].map(f).join('')
case 3:
return (!paren || re[1].length<2)
? re[1].map(f).join('|')
:'('+re[1].map(g).join('|')+')'
case 4:
if(re[1]==0){
if (re[2]==0) q='*'
else if(re[2]==1) q='?'}
else if(re[1]==1 && re[2]==0) q='+'
else q='{'+re[1]+','+re[2]+'}'
return '('+g(re[3])+')'+q
case 5:
throw Error('re_serialize: cannot serialize named reference')
case 6:
return '(?!'+g(re[1])+')'
case 7:
return '(?='+g(re[1])+')'
default:
throw Error('re_serialize: unknown re type: '+re[0])}}}
function re_simplify(re){var r
switch(re[0]){
case 0:
case 1:
return re
case 2:
r=[2,re[1].map(re_simplify)]
return r
case 3:
r=[3,re[1].map(re_simplify)]
if(r[1].every(function(r){return r[0]===0})){
cs=r[1][0][1]
r[1].slice(1).forEach(function(r){cs=CSET.union(cs,r[1])})
return [0,cs]}
return r
case 4:
return [4,re[1],re[2],re_simplify(re[3])]
case 5:
throw Error('re_simplify: cannot simplify named reference')
case 6:
r=re_simplify(re[1])
//if(r[0]===0)return [0,CSET.complement(r[1])] WRONG
return [6,r]
case 7:
return [7,re_simplify(re[1])]
default:
throw Error('re_simplify: unknown re type: '+re[0])}}
/* we return either a string which is a dependency of the provided re object, or undefined if the re is self-contained. */
function re_dependency(re){var i,l,r
switch(re[0]){
case 0:
case 1:
return
case 2:
case 3:
for(i=0,l=re[1].length;i<l;i++)
if(r=re_dependency(re[1][i]))return r
return
case 4:
return re_dependency(re[3])
case 5:
return re[1]
case 6:
case 7:
return re_dependency(re[1])
default:
throw Error('re_dependency: unknown re type: '+re[0])}}
function re_substitute(re,name,value){var i,l
log([re,name,value])
switch(re[0]){
case 0:
case 1:
return re
case 2:
case 3:
for(i=0,l=re[1].length;i<l;i++)
re[1][i]=re_substitute(re[1][i],name,value)
return re
case 4:
re[3]=re_substitute(re[3],name,value)
return re
case 5:
if(re[1]===name)return log(value)
return re
case 6:
case 7:
re[1]=re_substitute(re[1],name,value)
return re
default:
throw Error('re_substitute: unknown re type: '+re[0])}}
/*
6 → re negative lookahead
7 → re positive lookahead
*/
function re_to_function(ctx){return function(re){
return f(re)
function f(re){
switch(re[0]){
case 0:
return 'cs_'+cset_ref(ctx,re[1])
case 1:
if(!re[1].length)return 'empty'
return 'sl_'+strlit_ref(ctx,re[1])
case 2:
return 'seq('+re[1].map(f).join(',')+')'
case 3:
return 'ordChoice('+re[1].map(f).join(',')+')'
case 4:
return 'rep('+re[1]+','+re[2]+','+f(re[3])+')'
case 5:
return re[1]
}
return re}}
function cset_ref(ctx,cset){var x
if(x=lookup(cset,ctx.csets,cset_test))return x
x=ctx.csets.length
ctx.csets[x]=cset_f(cset,x)
return x}
function lookup(x,xs,eq){
}
function cset_test(a,b){
}
function cset_f(cset,n){
return 'function cs_'+n+'(s){var c;'
+ 'c=s._str.charCodeAt(s.pos);'
+ 'if('+cset_to_expr(cset,'c')+'){s.adv(1);return true}'
+ 'return false'
+ '}'}
function strlit_ref(ctx,str){
if(x=lookup(ctx.strlits,str))return x
x=ctx.strlits.length
ctx.strlits[x]=strlit_f(str,x)
return x}
function strlit_f(str,n){var i,l,ret,ret2
l=str.length
if(l>8){
return 'function sl_'+n+'(s){var x;'
+ 'x=s._str.slice'
+ '}'}
else{
ret=['function sl_'+n+'(s){var '
,'p=s.pos'
,',t=s._str;'
,'if(']
ret2=[]
for(i=0;i<l;i++)
ret2.push('t.charCodeAt(p'+(i<l-1?'++':'')+')=='+str.charCodeAt(i))
ret.push(ret2.join('&&'))
ret.push('){s.adv('+str.length+');return true}')
ret.push('return false}')
return ret.join('')}}}
/* probably belongs in CSET */
/* takes a cset and a variable name to a JavaScript expression which is a test on the value of that variable for membership in that cset. */
/* This is probably the simplest possible implementation, and favors small character values; more efficient implementations are of course possible. */
function cset_to_expr(cset,id){var i,l,ret=[]
for(i=0,l=cset.length;i<l;i++)
ret.push(id+'<'+cset[i]+'?'+(i%2?'1':'0')+':')
ret.push(l%2?'1':'0')
return ret.join('')}
/* lists.js */
function foldl1(f,a){var x,i,l
x=a[0]
for(i=1,l=a.length;i<l;i++)x=f(x,a[i])
return x}
function concat(as){var i,l,a=[]
for(i=0,l=as.length;i<l;i++)
a.push.apply(a,as[i])
return a}
Array.prototype.uniq=function(){
return this.filter(function(e,i,a){return !i||e!==a[i-1]})}
/* [[name,value]] → Object */
function objectFromList(a){var o={}
a.forEach(function(e){
o[e[0]]=e[1]})
return o}
/* [a], [b] → [[a,b]] */
function zip(a,b){var r=[],i,l
l=Math.min(a.length,b.length)
for(i=0;i<l;i++) r.push([a[i],b[i]])
return r}
function fst(a){return a[0]}
function snd(a){return a[1]}
/* CSET */
if(!Array.prototype.forEach)
Array.prototype.forEach=function(f){var i,l=this.length>>>0,thisp=arguments[1]
for(i=0;i<l;i++)
if(i in this)
f.call(thisp,this[i],i,this)}
if(!Array.prototype.filter)
Array.prototype.filter=function(f){var i,l=this.length>>>0,res=[],thisp=arguments[1],v
for(i=0;i<l;i++){
v=this[i]
if(i in this&&f.call(thisp,v,i,this))res.push(v)}
return res}
CSET=function(){
cUC=
{Cc:[0,0x20,0x7F,0xA0]
,Zs:[0x20,0x21,0xA0,0xA1,0x1680,0x1681,0x180E,0x180F,0x2000,0x200B,0x202F,0x2030,0x205F,0x2060,0x3000,0x3001]
,Po:[0x21,0x24,0x25,0x28,0x2A,0x2B,0x2C,0x2D,0x2E,0x30,0x3A,0x3C,0x3F,0x41,0x5C,0x5D,0xA1,0xA2,0xB7,0xB8,0xBF,0xC0,0x37E,0x37F,0x387,0x388,0x55A,0x560,0x589,0x58A,0x5C0,0x5C1,0x5C3,0x5C4,0x5C6,0x5C7,0x5F3,0x5F5,0x609,0x60B,0x60C,0x60E,0x61B,0x61C,0x61E,0x620,0x66A,0x66E,0x6D4,0x6D5,0x700,0x70E,0x7F7,0x7FA,0x964,0x966,0x970,0x971,0xDF4,0xDF5,0xE4F,0xE50,0xE5A,0xE5C,0xF04,0xF13,0xF85,0xF86,0xFD0,0xFD5,0x104A,0x1050,0x10FB,0x10FC,0x1361,0x1369,0x166D,0x166F,0x16EB,0x16EE,0x1735,0x1737,0x17D4,0x17D7,0x17D8,0x17DB,0x1800,0x1806,0x1807,0x180B,0x1944,0x1946,0x19DE,0x19E0,0x1A1E,0x1A20,0x1B5A,0x1B61,0x1C3B,0x1C40,0x1C7E,0x1C80,0x2016,0x2018,0x2020,0x2028,0x2030,0x2039,0x203B,0x203F,0x2041,0x2044,0x2047,0x2052,0x2053,0x2054,0x2055,0x205F,0x2CF9,0x2CFD,0x2CFE,0x2D00,0x2E00,0x2E02,0x2E06,0x2E09,0x2E0B,0x2E0C,0x2E0E,0x2E17,0x2E18,0x2E1A,0x2E1B,0x2E1C,0x2E1E,0x2E20,0x2E2A,0x2E2F,0x2E30,0x2E31,0x3001,0x3004,0x303D,0x303E,0x30FB,0x30FC,0xA60D,0xA610,0xA673,0xA674,0xA67E,0xA67F,0xA874,0xA878,0xA8CE,0xA8D0,0xA92E,0xA930,0xA95F,0xA960,0xAA5C,0xAA60,0xFE10,0xFE17,0xFE19,0xFE1A,0xFE30,0xFE31,0xFE45,0xFE47,0xFE49,0xFE4D,0xFE50,0xFE53,0xFE54,0xFE58,0xFE5F,0xFE62,0xFE68,0xFE69,0xFE6A,0xFE6C,0xFF01,0xFF04,0xFF05,0xFF08,0xFF0A,0xFF0B,0xFF0C,0xFF0D,0xFF0E,0xFF10,0xFF1A,0xFF1C,0xFF1F,0xFF21,0xFF3C,0xFF3D,0xFF61,0xFF62,0xFF64,0xFF66,0x10100,0x10102,0x1039F,0x103A0,0x103D0,0x103D1,0x1091F,0x10920,0x1093F,0x10940,0x10A50,0x10A59,0x12470,0x12474]
,Sc:[0x24,0x25,0xA2,0xA6,0x60B,0x60C,0x9F2,0x9F4,0xAF1,0xAF2,0xBF9,0xBFA,0xE3F,0xE40,0x17DB,0x17DC,0x20A0,0x20B6,0xFDFC,0xFDFD,0xFE69,0xFE6A,0xFF04,0xFF05,0xFFE0,0xFFE2,0xFFE5,0xFFE7]
,Ps:[0x28,0x29,0x5B,0x5C,0x7B,0x7C,0xF3A,0xF3B,0xF3C,0xF3D,0x169B,0x169C,0x201A,0x201B,0x201E,0x201F,0x2045,0x2046,0x207D,0x207E,0x208D,0x208E,0x2329,0x232A,0x2768,0x2769,0x276A,0x276B,0x276C,0x276D,0x276E,0x276F,0x2770,0x2771,0x2772,0x2773,0x2774,0x2775,0x27C5,0x27C6,0x27E6,0x27E7,0x27E8,0x27E9,0x27EA,0x27EB,0x27EC,0x27ED,0x27EE,0x27EF,0x2983,0x2984,0x2985,0x2986,0x2987,0x2988,0x2989,0x298A,0x298B,0x298C,0x298D,0x298E,0x298F,0x2990,0x2991,0x2992,0x2993,0x2994,0x2995,0x2996,0x2997,0x2998,0x29D8,0x29D9,0x29DA,0x29DB,0x29FC,0x29FD,0x2E22,0x2E23,0x2E24,0x2E25,0x2E26,0x2E27,0x2E28,0x2E29,0x3008,0x3009,0x300A,0x300B,0x300C,0x300D,0x300E,0x300F,0x3010,0x3011,0x3014,0x3015,0x3016,0x3017,0x3018,0x3019,0x301A,0x301B,0x301D,0x301E,0xFD3E,0xFD3F,0xFE17,0xFE18,0xFE35,0xFE36,0xFE37,0xFE38,0xFE39,0xFE3A,0xFE3B,0xFE3C,0xFE3D,0xFE3E,0xFE3F,0xFE40,0xFE41,0xFE42,0xFE43,0xFE44,0xFE47,0xFE48,0xFE59,0xFE5A,0xFE5B,0xFE5C,0xFE5D,0xFE5E,0xFF08,0xFF09,0xFF3B,0xFF3C,0xFF5B,0xFF5C,0xFF5F,0xFF60,0xFF62,0xFF63]
,Pe:[0x29,0x2A,0x5D,0x5E,0x7D,0x7E,0xF3B,0xF3C,0xF3D,0xF3E,0x169C,0x169D,0x2046,0x2047,0x207E,0x207F,0x208E,0x208F,0x232A,0x232B,0x2769,0x276A,0x276B,0x276C,0x276D,0x276E,0x276F,0x2770,0x2771,0x2772,0x2773,0x2774,0x2775,0x2776,0x27C6,0x27C7,0x27E7,0x27E8,0x27E9,0x27EA,0x27EB,0x27EC,0x27ED,0x27EE,0x27EF,0x27F0,0x2984,0x2985,0x2986,0x2987,0x2988,0x2989,0x298A,0x298B,0x298C,0x298D,0x298E,0x298F,0x2990,0x2991,0x2992,0x2993,0x2994,0x2995,0x2996,0x2997,0x2998,0x2999,0x29D9,0x29DA,0x29DB,0x29DC,0x29FD,0x29FE,0x2E23,0x2E24,0x2E25,0x2E26,0x2E27,0x2E28,0x2E29,0x2E2A,0x3009,0x300A,0x300B,0x300C,0x300D,0x300E,0x300F,0x3010,0x3011,0x3012,0x3015,0x3016,0x3017,0x3018,0x3019,0x301A,0x301B,0x301C,0x301E,0x3020,0xFD3F,0xFD40,0xFE18,0xFE19,0xFE36,0xFE37,0xFE38,0xFE39,0xFE3A,0xFE3B,0xFE3C,0xFE3D,0xFE3E,0xFE3F,0xFE40,0xFE41,0xFE42,0xFE43,0xFE44,0xFE45,0xFE48,0xFE49,0xFE5A,0xFE5B,0xFE5C,0xFE5D,0xFE5E,0xFE5F,0xFF09,0xFF0A,0xFF3D,0xFF3E,0xFF5D,0xFF5E,0xFF60,0xFF61,0xFF63,0xFF64]
,Sm:[0x2B,0x2C,0x3C,0x3F,0x7C,0x7D,0x7E,0x7F,0xAC,0xAD,0xB1,0xB2,0xD7,0xD8,0xF7,0xF8,0x3F6,0x3F7,0x606,0x609,0x2044,0x2045,0x2052,0x2053,0x207A,0x207D,0x208A,0x208D,0x2140,0x2145,0x214B,0x214C,0x2190,0x2195,0x219A,0x219C,0x21A0,0x21A1,0x21A3,0x21A4,0x21A6,0x21A7,0x21AE,0x21AF,0x21CE,0x21D0,0x21D2,0x21D3,0x21D4,0x21D5,0x21F4,0x2300,0x2308,0x230C,0x2320,0x2322,0x237C,0x237D,0x239B,0x23B4,0x23DC,0x23E2,0x25B7,0x25B8,0x25C1,0x25C2,0x25F8,0x2600,0x266F,0x2670,0x27C0,0x27C5,0x27C7,0x27CB,0x27CC,0x27CD,0x27D0,0x27E6,0x27F0,0x2800,0x2900,0x2983,0x2999,0x29D8,0x29DC,0x29FC,0x29FE,0x2B00,0x2B30,0x2B45,0x2B47,0x2B4D,0xFB29,0xFB2A,0xFE62,0xFE63,0xFE64,0xFE67,0xFF0B,0xFF0C,0xFF1C,0xFF1F,0xFF5C,0xFF5D,0xFF5E,0xFF5F,0xFFE2,0xFFE3,0xFFE9,0xFFED,0x1D6C1,0x1D6C2,0x1D6DB,0x1D6DC,0x1D6FB,0x1D6FC,0x1D715,0x1D716,0x1D735,0x1D736,0x1D74F,0x1D750,0x1D76F,0x1D770,0x1D789,0x1D78A,0x1D7A9,0x1D7AA,0x1D7C3,0x1D7C4]
,Pd:[0x2D,0x2E,0x58A,0x58B,0x5BE,0x5BF,0x1806,0x1807,0x2010,0x2016,0x2E17,0x2E18,0x2E1A,0x2E1B,0x301C,0x301D,0x3030,0x3031,0x30A0,0x30A1,0xFE31,0xFE33,0xFE58,0xFE59,0xFE63,0xFE64,0xFF0D,0xFF0E]
,Nd:[0x30,0x3A,0x660,0x66A,0x6F0,0x6FA,0x7C0,0x7CA,0x966,0x970,0x9E6,0x9F0,0xA66,0xA70,0xAE6,0xAF0,0xB66,0xB70,0xBE6,0xBF0,0xC66,0xC70,0xCE6,0xCF0,0xD66,0xD70,0xE50,0xE5A,0xED0,0xEDA,0xF20,0xF2A,0x1040,0x104A,0x1090,0x109A,0x17E0,0x17EA,0x1810,0x181A,0x1946,0x1950,0x19D0,0x19DA,0x1B50,0x1B5A,0x1BB0,0x1BBA,0x1C40,0x1C4A,0x1C50,0x1C5A,0xA620,0xA62A,0xA8D0,0xA8DA,0xA900,0xA90A,0xAA50,0xAA5A,0xFF10,0xFF1A,0x104A0,0x104AA,0x1D7CE,0x1D800]
,Lu:[0x41,0x5B,0xC0,0xD7,0xD8,0xDF,0x100,0x101,0x102,0x103,0x104,0x105,0x106,0x107,0x108,0x109,0x10A,0x10B,0x10C,0x10D,0x10E,0x10F,0x110,0x111,0x112,0x113,0x114,0x115,0x116,0x117,0x118,0x119,0x11A,0x11B,0x11C,0x11D,0x11E,0x11F,0x120,0x121,0x122,0x123,0x124,0x125,0x126,0x127,0x128,0x129,0x12A,0x12B,0x12C,0x12D,0x12E,0x12F,0x130,0x131,0x132,0x133,0x134,0x135,0x136,0x137,0x139,0x13A,0x13B,0x13C,0x13D,0x13E,0x13F,0x140,0x141,0x142,0x143,0x144,0x145,0x146,0x147,0x148,0x14A,0x14B,0x14C,0x14D,0x14E,0x14F,0x150,0x151,0x152,0x153,0x154,0x155,0x156,0x157,0x158,0x159,0x15A,0x15B,0x15C,0x15D,0x15E,0x15F,0x160,0x161,0x162,0x163,0x164,0x165,0x166,0x167,0x168,0x169,0x16A,0x16B,0x16C,0x16D,0x16E,0x16F,0x170,0x171,0x172,0x173,0x174,0x175,0x176,0x177,0x178,0x17A,0x17B,0x17C,0x17D,0x17E,0x181,0x183,0x184,0x185,0x186,0x188,0x189,0x18C,0x18E,0x192,0x193,0x195,0x196,0x199,0x19C,0x19E,0x19F,0x1A1,0x1A2,0x1A3,0x1A4,0x1A5,0x1A6,0x1A8,0x1A9,0x1AA,0x1AC,0x1AD,0x1AE,0x1B0,0x1B1,0x1B4,0x1B5,0x1B6,0x1B7,0x1B9,0x1BC,0x1BD,0x1C4,0x1C5,0x1C7,0x1C8,0x1CA,0x1CB,0x1CD,0x1CE,0x1CF,0x1D0,0x1D1,0x1D2,0x1D3,0x1D4,0x1D5,0x1D6,0x1D7,0x1D8,0x1D9,0x1DA,0x1DB,0x1DC,0x1DE,0x1DF,0x1E0,0x1E1,0x1E2,0x1E3,0x1E4,0x1E5,0x1E6,0x1E7,0x1E8,0x1E9,0x1EA,0x1EB,0x1EC,0x1ED,0x1EE,0x1EF,0x1F1,0x1F2,0x1F4,0x1F5,0x1F6,0x1F9,0x1FA,0x1FB,0x1FC,0x1FD,0x1FE,0x1FF,0x200,0x201,0x202,0x203,0x204,0x205,0x206,0x207,0x208,0x209,0x20A,0x20B,0x20C,0x20D,0x20E,0x20F,0x210,0x211,0x212,0x213,0x214,0x215,0x216,0x217,0x218,0x219,0x21A,0x21B,0x21C,0x21D,0x21E,0x21F,0x220,0x221,0x222,0x223,0x224,0x225,0x226,0x227,0x228,0x229,0x22A,0x22B,0x22C,0x22D,0x22E,0x22F,0x230,0x231,0x232,0x233,0x23A,0x23C,0x23D,0x23F,0x241,0x242,0x243,0x247,0x248,0x249,0x24A,0x24B,0x24C,0x24D,0x24E,0x24F,0x370,0x371,0x372,0x373,0x376,0x377,0x386,0x387,0x388,0x38B,0x38C,0x38D,0x38E,0x390,0x391,0x3A2,0x3A3,0x3AC,0x3CF,0x3D0,0x3D2,0x3D5,0x3D8,0x3D9,0x3DA,0x3DB,0x3DC,0x3DD,0x3DE,0x3DF,0x3E0,0x3E1,0x3E2,0x3E3,0x3E4,0x3E5,0x3E6,0x3E7,0x3E8,0x3E9,0x3EA,0x3EB,0x3EC,0x3ED,0x3EE,0x3EF,0x3F4,0x3F5,0x3F7,0x3F8,0x3F9,0x3FB,0x3FD,0x430,0x460,0x461,0x462,0x463,0x464,0x465,0x466,0x467,0x468,0x469,0x46A,0x46B,0x46C,0x46D,0x46E,0x46F,0x470,0x471,0x472,0x473,0x474,0x475,0x476,0x477,0x478,0x479,0x47A,0x47B,0x47C,0x47D,0x47E,0x47F,0x480,0x481,0x48A,0x48B,0x48C,0x48D,0x48E,0x48F,0x490,0x491,0x492,0x493,0x494,0x495,0x496,0x497,0x498,0x499,0x49A,0x49B,0x49C,0x49D,0x49E,0x49F,0x4A0,0x4A1,0x4A2,0x4A3,0x4A4,0x4A5,0x4A6,0x4A7,0x4A8,0x4A9,0x4AA,0x4AB,0x4AC,0x4AD,0x4AE,0x4AF,0x4B0,0x4B1,0x4B2,0x4B3,0x4B4,0x4B5,0x4B6,0x4B7,0x4B8,0x4B9,0x4BA,0x4BB,0x4BC,0x4BD,0x4BE,0x4BF,0x4C0,0x4C2,0x4C3,0x4C4,0x4C5,0x4C6,0x4C7,0x4C8,0x4C9,0x4CA,0x4CB,0x4CC,0x4CD,0x4CE,0x4D0,0x4D1,0x4D2,0x4D3,0x4D4,0x4D5,0x4D6,0x4D7,0x4D8,0x4D9,0x4DA,0x4DB,0x4DC,0x4DD,0x4DE,0x4DF,0x4E0,0x4E1,0x4E2,0x4E3,0x4E4,0x4E5,0x4E6,0x4E7,0x4E8,0x4E9,0x4EA,0x4EB,0x4EC,0x4ED,0x4EE,0x4EF,0x4F0,0x4F1,0x4F2,0x4F3,0x4F4,0x4F5,0x4F6,0x4F7,0x4F8,0x4F9,0x4FA,0x4FB,0x4FC,0x4FD,0x4FE,0x4FF,0x500,0x501,0x502,0x503,0x504,0x505,0x506,0x507,0x508,0x509,0x50A,0x50B,0x50C,0x50D,0x50E,0x50F,0x510,0x511,0x512,0x513,0x514,0x515,0x516,0x517,0x518,0x519,0x51A,0x51B,0x51C,0x51D,0x51E,0x51F,0x520,0x521,0x522,0x523,0x531,0x557,0x10A0,0x10C6,0x1E00,0x1E01,0x1E02,0x1E03,0x1E04,0x1E05,0x1E06,0x1E07,0x1E08,0x1E09,0x1E0A,0x1E0B,0x1E0C,0x1E0D,0x1E0E,0x1E0F,0x1E10,0x1E11,0x1E12,0x1E13,0x1E14,0x1E15,0x1E16,0x1E17,0x1E18,0x1E19,0x1E1A,0x1E1B,0x1E1C,0x1E1D,0x1E1E,0x1E1F,0x1E20,0x1E21,0x1E22,0x1E23,0x1E24,0x1E25,0x1E26,0x1E27,0x1E28,0x1E29,0x1E2A,0x1E2B,0x1E2C,0x1E2D,0x1E2E,0x1E2F,0x1E30,0x1E31,0x1E32,0x1E33,0x1E34,0x1E35,0x1E36,0x1E37,0x1E38,0x1E39,0x1E3A,0x1E3B,0x1E3C,0x1E3D,0x1E3E,0x1E3F,0x1E40,0x1E41,0x1E42,0x1E43,0x1E44,0x1E45,0x1E46,0x1E47,0x1E48,0x1E49,0x1E4A,0x1E4B,0x1E4C,0x1E4D,0x1E4E,0x1E4F,0x1E50,0x1E51,0x1E52,0x1E53,0x1E54,0x1E55,0x1E56,0x1E57,0x1E58,0x1E59,0x1E5A,0x1E5B,0x1E5C,0x1E5D,0x1E5E,0x1E5F,0x1E60,0x1E61,0x1E62,0x1E63,0x1E64,0x1E65,0x1E66,0x1E67,0x1E68,0x1E69,0x1E6A,0x1E6B,0x1E6C,0x1E6D,0x1E6E,0x1E6F,0x1E70,0x1E71,0x1E72,0x1E73,0x1E74,0x1E75,0x1E76,0x1E77,0x1E78,0x1E79,0x1E7A,0x1E7B,0x1E7C,0x1E7D,0x1E7E,0x1E7F,0x1E80,0x1E81,0x1E82,0x1E83,0x1E84,0x1E85,0x1E86,0x1E87,0x1E88,0x1E89,0x1E8A,0x1E8B,0x1E8C,0x1E8D,0x1E8E,0x1E8F,0x1E90,0x1E91,0x1E92,0x1E93,0x1E94,0x1E95,0x1E9E,0x1E9F,0x1EA0,0x1EA1,0x1EA2,0x1EA3,0x1EA4,0x1EA5,0x1EA6,0x1EA7,0x1EA8,0x1EA9,0x1EAA,0x1EAB,0x1EAC,0x1EAD,0x1EAE,0x1EAF,0x1EB0,0x1EB1,0x1EB2,0x1EB3,0x1EB4,0x1EB5,0x1EB6,0x1EB7,0x1EB8,0x1EB9,0x1EBA,0x1EBB,0x1EBC,0x1EBD,0x1EBE,0x1EBF,0x1EC0,0x1EC1,0x1EC2,0x1EC3,0x1EC4,0x1EC5,0x1EC6,0x1EC7,0x1EC8,0x1EC9,0x1ECA,0x1ECB,0x1ECC,0x1ECD,0x1ECE,0x1ECF,0x1ED0,0x1ED1,0x1ED2,0x1ED3,0x1ED4,0x1ED5,0x1ED6,0x1ED7,0x1ED8,0x1ED9,0x1EDA,0x1EDB,0x1EDC,0x1EDD,0x1EDE,0x1EDF,0x1EE0,0x1EE1,0x1EE2,0x1EE3,0x1EE4,0x1EE5,0x1EE6,0x1EE7,0x1EE8,0x1EE9,0x1EEA,0x1EEB,0x1EEC,0x1EED,0x1EEE,0x1EEF,0x1EF0,0x1EF1,0x1EF2,0x1EF3,0x1EF4,0x1EF5,0x1EF6,0x1EF7,0x1EF8,0x1EF9,0x1EFA,0x1EFB,0x1EFC,0x1EFD,0x1EFE,0x1EFF,0x1F08,0x1F10,0x1F18,0x1F1E,0x1F28,0x1F30,0x1F38,0x1F40,0x1F48,0x1F4E,0x1F59,0x1F5A,0x1F5B,0x1F5C,0x1F5D,0x1F5E,0x1F5F,0x1F60,0x1F68,0x1F70,0x1FB8,0x1FBC,0x1FC8,0x1FCC,0x1FD8,0x1FDC,0x1FE8,0x1FED,0x1FF8,0x1FFC,0x2102,0x2103,0x2107,0x2108,0x210B,0x210E,0x2110,0x2113,0x2115,0x2116,0x2119,0x211E,0x2124,0x2125,0x2126,0x2127,0x2128,0x2129,0x212A,0x212E,0x2130,0x2134,0x213E,0x2140,0x2145,0x2146,0x2183,0x2184,0x2C00,0x2C2F,0x2C60,0x2C61,0x2C62,0x2C65,0x2C67,0x2C68,0x2C69,0x2C6A,0x2C6B,0x2C6C,0x2C6D,0x2C70,0x2C72,0x2C73,0x2C75,0x2C76,0x2C80,0x2C81,0x2C82,0x2C83,0x2C84,0x2C85,0x2C86,0x2C87,0x2C88,0x2C89,0x2C8A,0x2C8B,0x2C8C,0x2C8D,0x2C8E,0x2C8F,0x2C90,0x2C91,0x2C92,0x2C93,0x2C94,0x2C95,0x2C96,0x2C97,0x2C98,0x2C99,0x2C9A,0x2C9B,0x2C9C,0x2C9D,0x2C9E,0x2C9F,0x2CA0,0x2CA1,0x2CA2,0x2CA3,0x2CA4,0x2CA5,0x2CA6,0x2CA7,0x2CA8,0x2CA9,0x2CAA,0x2CAB,0x2CAC,0x2CAD,0x2CAE,0x2CAF,0x2CB0,0x2CB1,0x2CB2,0x2CB3,0x2CB4,0x2CB5,0x2CB6,0x2CB7,0x2CB8,0x2CB9,0x2CBA,0x2CBB,0x2CBC,0x2CBD,0x2CBE,0x2CBF,0x2CC0,0x2CC1,0x2CC2,0x2CC3,0x2CC4,0x2CC5,0x2CC6,0x2CC7,0x2CC8,0x2CC9,0x2CCA,0x2CCB,0x2CCC,0x2CCD,0x2CCE,0x2CCF,0x2CD0,0x2CD1,0x2CD2,0x2CD3,0x2CD4,0x2CD5,0x2CD6,0x2CD7,0x2CD8,0x2CD9,0x2CDA,0x2CDB,0x2CDC,0x2CDD,0x2CDE,0x2CDF,0x2CE0,0x2CE1,0x2CE2,0x2CE3,0xA640,0xA641,0xA642,0xA643,0xA644,0xA645,0xA646,0xA647,0xA648,0xA649,0xA64A,0xA64B,0xA64C,0xA64D,0xA64E,0xA64F,0xA650,0xA651,0xA652,0xA653,0xA654,0xA655,0xA656,0xA657,0xA658,0xA659,0xA65A,0xA65B,0xA65C,0xA65D,0xA65E,0xA65F,0xA662,0xA663,0xA664,0xA665,0xA666,0xA667,0xA668,0xA669,0xA66A,0xA66B,0xA66C,0xA66D,0xA680,0xA681,0xA682,0xA683,0xA684,0xA685,0xA686,0xA687,0xA688,0xA689,0xA68A,0xA68B,0xA68C,0xA68D,0xA68E,0xA68F,0xA690,0xA691,0xA692,0xA693,0xA694,0xA695,0xA696,0xA697,0xA722,0xA723,0xA724,0xA725,0xA726,0xA727,0xA728,0xA729,0xA72A,0xA72B,0xA72C,0xA72D,0xA72E,0xA72F,0xA732,0xA733,0xA734,0xA735,0xA736,0xA737,0xA738,0xA739,0xA73A,0xA73B,0xA73C,0xA73D,0xA73E,0xA73F,0xA740,0xA741,0xA742,0xA743,0xA744,0xA745,0xA746,0xA747,0xA748,0xA749,0xA74A,0xA74B,0xA74C,0xA74D,0xA74E,0xA74F,0xA750,0xA751,0xA752,0xA753,0xA754,0xA755,0xA756,0xA757,0xA758,0xA759,0xA75A,0xA75B,0xA75C,0xA75D,0xA75E,0xA75F,0xA760,0xA761,0xA762,0xA763,0xA764,0xA765,0xA766,0xA767,0xA768,0xA769,0xA76A,0xA76B,0xA76C,0xA76D,0xA76E,0xA76F,0xA779,0xA77A,0xA77B,0xA77C,0xA77D,0xA77F,0xA780,0xA781,0xA782,0xA783,0xA784,0xA785,0xA786,0xA787,0xA78B,0xA78C,0xFF21,0xFF3B,0x10400,0x10428,0x1D400,0x1D41A,0x1D434,0x1D44E,0x1D468,0x1D482,0x1D49C,0x1D49D,0x1D49E,0x1D4A0,0x1D4A2,0x1D4A3,0x1D4A5,0x1D4A7,0x1D4A9,0x1D4AD,0x1D4AE,0x1D4B6,0x1D4D0,0x1D4EA,0x1D504,0x1D506,0x1D507,0x1D50B,0x1D50D,0x1D515,0x1D516,0x1D51D,0x1D538,0x1D53A,0x1D53B,0x1D53F,0x1D540,0x1D545,0x1D546,0x1D547,0x1D54A,0x1D551,0x1D56C,0x1D586,0x1D5A0,0x1D5BA,0x1D5D4,0x1D5EE,0x1D608,0x1D622,0x1D63C,0x1D656,0x1D670,0x1D68A,0x1D6A8,0x1D6C1,0x1D6E2,0x1D6FB,0x1D71C,0x1D735,0x1D756,0x1D76F,0x1D790,0x1D7A9,0x1D7CA,0x1D7CB]
,Sk:[0x5E,0x5F,0x60,0x61,0xA8,0xA9,0xAF,0xB0,0xB4,0xB5,0xB8,0xB9,0x2C2,0x2C6,0x2D2,0x2E0,0x2E5,0x2EC,0x2ED,0x2EE,0x2EF,0x300,0x375,0x376,0x384,0x386,0x1FBD,0x1FBE,0x1FBF,0x1FC2,0x1FCD,0x1FD0,0x1FDD,0x1FE0,0x1FED,0x1FF0,0x1FFD,0x1FFF,0x309B,0x309D,0xA700,0xA717,0xA720,0xA722,0xA789,0xA78B,0xFF3E,0xFF3F,0xFF40,0xFF41,0xFFE3,0xFFE4]
,Pc:[0x5F,0x60,0x203F,0x2041,0x2054,0x2055,0xFE33,0xFE35,0xFE4D,0xFE50,0xFF3F,0xFF40]
,Ll:[0x61,0x7B,0xAA,0xAB,0xB5,0xB6,0xBA,0xBB,0xDF,0xF7,0xF8,0x100,0x101,0x102,0x103,0x104,0x105,0x106,0x107,0x108,0x109,0x10A,0x10B,0x10C,0x10D,0x10E,0x10F,0x110,0x111,0x112,0x113,0x114,0x115,0x116,0x117,0x118,0x119,0x11A,0x11B,0x11C,0x11D,0x11E,0x11F,0x120,0x121,0x122,0x123,0x124,0x125,0x126,0x127,0x128,0x129,0x12A,0x12B,0x12C,0x12D,0x12E,0x12F,0x130,0x131,0x132,0x133,0x134,0x135,0x136,0x137,0x139,0x13A,0x13B,0x13C,0x13D,0x13E,0x13F,0x140,0x141,0x142,0x143,0x144,0x145,0x146,0x147,0x148,0x14A,0x14B,0x14C,0x14D,0x14E,0x14F,0x150,0x151,0x152,0x153,0x154,0x155,0x156,0x157,0x158,0x159,0x15A,0x15B,0x15C,0x15D,0x15E,0x15F,0x160,0x161,0x162,0x163,0x164,0x165,0x166,0x167,0x168,0x169,0x16A,0x16B,0x16C,0x16D,0x16E,0x16F,0x170,0x171,0x172,0x173,0x174,0x175,0x176,0x177,0x178,0x17A,0x17B,0x17C,0x17D,0x17E,0x181,0x183,0x184,0x185,0x186,0x188,0x189,0x18C,0x18E,0x192,0x193,0x195,0x196,0x199,0x19C,0x19E,0x19F,0x1A1,0x1A2,0x1A3,0x1A4,0x1A5,0x1A6,0x1A8,0x1A9,0x1AA,0x1AC,0x1AD,0x1AE,0x1B0,0x1B1,0x1B4,0x1B5,0x1B6,0x1B7,0x1B9,0x1BB,0x1BD,0x1C0,0x1C6,0x1C7,0x1C9,0x1CA,0x1CC,0x1CD,0x1CE,0x1CF,0x1D0,0x1D1,0x1D2,0x1D3,0x1D4,0x1D5,0x1D6,0x1D7,0x1D8,0x1D9,0x1DA,0x1DB,0x1DC,0x1DE,0x1DF,0x1E0,0x1E1,0x1E2,0x1E3,0x1E4,0x1E5,0x1E6,0x1E7,0x1E8,0x1E9,0x1EA,0x1EB,0x1EC,0x1ED,0x1EE,0x1EF,0x1F1,0x1F3,0x1F4,0x1F5,0x1F6,0x1F9,0x1FA,0x1FB,0x1FC,0x1FD,0x1FE,0x1FF,0x200,0x201,0x202,0x203,0x204,0x205,0x206,0x207,0x208,0x209,0x20A,0x20B,0x20C,0x20D,0x20E,0x20F,0x210,0x211,0x212,0x213,0x214,0x215,0x216,0x217,0x218,0x219,0x21A,0x21B,0x21C,0x21D,0x21E,0x21F,0x220,0x221,0x222,0x223,0x224,0x225,0x226,0x227,0x228,0x229,0x22A,0x22B,0x22C,0x22D,0x22E,0x22F,0x230,0x231,0x232,0x233,0x23A,0x23C,0x23D,0x23F,0x241,0x242,0x243,0x247,0x248,0x249,0x24A,0x24B,0x24C,0x24D,0x24E,0x24F,0x294,0x295,0x2B0,0x371,0x372,0x373,0x374,0x377,0x378,0x37B,0x37E,0x390,0x391,0x3AC,0x3CF,0x3D0,0x3D2,0x3D5,0x3D8,0x3D9,0x3DA,0x3DB,0x3DC,0x3DD,0x3DE,0x3DF,0x3E0,0x3E1,0x3E2,0x3E3,0x3E4,0x3E5,0x3E6,0x3E7,0x3E8,0x3E9,0x3EA,0x3EB,0x3EC,0x3ED,0x3EE,0x3EF,0x3F4,0x3F5,0x3F6,0x3F8,0x3F9,0x3FB,0x3FD,0x430,0x460,0x461,0x462,0x463,0x464,0x465,0x466,0x467,0x468,0x469,0x46A,0x46B,0x46C,0x46D,0x46E,0x46F,0x470,0x471,0x472,0x473,0x474,0x475,0x476,0x477,0x478,0x479,0x47A,0x47B,0x47C,0x47D,0x47E,0x47F,0x480,0x481,0x482,0x48B,0x48C,0x48D,0x48E,0x48F,0x490,0x491,0x492,0x493,0x494,0x495,0x496,0x497,0x498,0x499,0x49A,0x49B,0x49C,0x49D,0x49E,0x49F,0x4A0,0x4A1,0x4A2,0x4A3,0x4A4,0x4A5,0x4A6,0x4A7,0x4A8,0x4A9,0x4AA,0x4AB,0x4AC,0x4AD,0x4AE,0x4AF,0x4B0,0x4B1,0x4B2,0x4B3,0x4B4,0x4B5,0x4B6,0x4B7,0x4B8,0x4B9,0x4BA,0x4BB,0x4BC,0x4BD,0x4BE,0x4BF,0x4C0,0x4C2,0x4C3,0x4C4,0x4C5,0x4C6,0x4C7,0x4C8,0x4C9,0x4CA,0x4CB,0x4CC,0x4CD,0x4CE,0x4D0,0x4D1,0x4D2,0x4D3,0x4D4,0x4D5,0x4D6,0x4D7,0x4D8,0x4D9,0x4DA,0x4DB,0x4DC,0x4DD,0x4DE,0x4DF,0x4E0,0x4E1,0x4E2,0x4E3,0x4E4,0x4E5,0x4E6,0x4E7,0x4E8,0x4E9,0x4EA,0x4EB,0x4EC,0x4ED,0x4EE,0x4EF,0x4F0,0x4F1,0x4F2,0x4F3,0x4F4,0x4F5,0x4F6,0x4F7,0x4F8,0x4F9,0x4FA,0x4FB,0x4FC,0x4FD,0x4FE,0x4FF,0x500,0x501,0x502,0x503,0x504,0x505,0x506,0x507,0x508,0x509,0x50A,0x50B,0x50C,0x50D,0x50E,0x50F,0x510,0x511,0x512,0x513,0x514,0x515,0x516,0x517,0x518,0x519,0x51A,0x51B,0x51C,0x51D,0x51E,0x51F,0x520,0x521,0x522,0x523,0x524,0x561,0x588,0x1D00,0x1D2C,0x1D62,0x1D78,0x1D79,0x1D9B,0x1E01,0x1E02,0x1E03,0x1E04,0x1E05,0x1E06,0x1E07,0x1E08,0x1E09,0x1E0A,0x1E0B,0x1E0C,0x1E0D,0x1E0E,0x1E0F,0x1E10,0x1E11,0x1E12,0x1E13,0x1E14,0x1E15,0x1E16,0x1E17,0x1E18,0x1E19,0x1E1A,0x1E1B,0x1E1C,0x1E1D,0x1E1E,0x1E1F,0x1E20,0x1E21,0x1E22,0x1E23,0x1E24,0x1E25,0x1E26,0x1E27,0x1E28,0x1E29,0x1E2A,0x1E2B,0x1E2C,0x1E2D,0x1E2E,0x1E2F,0x1E30,0x1E31,0x1E32,0x1E33,0x1E34,0x1E35,0x1E36,0x1E37,0x1E38,0x1E39,0x1E3A,0x1E3B,0x1E3C,0x1E3D,0x1E3E,0x1E3F,0x1E40,0x1E41,0x1E42,0x1E43,0x1E44,0x1E45,0x1E46,0x1E47,0x1E48,0x1E49,0x1E4A,0x1E4B,0x1E4C,0x1E4D,0x1E4E,0x1E4F,0x1E50,0x1E51,0x1E52,0x1E53,0x1E54,0x1E55,0x1E56,0x1E57,0x1E58,0x1E59,0x1E5A,0x1E5B,0x1E5C,0x1E5D,0x1E5E,0x1E5F,0x1E60,0x1E61,0x1E62,0x1E63,0x1E64,0x1E65,0x1E66,0x1E67,0x1E68,0x1E69,0x1E6A,0x1E6B,0x1E6C,0x1E6D,0x1E6E,0x1E6F,0x1E70,0x1E71,0x1E72,0x1E73,0x1E74,0x1E75,0x1E76,0x1E77,0x1E78,0x1E79,0x1E7A,0x1E7B,0x1E7C,0x1E7D,0x1E7E,0x1E7F,0x1E80,0x1E81,0x1E82,0x1E83,0x1E84,0x1E85,0x1E86,0x1E87,0x1E88,0x1E89,0x1E8A,0x1E8B,0x1E8C,0x1E8D,0x1E8E,0x1E8F,0x1E90,0x1E91,0x1E92,0x1E93,0x1E94,0x1E95,0x1E9E,0x1E9F,0x1EA0,0x1EA1,0x1EA2,0x1EA3,0x1EA4,0x1EA5,0x1EA6,0x1EA7,0x1EA8,0x1EA9,0x1EAA,0x1EAB,0x1EAC,0x1EAD,0x1EAE,0x1EAF,0x1EB0,0x1EB1,0x1EB2,0x1EB3,0x1EB4,0x1EB5,0x1EB6,0x1EB7,0x1EB8,0x1EB9,0x1EBA,0x1EBB,0x1EBC,0x1EBD,0x1EBE,0x1EBF,0x1EC0,0x1EC1,0x1EC2,0x1EC3,0x1EC4,0x1EC5,0x1EC6,0x1EC7,0x1EC8,0x1EC9,0x1ECA,0x1ECB,0x1ECC,0x1ECD,0x1ECE,0x1ECF,0x1ED0,0x1ED1,0x1ED2,0x1ED3,0x1ED4,0x1ED5,0x1ED6,0x1ED7,0x1ED8,0x1ED9,0x1EDA,0x1EDB,0x1EDC,0x1EDD,0x1EDE,0x1EDF,0x1EE0,0x1EE1,0x1EE2,0x1EE3,0x1EE4,0x1EE5,0x1EE6,0x1EE7,0x1EE8,0x1EE9,0x1EEA,0x1EEB,0x1EEC,0x1EED,0x1EEE,0x1EEF,0x1EF0,0x1EF1,0x1EF2,0x1EF3,0x1EF4,0x1EF5,0x1EF6,0x1EF7,0x1EF8,0x1EF9,0x1EFA,0x1EFB,0x1EFC,0x1EFD,0x1EFE,0x1EFF,0x1F08,0x1F10,0x1F16,0x1F20,0x1F28,0x1F30,0x1F38,0x1F40,0x1F46,0x1F50,0x1F58,0x1F60,0x1F68,0x1F70,0x1F7E,0x1F80,0x1F88,0x1F90,0x1F98,0x1FA0,0x1FA8,0x1FB0,0x1FB5,0x1FB6,0x1FB8,0x1FBE,0x1FBF,0x1FC2,0x1FC5,0x1FC6,0x1FC8,0x1FD0,0x1FD4,0x1FD6,0x1FD8,0x1FE0,0x1FE8,0x1FF2,0x1FF5,0x1FF6,0x1FF8,0x2071,0x2072,0x207F,0x2080,0x210A,0x210B,0x210E,0x2110,0x2113,0x2114,0x212F,0x2130,0x2134,0x2135,0x2139,0x213A,0x213C,0x213E,0x2146,0x214A,0x214E,0x214F,0x2184,0x2185,0x2C30,0x2C5F,0x2C61,0x2C62,0x2C65,0x2C67,0x2C68,0x2C69,0x2C6A,0x2C6B,0x2C6C,0x2C6D,0x2C71,0x2C72,0x2C73,0x2C75,0x2C76,0x2C7D,0x2C81,0x2C82,0x2C83,0x2C84,0x2C85,0x2C86,0x2C87,0x2C88,0x2C89,0x2C8A,0x2C8B,0x2C8C,0x2C8D,0x2C8E,0x2C8F,0x2C90,0x2C91,0x2C92,0x2C93,0x2C94,0x2C95,0x2C96,0x2C97,0x2C98,0x2C99,0x2C9A,0x2C9B,0x2C9C,0x2C9D,0x2C9E,0x2C9F,0x2CA0,0x2CA1,0x2CA2,0x2CA3,0x2CA4,0x2CA5,0x2CA6,0x2CA7,0x2CA8,0x2CA9,0x2CAA,0x2CAB,0x2CAC,0x2CAD,0x2CAE,0x2CAF,0x2CB0,0x2CB1,0x2CB2,0x2CB3,0x2CB4,0x2CB5,0x2CB6,0x2CB7,0x2CB8,0x2CB9,0x2CBA,0x2CBB,0x2CBC,0x2CBD,0x2CBE,0x2CBF,0x2CC0,0x2CC1,0x2CC2,0x2CC3,0x2CC4,0x2CC5,0x2CC6,0x2CC7,0x2CC8,0x2CC9,0x2CCA,0x2CCB,0x2CCC,0x2CCD,0x2CCE,0x2CCF,0x2CD0,0x2CD1,0x2CD2,0x2CD3,0x2CD4,0x2CD5,0x2CD6,0x2CD7,0x2CD8,0x2CD9,0x2CDA,0x2CDB,0x2CDC,0x2CDD,0x2CDE,0x2CDF,0x2CE0,0x2CE1,0x2CE2,0x2CE3,0x2CE5,0x2D00,0x2D26,0xA641,0xA642,0xA643,0xA644,0xA645,0xA646,0xA647,0xA648,0xA649,0xA64A,0xA64B,0xA64C,0xA64D,0xA64E,0xA64F,0xA650,0xA651,0xA652,0xA653,0xA654,0xA655,0xA656,0xA657,0xA658,0xA659,0xA65A,0xA65B,0xA65C,0xA65D,0xA65E,0xA65F,0xA660,0xA663,0xA664,0xA665,0xA666,0xA667,0xA668,0xA669,0xA66A,0xA66B,0xA66C,0xA66D,0xA66E,0xA681,0xA682,0xA683,0xA684,0xA685,0xA686,0xA687,0xA688,0xA689,0xA68A,0xA68B,0xA68C,0xA68D,0xA68E,0xA68F,0xA690,0xA691,0xA692,0xA693,0xA694,0xA695,0xA696,0xA697,0xA698,0xA723,0xA724,0xA725,0xA726,0xA727,0xA728,0xA729,0xA72A,0xA72B,0xA72C,0xA72D,0xA72E,0xA72F,0xA732,0xA733,0xA734,0xA735,0xA736,0xA737,0xA738,0xA739,0xA73A,0xA73B,0xA73C,0xA73D,0xA73E,0xA73F,0xA740,0xA741,0xA742,0xA743,0xA744,0xA745,0xA746,0xA747,0xA748,0xA749,0xA74A,0xA74B,0xA74C,0xA74D,0xA74E,0xA74F,0xA750,0xA751,0xA752,0xA753,0xA754,0xA755,0xA756,0xA757,0xA758,0xA759,0xA75A,0xA75B,0xA75C,0xA75D,0xA75E,0xA75F,0xA760,0xA761,0xA762,0xA763,0xA764,0xA765,0xA766,0xA767,0xA768,0xA769,0xA76A,0xA76B,0xA76C,0xA76D,0xA76E,0xA76F,0xA770,0xA771,0xA779,0xA77A,0xA77B,0xA77C,0xA77D,0xA77F,0xA780,0xA781,0xA782,0xA783,0xA784,0xA785,0xA786,0xA787,0xA788,0xA78C,0xA78D,0xFB00,0xFB07,0xFB13,0xFB18,0xFF41,0xFF5B,0x10428,0x10450,0x1D41A,0x1D434,0x1D44E,0x1D455,0x1D456,0x1D468,0x1D482,0x1D49C,0x1D4B6,0x1D4BA,0x1D4BB,0x1D4BC,0x1D4BD,0x1D4C4,0x1D4C5,0x1D4D0,0x1D4EA,0x1D504,0x1D51E,0x1D538,0x1D552,0x1D56C,0x1D586,0x1D5A0,0x1D5BA,0x1D5D4,0x1D5EE,0x1D608,0x1D622,0x1D63C,0x1D656,0x1D670,0x1D68A,0x1D6A6,0x1D6C2,0x1D6DB,0x1D6DC,0x1D6E2,0x1D6FC,0x1D715,0x1D716,0x1D71C,0x1D736,0x1D74F,0x1D750,0x1D756,0x1D770,0x1D789,0x1D78A,0x1D790,0x1D7AA,0x1D7C3,0x1D7C4,0x1D7CA,0x1D7CB,0x1D7CC]
,So:[0xA6,0xA8,0xA9,0xAA,0xAE,0xAF,0xB0,0xB1,0xB6,0xB7,0x482,0x483,0x60E,0x610,0x6E9,0x6EA,0x6FD,0x6FF,0x7F6,0x7F7,0x9FA,0x9FB,0xB70,0xB71,0xBF3,0xBF9,0xBFA,0xBFB,0xC7F,0xC80,0xCF1,0xCF3,0xD79,0xD7A,0xF01,0xF04,0xF13,0xF18,0xF1A,0xF20,0xF34,0xF35,0xF36,0xF37,0xF38,0xF39,0xFBE,0xFC6,0xFC7,0xFCD,0xFCE,0xFD0,0x109E,0x10A0,0x1360,0x1361,0x1390,0x139A,0x1940,0x1941,0x19E0,0x1A00,0x1B61,0x1B6B,0x1B74,0x1B7D,0x2100,0x2102,0x2103,0x2107,0x2108,0x210A,0x2114,0x2115,0x2116,0x2119,0x211E,0x2124,0x2125,0x2126,0x2127,0x2128,0x2129,0x212A,0x212E,0x212F,0x213A,0x213C,0x214A,0x214B,0x214C,0x214E,0x214F,0x2150,0x2195,0x219A,0x219C,0x21A0,0x21A1,0x21A3,0x21A4,0x21A6,0x21A7,0x21AE,0x21AF,0x21CE,0x21D0,0x21D2,0x21D3,0x21D4,0x21D5,0x21F4,0x2300,0x2308,0x230C,0x2320,0x2322,0x2329,0x232B,0x237C,0x237D,0x239B,0x23B4,0x23DC,0x23E2,0x23E8,0x2400,0x2427,0x2440,0x244B,0x249C,0x24EA,0x2500,0x25B7,0x25B8,0x25C1,0x25C2,0x25F8,0x2600,0x266F,0x2670,0x269E,0x26A0,0x26BD,0x26C0,0x26C4,0x2701,0x2705,0x2706,0x270A,0x270C,0x2728,0x2729,0x274C,0x274D,0x274E,0x274F,0x2753,0x2756,0x2757,0x2758,0x275F,0x2761,0x2768,0x2794,0x2795,0x2798,0x27B0,0x27B1,0x27BF,0x2800,0x2900,0x2B00,0x2B30,0x2B45,0x2B47,0x2B50,0x2B55,0x2CE5,0x2CEB,0x2E80,0x2E9A,0x2E9B,0x2EF4,0x2F00,0x2FD6,0x2FF0,0x2FFC,0x3004,0x3005,0x3012,0x3014,0x3020,0x3021,0x3036,0x3038,0x303E,0x3040,0x3190,0x3192,0x3196,0x31A0,0x31C0,0x31E4,0x3200,0x321F,0x322A,0x3244,0x3250,0x3251,0x3260,0x3280,0x328A,0x32B1,0x32C0,0x32FF,0x3300,0x3400,0x4DC0,0x4E00,0xA490,0xA4C7,0xA828,0xA82C,0xFDFD,0xFDFE,0xFFE4,0xFFE5,0xFFE8,0xFFE9,0xFFED,0xFFEF,0xFFFC,0xFFFE,0x10102,0x10103,0x10137,0x10140,0x10179,0x1018A,0x10190,0x1019C,0x101D0,0x101FD,0x1D000,0x1D0F6,0x1D100,0x1D127,0x1D129,0x1D165,0x1D16A,0x1D16D,0x1D183,0x1D185,0x1D18C,0x1D1AA,0x1D1AE,0x1D1DE,0x1D200,0x1D242,0x1D245,0x1D246,0x1D300,0x1D357,0x1F000,0x1F02C,0x1F030,0x1F094]
,Pi:[0xAB,0xAC,0x2018,0x2019,0x201B,0x201D,0x201F,0x2020,0x2039,0x203A,0x2E02,0x2E03,0x2E04,0x2E05,0x2E09,0x2E0A,0x2E0C,0x2E0D,0x2E1C,0x2E1D,0x2E20,0x2E21]
,Cf:[0xAD,0xAE,0x600,0x604,0x6DD,0x6DE,0x70F,0x710,0x17B4,0x17B6,0x200B,0x2010,0x202A,0x202F,0x2060,0x2065,0x206A,0x2070,0xFEFF,0xFF00,0xFFF9,0xFFFC,0x1D173,0x1D17B,0xE0001,0xE0002,0xE0020,0xE0080]
,No:[0xB2,0xB4,0xB9,0xBA,0xBC,0xBF,0x9F4,0x9FA,0xBF0,0xBF3,0xC78,0xC7F,0xD70,0xD76,0xF2A,0xF34,0x1369,0x137D,0x17F0,0x17FA,0x2070,0x2071,0x2074,0x207A,0x2080,0x208A,0x2153,0x2160,0x2460,0x249C,0x24EA,0x2500,0x2776,0x2794,0x2CFD,0x2CFE,0x3192,0x3196,0x3220,0x322A,0x3251,0x3260,0x3280,0x328A,0x32B1,0x32C0,0x10107,0x10134,0x10175,0x10179,0x1018A,0x1018B,0x10320,0x10324,0x10916,0x1091A,0x10A40,0x10A48,0x1D360,0x1D372]
,Pf:[0xBB,0xBC,0x2019,0x201A,0x201D,0x201E,0x203A,0x203B,0x2E03,0x2E04,0x2E05,0x2E06,0x2E0A,0x2E0B,0x2E0D,0x2E0E,0x2E1D,0x2E1E,0x2E21,0x2E22]
,Lo:[0x1BB,0x1BC,0x1C0,0x1C4,0x294,0x295,0x5D0,0x5EB,0x5F0,0x5F3,0x621,0x640,0x641,0x64B,0x66E,0x670,0x671,0x6D4,0x6D5,0x6D6,0x6EE,0x6F0,0x6FA,0x6FD,0x6FF,0x700,0x710,0x711,0x712,0x730,0x74D,0x7A6,0x7B1,0x7B2,0x7CA,0x7EB,0x904,0x93A,0x93D,0x93E,0x950,0x951,0x958,0x962,0x972,0x973,0x97B,0x980,0x985,0x98D,0x98F,0x991,0x993,0x9A9,0x9AA,0x9B1,0x9B2,0x9B3,0x9B6,0x9BA,0x9BD,0x9BE,0x9CE,0x9CF,0x9DC,0x9DE,0x9DF,0x9E2,0x9F0,0x9F2,0xA05,0xA0B,0xA0F,0xA11,0xA13,0xA29,0xA2A,0xA31,0xA32,0xA34,0xA35,0xA37,0xA38,0xA3A,0xA59,0xA5D,0xA5E,0xA5F,0xA72,0xA75,0xA85,0xA8E,0xA8F,0xA92,0xA93,0xAA9,0xAAA,0xAB1,0xAB2,0xAB4,0xAB5,0xABA,0xABD,0xABE,0xAD0,0xAD1,0xAE0,0xAE2,0xB05,0xB0D,0xB0F,0xB11,0xB13,0xB29,0xB2A,0xB31,0xB32,0xB34,0xB35,0xB3A,0xB3D,0xB3E,0xB5C,0xB5E,0xB5F,0xB62,0xB71,0xB72,0xB83,0xB84,0xB85,0xB8B,0xB8E,0xB91,0xB92,0xB96,0xB99,0xB9B,0xB9C,0xB9D,0xB9E,0xBA0,0xBA3,0xBA5,0xBA8,0xBAB,0xBAE,0xBBA,0xBD0,0xBD1,0xC05,0xC0D,0xC0E,0xC11,0xC12,0xC29,0xC2A,0xC34,0xC35,0xC3A,0xC3D,0xC3E,0xC58,0xC5A,0xC60,0xC62,0xC85,0xC8D,0xC8E,0xC91,0xC92,0xCA9,0xCAA,0xCB4,0xCB5,0xCBA,0xCBD,0xCBE,0xCDE,0xCDF,0xCE0,0xCE2,0xD05,0xD0D,0xD0E,0xD11,0xD12,0xD29,0xD2A,0xD3A,0xD3D,0xD3E,0xD60,0xD62,0xD7A,0xD80,0xD85,0xD97,0xD9A,0xDB2,0xDB3,0xDBC,0xDBD,0xDBE,0xDC0,0xDC7,0xE01,0xE31,0xE32,0xE34,0xE40,0xE46,0xE81,0xE83,0xE84,0xE85,0xE87,0xE89,0xE8A,0xE8B,0xE8D,0xE8E,0xE94,0xE98,0xE99,0xEA0,0xEA1,0xEA4,0xEA5,0xEA6,0xEA7,0xEA8,0xEAA,0xEAC,0xEAD,0xEB1,0xEB2,0xEB4,0xEBD,0xEBE,0xEC0,0xEC5,0xEDC,0xEDE,0xF00,0xF01,0xF40,0xF48,0xF49,0xF6D,0xF88,0xF8C,0x1000,0x102B,0x103F,0x1040,0x1050,0x1056,0x105A,0x105E,0x1061,0x1062,0x1065,0x1067,0x106E,0x1071,0x1075,0x1082,0x108E,0x108F,0x10D0,0x10FB,0x1100,0x115A,0x115F,0x11A3,0x11A8,0x11FA,0x1200,0x1249,0x124A,0x124E,0x1250,0x1257,0x1258,0x1259,0x125A,0x125E,0x1260,0x1289,0x128A,0x128E,0x1290,0x12B1,0x12B2,0x12B6,0x12B8,0x12BF,0x12C0,0x12C1,0x12C2,0x12C6,0x12C8,0x12D7,0x12D8,0x1311,0x1312,0x1316,0x1318,0x135B,0x1380,0x1390,0x13A0,0x13F5,0x1401,0x166D,0x166F,0x1677,0x1681,0x169B,0x16A0,0x16EB,0x1700,0x170D,0x170E,0x1712,0x1720,0x1732,0x1740,0x1752,0x1760,0x176D,0x176E,0x1771,0x1780,0x17B4,0x17DC,0x17DD,0x1820,0x1843,0x1844,0x1878,0x1880,0x18A9,0x18AA,0x18AB,0x1900,0x191D,0x1950,0x196E,0x1970,0x1975,0x1980,0x19AA,0x19C1,0x19C8,0x1A00,0x1A17,0x1B05,0x1B34,0x1B45,0x1B4C,0x1B83,0x1BA1,0x1BAE,0x1BB0,0x1C00,0x1C24,0x1C4D,0x1C50,0x1C5A,0x1C78,0x2135,0x2139,0x2D30,0x2D66,0x2D80,0x2D97,0x2DA0,0x2DA7,0x2DA8,0x2DAF,0x2DB0,0x2DB7,0x2DB8,0x2DBF,0x2DC0,0x2DC7,0x2DC8,0x2DCF,0x2DD0,0x2DD7,0x2DD8,0x2DDF,0x3006,0x3007,0x303C,0x303D,0x3041,0x3097,0x309F,0x30A0,0x30A1,0x30FB,0x30FF,0x3100,0x3105,0x312E,0x3131,0x318F,0x31A0,0x31B8,0x31F0,0x3200,0x3400,0x4DB6,0x4E00,0x9FC4,0xA000,0xA015,0xA016,0xA48D,0xA500,0xA60C,0xA610,0xA620,0xA62A,0xA62C,0xA66E,0xA66F,0xA7FB,0xA802,0xA803,0xA806,0xA807,0xA80B,0xA80C,0xA823,0xA840,0xA874,0xA882,0xA8B4,0xA90A,0xA926,0xA930,0xA947,0xAA00,0xAA29,0xAA40,0xAA43,0xAA44,0xAA4C,0xAC00,0xD7A4,0xF900,0xFA2E,0xFA30,0xFA6B,0xFA70,0xFADA,0xFB1D,0xFB1E,0xFB1F,0xFB29,0xFB2A,0xFB37,0xFB38,0xFB3D,0xFB3E,0xFB3F,0xFB40,0xFB42,0xFB43,0xFB45,0xFB46,0xFBB2,0xFBD3,0xFD3E,0xFD50,0xFD90,0xFD92,0xFDC8,0xFDF0,0xFDFC,0xFE70,0xFE75,0xFE76,0xFEFD,0xFF66,0xFF70,0xFF71,0xFF9E,0xFFA0,0xFFBF,0xFFC2,0xFFC8,0xFFCA,0xFFD0,0xFFD2,0xFFD8,0xFFDA,0xFFDD,0x10000,0x1000C,0x1000D,0x10027,0x10028,0x1003B,0x1003C,0x1003E,0x1003F,0x1004E,0x10050,0x1005E,0x10080,0x100FB,0x10280,0x1029D,0x102A0,0x102D1,0x10300,0x1031F,0x10330,0x10341,0x10342,0x1034A,0x10380,0x1039E,0x103A0,0x103C4,0x103C8,0x103D0,0x10450,0x1049E,0x10800,0x10806,0x10808,0x10809,0x1080A,0x10836,0x10837,0x10839,0x1083C,0x1083D,0x1083F,0x10840,0x10900,0x10916,0x10920,0x1093A,0x10A00,0x10A01,0x10A10,0x10A14,0x10A15,0x10A18,0x10A19,0x10A34,0x12000,0x1236F,0x20000,0x2A6D7,0x2F800,0x2FA1E]
,Lt:[0x1C5,0x1C6,0x1C8,0x1C9,0x1CB,0x1CC,0x1F2,0x1F3,0x1F88,0x1F90,0x1F98,0x1FA0,0x1FA8,0x1FB0,0x1FBC,0x1FBD,0x1FCC,0x1FCD,0x1FFC,0x1FFD]
,Lm:[0x2B0,0x2C2,0x2C6,0x2D2,0x2E0,0x2E5,0x2EC,0x2ED,0x2EE,0x2EF,0x374,0x375,0x37A,0x37B,0x559,0x55A,0x640,0x641,0x6E5,0x6E7,0x7F4,0x7F6,0x7FA,0x7FB,0x971,0x972,0xE46,0xE47,0xEC6,0xEC7,0x10FC,0x10FD,0x17D7,0x17D8,0x1843,0x1844,0x1C78,0x1C7E,0x1D2C,0x1D62,0x1D78,0x1D79,0x1D9B,0x1DC0,0x2090,0x2095,0x2C7D,0x2C7E,0x2D6F,0x2D70,0x2E2F,0x2E30,0x3005,0x3006,0x3031,0x3036,0x303B,0x303C,0x309D,0x309F,0x30FC,0x30FF,0xA015,0xA016,0xA60C,0xA60D,0xA67F,0xA680,0xA717,0xA720,0xA770,0xA771,0xA788,0xA789,0xFF70,0xFF71,0xFF9E,0xFFA0]
,Mn:[0x300,0x370,0x483,0x488,0x591,0x5BE,0x5BF,0x5C0,0x5C1,0x5C3,0x5C4,0x5C6,0x5C7,0x5C8,0x610,0x61B,0x64B,0x65F,0x670,0x671,0x6D6,0x6DD,0x6DF,0x6E5,0x6E7,0x6E9,0x6EA,0x6EE,0x711,0x712,0x730,0x74B,0x7A6,0x7B1,0x7EB,0x7F4,0x901,0x903,0x93C,0x93D,0x941,0x949,0x94D,0x94E,0x951,0x955,0x962,0x964,0x981,0x982,0x9BC,0x9BD,0x9C1,0x9C5,0x9CD,0x9CE,0x9E2,0x9E4,0xA01,0xA03,0xA3C,0xA3D,0xA41,0xA43,0xA47,0xA49,0xA4B,0xA4E,0xA51,0xA52,0xA70,0xA72,0xA75,0xA76,0xA81,0xA83,0xABC,0xABD,0xAC1,0xAC6,0xAC7,0xAC9,0xACD,0xACE,0xAE2,0xAE4,0xB01,0xB02,0xB3C,0xB3D,0xB3F,0xB40,0xB41,0xB45,0xB4D,0xB4E,0xB56,0xB57,0xB62,0xB64,0xB82,0xB83,0xBC0,0xBC1,0xBCD,0xBCE,0xC3E,0xC41,0xC46,0xC49,0xC4A,0xC4E,0xC55,0xC57,0xC62,0xC64,0xCBC,0xCBD,0xCBF,0xCC0,0xCC6,0xCC7,0xCCC,0xCCE,0xCE2,0xCE4,0xD41,0xD45,0xD4D,0xD4E,0xD62,0xD64,0xDCA,0xDCB,0xDD2,0xDD5,0xDD6,0xDD7,0xE31,0xE32,0xE34,0xE3B,0xE47,0xE4F,0xEB1,0xEB2,0xEB4,0xEBA,0xEBB,0xEBD,0xEC8,0xECE,0xF18,0xF1A,0xF35,0xF36,0xF37,0xF38,0xF39,0xF3A,0xF71,0xF7F,0xF80,0xF85,0xF86,0xF88,0xF90,0xF98,0xF99,0xFBD,0xFC6,0xFC7,0x102D,0x1031,0x1032,0x1038,0x1039,0x103B,0x103D,0x103F,0x1058,0x105A,0x105E,0x1061,0x1071,0x1075,0x1082,0x1083,0x1085,0x1087,0x108D,0x108E,0x135F,0x1360,0x1712,0x1715,0x1732,0x1735,0x1752,0x1754,0x1772,0x1774,0x17B7,0x17BE,0x17C6,0x17C7,0x17C9,0x17D4,0x17DD,0x17DE,0x180B,0x180E,0x18A9,0x18AA,0x1920,0x1923,0x1927,0x1929,0x1932,0x1933,0x1939,0x193C,0x1A17,0x1A19,0x1B00,0x1B04,0x1B34,0x1B35,0x1B36,0x1B3B,0x1B3C,0x1B3D,0x1B42,0x1B43,0x1B6B,0x1B74,0x1B80,0x1B82,0x1BA2,0x1BA6,0x1BA8,0x1BAA,0x1C2C,0x1C34,0x1C36,0x1C38,0x1DC0,0x1DE7,0x1DFE,0x1E00,0x20D0,0x20DD,0x20E1,0x20E2,0x20E5,0x20F1,0x2DE0,0x2E00,0x302A,0x3030,0x3099,0x309B,0xA66F,0xA670,0xA67C,0xA67E,0xA802,0xA803,0xA806,0xA807,0xA80B,0xA80C,0xA825,0xA827,0xA8C4,0xA8C5,0xA926,0xA92E,0xA947,0xA952,0xAA29,0xAA2F,0xAA31,0xAA33,0xAA35,0xAA37,0xAA43,0xAA44,0xAA4C,0xAA4D,0xFB1E,0xFB1F,0xFE00,0xFE10,0xFE20,0xFE27,0x101FD,0x101FE,0x10A01,0x10A04,0x10A05,0x10A07,0x10A0C,0x10A10,0x10A38,0x10A3B,0x10A3F,0x10A40,0x1D167,0x1D16A,0x1D17B,0x1D183,0x1D185,0x1D18C,0x1D1AA,0x1D1AE,0x1D242,0x1D245,0xE0100,0xE01F0]
,Me:[0x488,0x48A,0x6DE,0x6DF,0x20DD,0x20E1,0x20E2,0x20E5,0xA670,0xA673]
,Mc:[0x903,0x904,0x93E,0x941,0x949,0x94D,0x982,0x984,0x9BE,0x9C1,0x9C7,0x9C9,0x9CB,0x9CD,0x9D7,0x9D8,0xA03,0xA04,0xA3E,0xA41,0xA83,0xA84,0xABE,0xAC1,0xAC9,0xACA,0xACB,0xACD,0xB02,0xB04,0xB3E,0xB3F,0xB40,0xB41,0xB47,0xB49,0xB4B,0xB4D,0xB57,0xB58,0xBBE,0xBC0,0xBC1,0xBC3,0xBC6,0xBC9,0xBCA,0xBCD,0xBD7,0xBD8,0xC01,0xC04,0xC41,0xC45,0xC82,0xC84,0xCBE,0xCBF,0xCC0,0xCC5,0xCC7,0xCC9,0xCCA,0xCCC,0xCD5,0xCD7,0xD02,0xD04,0xD3E,0xD41,0xD46,0xD49,0xD4A,0xD4D,0xD57,0xD58,0xD82,0xD84,0xDCF,0xDD2,0xDD8,0xDE0,0xDF2,0xDF4,0xF3E,0xF40,0xF7F,0xF80,0x102B,0x102D,0x1031,0x1032,0x1038,0x1039,0x103B,0x103D,0x1056,0x1058,0x1062,0x1065,0x1067,0x106E,0x1083,0x1085,0x1087,0x108D,0x108F,0x1090,0x17B6,0x17B7,0x17BE,0x17C6,0x17C7,0x17C9,0x1923,0x1927,0x1929,0x192C,0x1930,0x1932,0x1933,0x1939,0x19B0,0x19C1,0x19C8,0x19CA,0x1A19,0x1A1C,0x1B04,0x1B05,0x1B35,0x1B36,0x1B3B,0x1B3C,0x1B3D,0x1B42,0x1B43,0x1B45,0x1B82,0x1B83,0x1BA1,0x1BA2,0x1BA6,0x1BA8,0x1BAA,0x1BAB,0x1C24,0x1C2C,0x1C34,0x1C36,0xA823,0xA825,0xA827,0xA828,0xA880,0xA882,0xA8B4,0xA8C4,0xA952,0xA954,0xAA2F,0xAA31,0xAA33,0xAA35,0xAA4D,0xAA4E,0x1D165,0x1D167,0x1D16D,0x1D173]
,Nl:[0x16EE,0x16F1,0x2160,0x2183,0x2185,0x2189,0x3007,0x3008,0x3021,0x302A,0x3038,0x303B,0x10140,0x10175,0x10341,0x10342,0x1034A,0x1034B,0x103D1,0x103D6,0x12400,0x12463]
,Zl:[0x2028,0x2029]
,Zp:[0x2029,0x202A]
,Cs:[0xD800,0xE000]
,Co:[0xE000,0xF900,0xF0000,0xFFFFE,0x100000,0x10FFFE]
};
var nil=[]
var U=[0]
function fC(c){return fI(cpFC(c))}
function fI(cp){return [cp,cp+1]}
function fIR(from,to){return [from,to+1]}
function fCR(from,to){
from=cpFC(from);to=cpFC(to)
return to>from ?[from,to+1] :[to,from+1]}
function empty(cset){return !cset.length}
function one(cset){return cset.length==2 && cset[0]+1 == cset[1]}
function cpFC(s){var hi,lo
if(/[\uD800-\uDBFF][\uDC00-\uDFFF]/.test(s)){
hi=s.charCodeAt(0)
lo=s.charCodeAt(1)
return 0x10000+(((hi&0x3FF) << 10) | (lo&0x3FF))}
return s.charCodeAt(0)}
function comp(cset){
return (cset[0]==0) ? cset.slice(1)
: [0].concat(cset.slice())}
function fL(a){var i,l,ret=[]
for(i=0,l=a.length;i<l;){
ret.push(a[i])
while(a[i]+1 == a[++i] && i<l);
if(a[i-1]!==0x10ffff)ret.push(a[i-1]+1)}
return ret}
function fS(s){var res=[]
s.replace(/[\u0000-\uD7FF\uDC00-\uFFFF]|([\uD800-\uDBFF][\uDC00-\uDFFF])|[\uD800-\uDBFF]/g,
function(m,u){
if(u)res.push(cpFC(u))
else res.push(m[0].charCodeAt(0))})
return fL(res.sort(function(a,b){return a-b}).filter(function(c,i,a){return !i||a[i-1]!=a[i]}))}
function member(cset,c){var state=false,i,l
if(c>0x10FFFF)return false
for(i=0,l=cset.length;i<l;i++){
if(cset[i]>c)return state
state=!state}
return state}
function eq(as,bs){var i,l
l=as.length
if(l!=bs.length)return false
for(i=0;i<l;i++)if(as[i]!=bs[i])return false
return true}
function diff(as,bs){var
ret=[],i=0,j=0,a,b,al=as.length,bl=bs.length,last,state=0
if(!al)return []
if(!bl)return as
a=as[0]
b=bs[0]
if(isNaN(a)||isNaN(b))throw Error('cset_difference: bad input')
for(;;){
if(a < b){
if(!(state & 1)){
if(a==last) ret.pop(); else ret.push(a)
last=a}
state ^= 2
a=(++i<al)?as[i]:0x110000}
else{
if(a==0x110000 && b==0x110000) return ret
if(state & 2){
if(b==last) ret.pop(); else ret.push(b)
last=b}
state ^= 1
b=(++j<bl)?bs[j]:0x110000}}}
function union(as,bs){var
ret=[],i=0,j=0,a,b,al=as.length,bl=bs.length,last,state=0
if(!al)return bs
if(!bl)return as
a=as[0]
b=bs[0]
if(isNaN(a)||isNaN(b))throw Error('cset_union: bad input')
for(;;){
if(a < b){
if(!(state & 1)){
if(a==last) ret.pop(); else ret.push(a)
last=a}
state ^= 2
a=(++i<al)?as[i]:0x110000}
else{
if(a==0x110000 && b==0x110000) return ret
if(!(state & 2)){
if(b==last) ret.pop(); else ret.push(b)
last=b}
state ^= 1
b=(++j<bl)?bs[j]:0x110000}}}
function inter(as,bs){return comp(union(comp(as),comp(bs)))}
esc.safe=[32,33];
['Lu'
,'Ll'
,'Lt'
,'Lm'
,'Lo'
,'Nd'
,'No'
,'Pc'
,'Pd'
,'Ps'
,'Pe'
,'Pi'
,'Pf'
,'Po'
,'Sm'
,'Sc'
,'Sk'
,'So'
].forEach(function(s){esc.safe=union(esc.safe,cUC[s])})
esc.safe=inter(esc.safe,fIR(0,0xFFFF))
function esc(n){var
x={9:'\\t',10:'\\n',11:'\\v',12:'\\f',13:'\\r',45:'\\-',92:'\\\\',93:'\\]'}[n]
if(x)return x
if(member(esc.safe,n))return String.fromCharCode(n)
function fill(s){return ('000'+s).slice(-4)}
return "\\u"+fill(n.toString(16))}
function reCC_bmp(cset){var res=[],state=0,i,l,c
if(one(cset)) return esc(cset[0])
for(i=0,l=cset.length;i<l,cset[i]<0x10000;i++){
if(state && cset[i] == c+1){state=0;continue}
c=cset[i]
if(state){res.push('-');c--}
res.push(esc(c))
state=!state}
if(state){res.push('-\\uffff')}
return '['+res.join('')+']'}
function splitAtBMP(cset){var bmp=[],i=0,l=cset.length,c,state
for(;i<l;i++){
c=cset[i]
if(c>0xFFFF){
state=i&1
if(state)bmp.push(0x10000)
if(state&&c===0x10000){i++;state=0}
return [bmp
,(state?[0x10000]:[]).concat(cset.slice(i))]}
bmp.push(c)}
state=l&1
if(state)bmp.push(0x10000)
return [bmp
,(state?[0x10000]:[])]}
function surrogatePair(n){
n-=0x10000
return [0xD800|(n>>10),0xDC00|(n&0x3FF)]}
function surrogateSet(cset){var i=0,l=cset.length,state,c,prev,hi,lo,ret=[],prev_hi,prev_lo,full=[],cur,all_hi=[],a
if(l&1){cset[l++]=0x110000}
cset.push(0x110001)
for(;i<l,c=cset[i];i++){
if(c<0x10000)continue
state=i&1
if(state){
a=surrogatePair(c);hi=a[0];lo=a[1]
if(!cur){prev_hi=0xD800;prev_lo=0xDC00;cur=[[0xD800,0xD801],[0xDC00]]}
if(hi===prev_hi) cur[1].push(lo)
else{
if(prev_lo===0xDC00){full.push(prev_hi);all_hi.push(prev_hi)}
else{cur[1].push(0xE000);ret.push(cur);all_hi.push(prev_hi)}
while(++prev_hi < hi){full.push(prev_hi);all_hi.push(prev_hi)}
if(lo===0xDC00) cur=[[hi,hi+1],[]]
else cur=[[hi,hi+1],[0xDC00,lo]]}
prev_lo=lo}
else{
a=surrogatePair(c);hi=a[0];lo=a[1]
if(cur && hi===prev_hi) cur[1].push(lo)
else{
if(cur && cur[1].length){ret.push(cur);all_hi.push(prev_hi)}
prev_hi=hi
cur=[[hi,hi+1],[lo]]}
prev_lo=lo}}
return [fL(all_hi)
,(full.length?[[fL(full),[0xDC00,0xE000]]]
:[]).concat(ret)
]}
function sS2RE(surr){var ret=[]
surr.forEach(function(pair){
ret.push(f(pair[0])+f(pair[1]))})
return ret.join('|')
function f(cset){
return reCC_bmp(cset)}}
function reCC(cset){var a,bmp,sup,all_hi,surr,d,i,ret=[]
a=splitAtBMP(cset);bmp=a[0];sup=a[1]
a=surrogateSet(sup);all_hi=a[0];surr=a[1]
d=diff(bmp,all_hi)
i=inter(bmp,all_hi)
if(!empty(d)) ret.push(reCC_bmp(d))
if(surr.length) ret.push(sS2RE(surr))
if(!empty(i)) ret.push(reCC_bmp(i))
return ret.join('|')}
function fGC(x){
var ret=cUC[x]
if(!ret) throw Error('unknown Unicode General Category '+x)
return ret}
function show(cset){var i,l,ret=[],c
if(cset.length % 2) cset.push(0x110000)
for(i=0,l=cset.length;i<l;i+=2){
c=cset[i]
if(cset[i+1]==c+1)ret.push(c.toString(16))
else ret.push(c.toString(16)+'-'+(cset[i+1]-1).toString(16))}
return ret.join('\n')}
var g=this
return {'import':function(prefix,object){object=object||g
var i,l,e,es=
[['fromChar',fC]
,['fromInt',fI]
,['universe',U]
,['nil',nil]
,['empty',empty]
,['singleton',one]
,['fromIntRange',fIR]
,['fromCharRange',fCR]
,['fromUnicodeGeneralCategory',fGC]
,['complement',comp]
,['fromList',fL]
,['fromString',fS]
,['member',member]
,['equal',eq]
,['difference',diff]
,['union',union]
,['intersection',inter]
,['toRegex',reCC]
,['show',show]
]
for(i=0,l=es.length;i<l,e=es[i];i++)
object[(prefix||'')+e[0]]=e[1]}}
}();
/* PEG_codegen_5.js */
CSET['import']('',CSET)
function codegen_v5(opts,names,named_res){var ctx
ctx={csets:[],strlits:[]}
opts.drop=opts.drop||[]
opts.nocache=opts.nocache||[]
opts.prefix=opts.prefix||''
opts.start=opts.start||names[0]
return ['function '+opts.prefix+opts.start+'(str){'
, 'var tbl=[],pos=0,l=str.length+1;'
+ (opts.debug?'var i=0;while(i<l)tbl.push({_:i++});'
:'while(l--)tbl.push([]);')
+ 'l=str.length;'
+ (opts.profile?'var profile_log=[]'
:'')
]
.concat(names.map(ntof))
.concat(named_res.map(named_re_to_fdecl(ctx)))
.join('\n ')
+'\n '
+ctx.csets.map(snd)
.concat(ctx.strlits.map(snd))
.join('\n ')
// fin()
+['\n function fin(c,p,x,r,a){'
,'if(r)a.push([p,x]);' // pointer style
,'tbl[p][x]='
,'r?[true,pos,c]:false;'
//,'if(r)a.push(tbl[p][x]);' // direct reference
,'return r}'
].join('')
// empty()
+['\n function e(){return true}'
// ordChoice()
,'function o(){var args=arguments;return function(c){var i,l;for(i=0,l=args.length;i<l;i++)if(args[i](c))return true;return false}}'
// seQuence()
,'function q(){var args=arguments;return function(c){var i,l,cp=pos,cl=c.length;for(i=0,l=args.length;i<l;i++)if(!args[i](c)){pos=cp;t(c,cl);return false}return true}}'
// repetition()
,'function r(m,n,f){return function(c){var i=0,cp=pos,cl=c.length;while(i<m){i++;if(!f(c)){pos=cp;t(c,cl);return false}}cl=c.length;while(i++<n||n==0)if(!f(c))return true;return true}}'
// negative lookahead
,'function n(f){return function(){var p=pos'
+',x=f([]);pos=p;return !x}}'
// positive lookahead
,'function p(f){return function(){var p=pos'
+',x=f([]);pos=p;return x}}'
// truncate() an array
,'function t(a,n){if(a.length>n)a.splice(n)}'
// get() the current Unicode character
// XXX doesn't handle UTF-16 yet
,'function g(p){return str.charCodeAt(p)}'
// build() a parse tree from the result table
/*,'function b(p,n){var i,l,'
+'x=tbl[p][n],c=x[2],cn=[],o=[n,p,x[1],cn];'
+'for(i=0,l=c.length;i<l;i++){'
+'cn.push(b(c[i][0],c[i][1]))}'
+'return o}'*/
,'function b(p,n){var '
+ 'x=tbl[p][n],c=[],a=[n,x[1]-p,c],y=x[2],i=0,l=y.length,z;'
+ 'for(;i<l;i++){z=y[i];'
+ 'if(z[0]>p)c.push([-1,z[0]-p]);' // anonymous node
+ 'c.push(b(z[0],z[1]));' // named node
+ 'p=tbl[z[0]][z[1]][1]}' // new position
+ 'if(p<x[1]&&c.count)c.push([-1,x[1]-p]);'
+ 'return a}'
].join('\n ')
+'\n return '+opts.start+'([])&&pos==l?[true'
+(opts.profile?',profile_log'
:',b(0,'+names.indexOf(opts.start)+')')
+']:[false,pos,tbl]'
//+'\n return '+opts.start+'([])&&pos==l?[true,b(0,\''+start+'\')]:[false,pos,tbl]'
+'}'
+'\n'+opts.prefix+opts.start+'.names='
+'[\''+names.join('\',\'')+'\'];'
function ntof(name){var drop,nocache,idx
drop=opts.drop.indexOf(name)>-1
nocache=opts.nocache.indexOf(name)>-1
idx=names.indexOf(name)
return 'function '+name
+ (drop?'()'
:'(a)')
+ '{'
+ (drop&&nocache?''
:drop?'var x,p=pos;'
:nocache?'var c=[],p=pos;'
:'var x,p=pos,c;')
+ (nocache?''
:'if(x=tbl[p]['+idx+']){'
+ 'pos=x[1];'
+ (opts.profile?'profile_log.push([1,\''+name+'\']);'
:'')
+ (drop?''
:'a.push([p,'+idx+']);')
+ 'return 1}'
+ 'if(x==false){'
+ (opts.profile?'profile_log.push([2,\''+name+'\']);'
:'')
+ 'return 0}')
+ (drop||nocache?''
:'c=[];')
+ (drop?nocache?'return _'+name+'([])'
:'if(_'+name+'([])){'
+ 'tbl[p]['+idx+']=[true,pos];'
+ 'return 1}return 0'
:nocache?'if(_'+name+'(c)){'
+ 'a.push([p,'+idx+']);'
+ 'tbl[p]['+idx+']=[,pos,c];'
+ 'return 1}return 0'
:opts.profile?'x=_'+name+'(c);'
+'profile_log.push([0,\''+name+'\']);'
+'return fin(c,p,'+idx+',x,a)'
:'return fin(c,p,'+idx
+',_'+name+'(c),a)')
+ '}'}}
function named_re_to_fdecl(ctx){return function(named_re){
return 'var _'+named_re[0]+'='+re_to_function_v5(ctx)(named_re[1])}}
function re_to_function_v5(ctx){return function(re){
return f(re)
function f(re){
switch(re[0]){
case 0:
return 'cs_'+cset_ref(ctx,re[1])
case 1:
if(!re[1].length)return 'e'
return 'sl_'+strlit_ref(ctx,re[1])
case 2:
return 'q('+re[1].map(f).join(',')+')'
case 3:
return 'o('+re[1].map(f).join(',')+')'
case 4:
return 'r('+re[1]+','+re[2]+','+f(re[3])+')'
case 5:
return re[1]
case 6:
return 'n('+f(re[1])+')'
case 7:
return 'p('+f(re[1])+')'
}
return re}}
function cset_ref(ctx,cset){var x
function cset_test(x){return CSET.equal(x[0],cset)}
x=first(ctx.csets,cset_test)
if(x>-1)return x
x=ctx.csets.length
ctx.csets[x]=[cset,cset_f(cset,x)]
return x}
function first(xs,f){var i,l
for(i=0,l=xs.length;i<l;i++){
if(f(xs[i]))return i}
return -1}
function cset_f(cset,n){
return 'function cs_'+n+'(){var c,x;'
+ 'if(pos==l)return false;'
+ 'c=g(pos);'
+ cset_to_js_v5(cset,'c','x').replace('\n',';')+';'
+ 'if(x){pos++;return true}'
+ 'return false'
+ '}'}
function strlit_ref(ctx,str){
function strlit_test(x){return x[0]==str}
x=first(ctx.strlits,strlit_test)
if(x>-1)return x
x=ctx.strlits.length
ctx.strlits[x]=[str,strlit_f(str,x)]
return x}
function strlit_f(str,n){var i,l,ret,ret2
l=str.length
if(l>8){
return 'function sl_'+n+'(){'
+ 'var x=str.slice(pos,pos+' +l+ ');'
+ 'if(x=="'+escDblQuot(str)+'"){pos+='+l+';return true}'
+ 'return false'
+ '}'}
else{
ret=['function sl_'+n+'(){var '
,'p=pos;'
,'if(']
ret2=[]
for(i=0;i<l;i++)
ret2.push('str.charCodeAt(p'+(i<l-1?'++':'')+')=='+str.charCodeAt(i))
ret.push(ret2.join('&&'))
ret.push('){pos+='+str.length+';return true}')
ret.push('return false}')
return ret.join('')}}}
function escDblQuot(s){return s.replace(/\\|"/g,"\\$&")}
function cset_to_js_v5(cset,id,id2){
return g(cset)
function g(cset){
if(cset.length<196)
return id2+'='+f(cset,false)
return 'if('+id+'<'+cset[128]+')'
+ id2+'='+f(cset.slice(0,128))
+ '\nelse '+g(cset.slice(128))}
function f(cset,mode){var l=cset.length,a,b,pivot
if(!l)return mode?'1':'0'
a=Math.ceil(l/2);b=l-a
pivot=cset[a-1]
return id+'<'+pivot
+'?'+f(cset.slice(0,a-1),mode)
+':'+f(cset.slice(a),a%2?!mode:mode)}}
function cset_to_js_v5_test(){
return cset_to_js_v5(CSET.fromUnicodeGeneralCategory('Ll'),'c','x')}
/* PTNode.js (for showTree() only) */
function PTNode(name,start,end,str){
this.name=name;this.start=start;this.end=end
this.cn=[]
this._str=str}
function showPTNode(n){
return (n.name||n.idx)+' ('+n.start+'–'+n.end+')'}
function showPTNodeAttrs(n,force){var attrs=[],p,hidden
hidden=
['name'
,'start'
,'end'
,'cn'
,'push'
,'children'
,'_str']
for(p in n){
if(hidden.indexOf(p)>-1)continue
if(force.indexOf(p)!=-1)attrs.push('| '+p+' = '+_force(n[p]))
else attrs.push('| '+p)}
return [(n.name||n.idx)+' ('+n.start+'–'+n.end+')']
.concat(attrs).join('\n')
function _force(f){
try{return f()}
catch(e){return e.toString()}}}
function showPTNodeTreeAttrs(t,hide,force){
return pp(f(t))
function f(n){var x
//if(!n.cn.length&&hide.indexOf(n.name)>-1)return false
if(hide.indexOf(n.name)>-1)return false
if(n.cn.length==1&&n.cn[0].end==n.end
&& showPTNodeAttrs(n,force).indexOf('\n')==-1){
x=f(n.cn[0])
x[0]=n.name+'→'+x[0]
return x}
return [showPTNodeAttrs(n,force)].concat(n.cn.map(f).filter(function(x){return !!x}))}}
PTNode.prototype.push=function(c){this.cn.push(c)}
PTNode.prototype.children=function(){return this.cn}
/* buildTree takes the result table from a successful parse and reconstructs the parse tree. */
/* A result table contains for each position in the input, for each parse rules that was tried at that position, an array having:
[0] ≔ Boolean, true if the rule matched
if [0] is true, the following are also set:
[1] ≔ end position, the last character matched by this rule
[2] ≔ parenting information:
[2][0] ≔ the name of the rule which called this rule
[2][1] ≔ the position in the source input of the parent rule
*/
function buildTree(s){var root,p,tbl=s.tbl,str=s._str
//cleanup irrelevant parser artifacts
tbl.forEach(function(col){
delete col.str
for(p in col)
if(col[p]===false)
delete col[p]})
function populate(node){var
rn=node.name,sp=node.start,ep=node.end
,ret=new PTNode(rn,sp,ep,str)
tbl.slice(sp,ep).forEach(function(col,i){
for(p in col){
if(col[p][2][0]==rn
&& col[p][2][1]==sp)
ret.push(populate(new PTNode(p,sp+i,col[p][1])))}})
return ret}
//root ≔ a parentless match at pos 0
for(p in tbl[0])
if (tbl[0][p].length==2){
root=new PTNode(p,0,tbl[0][p][1])
delete tbl[0][p]}
return populate(root)}
// just dump everything in the fail result in a more human-friendly format
function rawFailDump(fail,names){var ret=[],i,rules,j
for(i=0;i<fail.length;i++){
ret.push('pos: '+i)
rules=fail[i]
for(j=0;j<rules.length;j++){
if(rules[j]==undefined)continue
ret.push(' '+names[j]+': '+rules[j])}}
return ret.join('\n')}
function buildFailTree(s){var root,p,tbl=s.tbl,failpos
//failpos=tbl[0].str.length-s.str().length
failpos=s.pos
tbl.forEach(function(col){
delete col.str})
for(p in tbl[0])
if (tbl[0][p].length==2)
root=p
function rightmost(rn,sp,ep){var i,p,last=false
i:for(i=ep;i--;)
for(p in tbl[i])
if(tbl[i][p][0]
&& tbl[i][p][2]
&& tbl[i][p][2][0]===rn
&& tbl[i][p][2][1]===sp)
{last=[i,p,tbl[i][p][1]];break i}
return [rn+' '+sp+'-'+ep]
.concat(last?rightmost(last[1],last[0],last[2]):[])}
return (
['parser failed at '+failpos
,pp(tbl[failpos])
,'root node was '+root
,'rightmost success chain was '+pp(rightmost(root,0,tbl[0][root][1]))
].join('\n\n'))}
function showTree(t,names){
var ind = '' ;
f(t,0);
return;
function f(n,p){var i,l
sys.print(ind);
if(n[0]==-1) sys.print('anonymous '+p+'-'+(p+n[1]))
sys.print(names[n[0]]+' '+p+'-'+(p+n[1])) // construct label
l = n[2]
if (!l) return
for(i=0,l=n[2].length;i<l;i++){ // append children
sys.print('\n')
ind = ind + ' ';
f(n[2][i],p)
ind = ind.slice(0, ind.length-1);
p += n[2][i][1]}
return /* ret.replace(/\n/g,'\n ') */}} // indent
function markNode(node){node.name='*** '+node.name;return node}
function nonBindingNodeMatch(m,n){var i,l,test
if(m[0][0]&&(!n.name.match(RegExp('^('+m[0][0]+')$'))))return false
return true}
function _get_match(node){
return _get_match.string.substring(node.start,node.end)}
function _define(opts,op,rule){var attrName=op[1],ctx=[]
function _ts(p){return '['+p.join(',')+']'}
rule.bindings.forEach(function(b){
ctx.push((b[0]||'root')+'=nodeAt(model.m,'+_ts(b[1])+')[2]')})
ctx.push('children=node.children()')
ctx.push('opts='+opts)
return eval('(function(node,model){'+
//'log(["_define",node.show(),"'+attrName+'",_get_match(node).split("\\n")[0].replace(/^(.{32}).*/,"$1…")]);'+
'var '+ctx.join(',')+';'+
'node.'+attrName+'=function(){var res='+op[2]
+';node.'+attrName+'=function(r){return function(){return r}}(res);return res}})')
}
})(typeof exports=='undefined'?this:exports);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment